KasperskyOS Community Edition 1.0

CDL

Каждый используемый в решении компонент должен быть описан на языке CDL в отдельном файле <имя компонента>.cdl.

Имя CDL-файла должно совпадать с именем компонента, который он описывает.

CDL-файл содержит следующие разделы:

  1. Имя компонента. Перед именем компонента ставится ключевое слово component.

    Имя компонента должно начинаться с заглавной буквы и не может содержать символ подчеркивания (_).

  2. Интерфейс безопасности, содержащийся в этом компоненте. Раздел не является обязательным и должен быть добавлен, только если в компоненте содержится интерфейс безопасности. Декларируется ключевым словом security, за которым следует полное имя интерфейса.
  3. Перечень реализаций интерфейсов, которые включены в этот компонент. Интерфейсы декларируются в секции interfaces, внутри которой каждая реализация интерфейса указывается отдельной строкой в следующем формате:

    interfaces {

    <имя реализации интерфейса>:<имя интерфейса>

    }

    Компонент может содержать несколько реализаций одного интерфейса. Все реализуемые интерфейсы необходимо описать на языке IDL в IDL-файлах.

    Имя реализации интерфейса не может содержать символ подчеркивания (_).

  4. Список экземпляров компонентов, вложенных в этот компонент. Раздел не является обязательным и добавляется в том случае, если компонент содержит вложенные компоненты. Компоненты декларируются в секции components, внутри которой каждый экземпляр компонента указывается отдельной строкой в следующем формате:

    components {

    <имя экземпляра компонента>:<имя компонента>

    }

    Для каждого указанного компонента необходимо создать отдельный файл <имя компонента>.cdl, содержащий описание компонента на языке CDL. В компонент можно добавить несколько экземпляров одного и того же компонента, причем каждый может иметь отдельное состояние.

    Имя экземпляра компонента не может содержать символ подчеркивания (_).

СDL поддерживает однострочные и многострочные комментарии в стиле C++.

Примеры CDL-файлов

В простейшем случае компонент содержит единственную реализацию интерфейса, подобно компоненту ping из примера echo.

Ping.cdl

/* Имя компонента: Ping */

component Ping

/* Компонент содержит именованную реализацию интерфейса IPing. Имя реализации: pingimpl.*/

components {

pingimpl: IPing

}

В следующем примере компонент CoFoo содержит реализации двух интерфейсов, объявленных в двух разных пакетах Foo и Baz (т.е. в файлах Foo.idl и Bar.idl):

CoFoo.cdl

/* Имя компонента: CoFoo */

component CoFoo

interfaces {

/* Компонент содержит реализацию интерфейса Foo. Имя реализации: foo.*/

foo: Foo

/* Компонент содержит три разных реализации интерфейса Bar. Имена реализаций: bar1, bar2 и bar3.*/

bar1: Bar

bar2: Bar

bar3: Bar

}

В следующем примере компонент CoFoo содержит единственную реализацию интерфейса, а также вложенный компонент.

CoFoo.cdl

/* Имя компонента: CoFoo */

component CoFoo

interfaces {

/* Компонент содержит реализацию интерфейса Foo. Имя реализации: foo.*/

foo: Foo

}

components {

/* Компонент содержит экземпляр компонента CoBar. Имя экземпляра: bar.*/

bar: CoBar

}