Форматы данных
Сервер CommuniGate Pro обрабатывает большинство типов данных как абстрактные объекты. В этом разделе описывается абстрактные, базовые типы объектов, используемые всеми компонентами сервера.
Для каждого типа объекта указывается текстовое представление объекта.
Когда объект сохраняется в файле, отправляется в ответ по команде CLI/API или извлекается с сервера любым другим способом, то используется текстовое представление объекта.
Когда сервер читает объект извне (из файла настроек, из команды CLI и т.д.), он преобразовывает полученное текстовое представление во внутренний объект.
Текстовое представление
Объекты представляются в виде текста из одной или нескольких строк (в зависимости от контекста).
Элементы представления объекта могут разделяться «пустым пространством». В одностроковом представление в качестве «пустого пространства» может использоваться только символ пробела.
В многостроковом представлении пробел и символ «горизонтальной табуляции», а также символы EOL (обозначения конца строки, CR и / или LF) тоже считаются символами «пустого пространства». Дополнительно «пустым пространством» считается комментарий, который может состоять из:
символов двойной косой черты (//) и всех символов, следующих за ними до символа EOL (конец строки) включительно.
последовательности символов косой черты и звёздочки (/*) и всех символов, следующих за ними до последовательности символов звёздочки и косой черты (*/) включительно.
Простые объекты
Простые объекты являются неструктурированными, обычными объектами одного из типов данных.
Строки
Строка является последовательностью байт, представляющих текст в кодировке UTF-8 и не содержащих двоичный нулевой байт.
Текстовое представление строки является либо атомарным - последовательностью букв латинского алфавита (в кодировке ASCII) и цифр, либо строкой в кавычках — последовательностью любых отображаемых символов (используя кодировку UTF-8), исключая символ кавычки и символ обратной косой черты, заключённой в кавычки (").
Примеры:
MyName My2ndName "Моё Имя с пробелами and the . symbol"
Если вы хотите включить символ кавычки в строку в кавычках, укажите символ обратной косой черты и кавычки, а если вы хотите включить символ обратной косой черты в строку в кавычках, укажите два символа обратной косой черты подряд.
Примеры:
"a \"string\" within string" "Single \\ backslash"
Вы можете использовать комбинацию символов \r, чтобы включить в строку символ возврата каретки; вы можете использовать комбинацию символов \n, чтобы включить в строку символ перевод строки и вы можете использовать комбинацию символов \e, чтобы включить в строку независимую от операционной системы последовательность символов для конца строки.
Примеры:
"Line1\eLine2" "TEXT3\rTEXT67\nTEXT78"
Используйте комбинацию \r или \n для включения знаков возврата каретки и конца строки только, если они НЕ используются как разделители строк.
Чтобы включить в строку символ табуляции, вы можете использовать комбинацию символов \t.
Пример:
"Line1:\tField1\tField2\eLine2:\tField1\tField2"
Можно использовать комбинацию символов \nnn, чтобы включить в строку любой символ; здесь nnn — трёхзначное десятичное число, равное коду ASCII требуемого символа.
Пример:
"Using the \012 (Vertical Tabulation) symbol"
Можно использовать комбинацию символов \u'nnn', чтобы включить в строку любой символ; здесь nnn — шестнадцатеричное число, равное коду Unicode требуемого символа.
Пример:
"Using the \u'2764' (Heavy black heart) symbol"
В многострочном представлении строка может быть представлена последовательностью двух и более строк, при необходимости разделённых одним и более символами «пустого пространства». Это позволяет записывать длинные строковые значения в несколько строк.
Блоки данных
Блоки данных (datablock) являются базовыми, неструктурированными блоками двоичных данных. Они создаются как текстовые строки двоичных данных в кодировке Base64, заключённые в квадратные скобки.
Пример:
[HcqHfHI=]
Это блок двоичных данных, содержащих следующие 5 двоичных байт данных: 0x1D 0xCA 0x87 0x7C 0x72
Символы «пустого пространства» могут помещаться где угодно внутри квадратных скобок.
Числа
Числа (numbers) являются основными неструктурированными объектами данных. Каждый объект «число» содержит одно 64-битное целое значение со знаком. Число представляется в виде текстовой строки, начинающейся с символа #, за которым следует (необязательный) символ минуса (-), за которым, в свою очередь, следует одна или более десятичная цифра или индикатор системы счисления с цифрами, разрешёнными в указанной системе счисления.
Индикатор основания системы счисления 0x задаёт значение основания 16 (шестнадцатеричное число), индикатор 0o задаёт значение основания 8 (восьмеричное число), индикатор 0b задаёт значение 2 (двоичное число).
Примеры:
#-234657#0x17EF#-0b1000111000
Отметки времени
Отметки времени (time stamps) являются основными неструктурированными объектами данных. Каждая отметка времени содержит одно значение глобального времени. Значение времени представляется в GMT времени как текстовая строка, начинающаяся с символов #T и содержащая значение дня, месяца, года и, необязательно, часа, минуты и секунды.
Пример:
#T22-10-2009_15:24:45
Определены также две специальные отметки времени — одна для «далёкого прошлого» (#TPAST) и другая для «далёкого будущего» (#TFUTURE).
IP-адреса
IP-адреса (IP-Addresses) являются основными неструктурированными объектами данных. Каждый объект IP-адрес содержит в себе IPv4 или IPv6 адрес и, необязательно, номер порта. IP-адрес представляется в виде текстовой строки, начинающейся с символов #I и содержащей канонический IPv4 или IPv6-адрес, за которым через двоеточие может следовать номер порта.
Примеры:
#I[10.0.44.55]:25 #I[2001:470:1f01:2565::a:80f]:25
Нулевой объект
Нулевой объект является уникальным простым объектом, представляющим отсутствие любого другого объекта.
Нулевой объект представляется в виде текстовой строки #NULL#.
Другие объекты
Когда сервер преобразует объекты из внутреннего в текстовое представление, в их структуре может встретится специфичный для приложения объект, для которого нет текстового представления. Такие объекты представляются в виде текста #(objectName:address), где objectName — строка из букв и цифр с именем класса объекта, а address — шестнадцатеричное число с адресом объекта в памяти.
Такие объекты НЕ должны использоваться в текстовом представлении, которое конвертируется в объект данных.
Структурированный объекты
Массивы
Объект Массив (array) — это упорядоченный набор объектов (элементов массива).
Текстовое представление массива — список представлений его элементов, разделённых символами запятой (,) и заключённый в круглые скобки.
Пример:
(Element1 , "Element2" , "Element 3")
Элементом массива может быть любой объект — строка, массив, словарь и т.д.
Пример:
(Element1 , ("Sub Element1", SubElement2) , "Element 3")
Любое число пробелов, символов табуляции и / или символов новой строки (символов конца строки) может находиться между скобками и элементом, а также между элементом и символом запятой.
Пример:
( Element1 , ( «Sub Element1», SubElement2 ) ,«Element 3» )
Массив может содержать ноль элементов (пустой массив).
Пример:
()
Словари
Объект словарь (dictionary) является набором пар ключ-значение. Ключи словаря являются строками. Каждый ключ в словаре должен быть уникальным. Ключи словаря обрабатываются как зависимые от регистра строки, за исключением случая, если явно не указано иное.
Любой объект может использоваться как значение, связанное с ключом.
Текстовым представлением словаря является последовательность его пар ключ / значение, заключённая в фигурные скобки.
Каждая пара представляется как строка с ключом, за которым следует знак равно (=) и текстовое представление значения связанного объекта, оканчивающегося символом точка с запятой (;).
Пример:
{Key1=Element1; Key2 =«Element2» ; «Third Key»=«Element 3»; }
Значением объекта в любой паре ключ / значение может быть строка, массив, словарь или любой другой объект.
Пример:
{Key1=(Elem1,Elem2); Key2={Sub1=«XXX 1»; Sub2=X245;}; }
Любое число пробелов, символов табуляции и / или символов новой строки (символов конца строки) может находиться между фигурными скобками и парой, рядом с символом равно и рядом с символом точка с запятой.
Пример:
{ Key1 = (Elem1,Elem2) ; Key2 = { Sub1 = «XXX 1»; Sub2=X245; };}
Словарь может иметь ноль элементов (пустой словарь).
Пример:
{}
XML
Объект XML является документом XML. Он имеет имя, набор пространств имён (строки), набор атрибутов со значениями типа строка и ноль, один или несколько элементов тела. Каждый элемент тела является либо строкой, либо объектом XML.
Текстовым представлением объекта XML является его стандартное текстовое представление, начинающееся с символа угловая скобка.
Правила формального синтаксиса
Ниже приводится формальное определение синтаксиса для текстовых представлений объектов базовых типов.
b-digit | ::= | 0 | 1 |
o-digit | ::= | 0 .. 7 |
d-digit | ::= | 0 .. 9 |
h-digit | ::= | d-digit | A .. F | a .. f |
a-symbol | ::= | A .. Z | a .. z | d-digit |
u-symbol | ::= | a-symbol | любой символ utf-8 не из ASCII таблицы |
l-symbol | ::= | u-symbol | . | - | _ | @ |
atom | ::= | 1* l-symbol |
b-symbol | ::= | a-symbol | + | / | = |
s-symbol | ::= | любой отображаемый символ кроме*"** и \* | \\ | \" | \r | \n | \e | \ d-digit d-digit d-digit |
string | ::= | " 0* s-symbol " | atom |
datablock | ::= | [ 1* b-symbol ] |
day | ::= | 0 .. 3 d-digit (двухзначное число в диапазоне 1..31) |
month | ::= | 0 .. 1 d-digit (двухзначное число в диапазоне 1..12) |
year | ::= | 1 .. 2 d-digit d-digit d-digit (четырёхзначное число в диапазоне 1970..2038) |
hour | ::= | 0 .. 2 d-digit (двухзначное число в диапазоне 0..23) |
minute | ::= | 0 .. 5 d-digit (двухзначное число в диапазоне 0..59) |
second | ::= | 0 .. 5 d-digit (двухзначное число в диапазоне 0..59) |
number | ::= | # [ -] 1* d-digit | # [ -] 0x 1* h-digit | # [ -] 0b 1* b-digit | # [ -] 0o 1* o-digit |
timestamp | ::= | # T day - month - year [ _ hour : minute : second ] |
ip4 | ::= | 1* d-digit . 1* d-digit . 1* d-digit . 1* d-digit |
ip6 | ::= | 0*(1* h-digit :) [: [ 0*(1* h-digit :) ] ] |
ip-address | ::= | # I[ [ip4 | ip6] ] [ : 1*d-digit ] |
null-object | ::= | #NULL# |
array | ::= | ( [object 0*( , object ) ] ) |
dictionary | ::= | { 0*( string = object ; ) } |
XML | ::= | **<**XML в стандартном формате > |
object | ::= | string | datablock | number | timestamp | ip-address | null-object | array | dictionary | XML |
Объекты XML
CommuniGate Pro может преобразовывать сложные структуры (такие как vCards, iCalendar, SDP объекты) в простые объекты XML. Представление XML может также потребоваться для таких объектов как блоки данных, массивы или словари. Этот раздел описывает представление XML в CommuniGate Pro для всех таких объектов и сложных структур.
Строка
Строка представляется текстовым элементом.
Если это верхний элемент XML, то строка представляется как элемент XML object с текстовым телом, содержащим эту строку.
Если строка содержит специальные символы, то она должна быть представлена как элемент binStringс текстовым телом в кодировке base64.
Пустая строка может быть представлена пустым элементомbinString.
Блоки данных
Блок данных представляется как элемент XML base64.
Телом элемента XML является содержимое блока данных в кодировке base64.
Пример:
<base64>STYRyui=</base64>
Числа
Число представляется как элемент XML number.
Телом элемента XML является текстовое представление значения числового объекта (десятичное или, если указан индикатор системы счисления, шестнадцатеричное, восьмеричное или бинарное).
Примеры:
<number>123456</number>, <number>0x78FAB5</number>
Отметки времени
Отметка времени представляется как элемент XML date.
Телом элемента XML является текстовое представление отметки времени в формате iCalendar.
Пример:
<date>20101122T123000Z</date>
IP-адреса
IP-адрес представляются как элемент XML ipAddr.
Телом элемента XML является текстовое представление IP-адреса, заключённое в квадратные скобки и необязательное отделённое двоеточием десятичное число — номера порта.
Пример:
<ipAddr>[10.0.2.2]:8010</ipAddr>
Нулевой объект
Объект с нулевым значением представляется как пустой элемент XML null.
Массивы
Массив представляется как последовательность из одного или более XML элементов subValue.
Тело элемента XML представляет элемент массива.
Пустой массив представляется как один элемент XML subValue без тела.
Если верхний XML элемент, то массив представляется как элемент XML object, с текстовым телом, содержащим элементы XML subValue.
Пример:
<subValue>my string</subValue><subValue><number>123456</number></subValue>
Словарь
Словарь представляется как последовательность из одного или более элементов XML subKey.
Атрибут key элемента XML задаёт ключ элемента словаря, а тело XML представляет значение элемента словаря.
Пустой словарь представляется как один элемент XML subKey без атрибута key и без тела.
Если словарь является верхним элементом XML, то он представляется как элемент XML object, с текстовым телом, содержащим элементы XML subKey.
Пример:
<subKey key=«firstKey»>my string</subKey><subKey key=«secondKey»><number>123456</number></subKey>
vCard
Этот элемент XML представляет объект vCard (согласно спецификации Jabber/XEP для документов XML vCard).
Атрибуты:modified
Этот необязательный атрибут содержит значение свойства REV (время GMT в формате iCalendar).
Тело:
Содержит свойства vCard как XML элементы с такими же именами, преобразованными к верхнему регистру ASCII.
Каждый элемент свойства содержит:
Атрибуты:
отсутствуют
Тело:
набор элементов XML, представляющих параметры свойства и значение свойства:
параметры
Элементы XML с такими же именами, как и имена параметров, преобразованные к верхнему регистру ASCII.
Параметры ENCODING и QUOTED-PRINTABLE свойств vCard используются для декодирования значений свойства, и поэтому они не сохраняются.
значение
структурированные значения (N,ORG,ADR)
набор элементов XML с именами элементов структуры и текстовые тела, содержащие часть структурированного значения свойства.
двоичное значение
элемент XML BINVAL с текстовым телом, содержащим значение свойства в кодировке base64.
текстовое значение
элемент XML VALUE с текстовым телом, содержащим значение свойства.
Пример:
begin:VCARDsource:ldap://cn=bjorn Jensen, o=university of Michigan, c=USname:Bjorn Jensenn:Jensen;bjorn;A;Mr;IIemail;type=INTERNET:bjorn@umich.eduorg:U of Michigan;Computer Science Dept.tel;type=WORK,MSG:+1 313 747-4454key;type=x509;encoding=B:dGhpcyBjb3VsZCBiZSAKbXkgY2VydGlmaWNhdGUKend:VCARD
<vCard><SOURCE><VALUE>ldap://cn=bjorn Jensen, o=university of Michigan, c=US</VALUE></SOURCE><NAME><VALUE>Bjorn Jensen</VALUE></NAME><N><FAMILY>Jensen</FAMILY><GIVEN>bjorn</GIVEN><MIDDLE>A</MIDDLE><PREFIX>Mr.</PREFIX><SUFFIX>II</SUFFIX></N><EMAIL><VALUE>bjorn@umich.edu</VALUE></EMAIL><ORG><ORGNAME>U of Michigan</ORGNAME><ORGUNIT>Computer Science Dept.</ORGUNIT></ORG><TEL><WORK /><MSG /><VALUE>+1 313 747-4454</VALUE></TEL><KEY><X509 /><BINVAL>dGhpcyBjb3VsZCBiZSAKbXkgY2VydGlmaWNhdGUK</BINVAL></KEY></vCard>
vCardGroup
Этот элемент XML представляет объект vCardGroup.
Атрибуты:modified
Этот необязательный атрибут содержит значение свойства REV (время GMT в формате iCalendar).
Тело:
свойства vCardGroup как XML элементы с такими же именами, преобразованные к верхнему регистру ASCII: NAME, NOTE, UID. Каждый элемент включает в себя элемент XML VALUE с текстовым телом, содержащим значение свойства.
Ноль, один или несколько элементов XML MEMBER, по одному на каждого члена группы. Текстовым телом XML элемента является адрес члена группы, а необязательный атрибут CN содержит «настоящее имя» элемента.
Пример:
BEGIN:VGROUPPRODID:CommuniGate Pro 6.1VERSION:1.0NAME:Basket BuddiesNOTE:My basketball team.UID:594895837.1@team.domREV:20071214T174114ZMEMBER;CN=«Jack Nimble»:jack@nimble.domMEMBER;CN=«Tim Slow»:tim@slow.domEND:VGROUP
<vCardGroup modified=«20071214T174114Z»><NAME><VALUE>Basket Buddies</VALUE></NAME><NOTE><VALUE>My basketball team.</VALUE></NOTE><UID><VALUE>594895837.1@team.dom</VALUE></UID><MEMBER CN=«Jack Nimble»>jack@nimble.dom</MEMBER><MEMBER CN=«Tim Slow»>tim@slow.dom</MEMBER></vCardGroup>
iCalendar
Этот элемент XML представляет объект iCalendar.
Тело:
элемент vCalendar.
vCalendar
Этот элемент XML представляет объект vCalendar.
Атрибуты:version
версия vCalendar (2.0 для iCalendar)
method
необязательный атрибут с методом vCalendar
prodid
необязательная строка, идентифицирующая продукт, использованный для создания этого объекта vCalendar.
Тело:
набор элементов vtimezone, vevent и / или vtodo, vfreebusy.
vtimezone
Этот элемент XML представляет объект VTIMEZONE.
Тело:
набор элементов XML:
tzid: тело элемента содержит название часового пояса.
standard и, необязательно, daylight: эти тела элементов содержат следующие XML элементы:
tzoffsetto: тело элемента содержит значение сдвига времени.
tzoffsetfrom (необязательно) тело элемента содержит значение сдвига времени.
rrule (необязательно): тело элемента содержит строку с описателем повторяемости.
Пример:
BEGIN:VTIMEZONETZID:Europe/CentralBEGIN:STANDARDDTSTART:19710101T030000TZOFFSETFROM:+0200TZOFFSETTO:+0100RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SUEND:STANDARDBEGIN:DAYLIGHTDTSTART:19710101T020000TZOFFSETFROM:+0100TZOFFSETTO:+0200RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SUEND:DAYLIGHTEND:VTIMEZONE
<vtimezone><tzid>Europe/Central</tzid><standard><dtstart>19710101T030000</dtstart><tzoffsetto>+0100</tzoffsetto><rrule>FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU</rrule></standard><daylight><dtstart>19710101T020000</dtstart><tzoffsetto>+0200</tzoffsetto><rrule>FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU</rrule></daylight></vtimezone>
vevent, vtodo
Эти элементы XML представляют объекты VEVENT и VTODO.
Атрибуты:localTime
этот атрибут присутствует только для неповторяющихся календарных объектов. В нём содержится дата и время начала календарного объекта. Используется местное время в часовом поясе, выбранном для текущего пользователя.
localStart
этот атрибут присутствует только для повторяющихся календарных объектов. В нём содержится время начала календарного объекта (секунды, начиная с полуночи). Используется местное время в часовом поясе, выбранном для текущего пользователя.
Тело:
набор элементов XML, каждый представляющий одно свойства.
Параметры свойства представляются как атрибуты элемента.
Значение свойства представляется в теле элемента.
Если значение начинается с префикса MAILTO:, то этот префикс удаляется.
Если календарный объект имеет «исключения», добавляется элемент XML exceptions. Его дочерние элементы XML представляют исключения для объектов VEVENT и VTODO.
Пример:
BEGIN:VEVENTORGANIZER;CN=«Jim Smith»:MAILTO:jim_smith@example.comRRULE:FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,TU,WE,TH;UNTIL=20060305T000000ZDTSTAMP:20051204T140844ZUID:566852630.4@mail.example.comSEQUENCE:1SUMMARY:test - recurrentDTSTART;TZID=NorthAmerica/Pacific:20051204T100000DTEND;TZID=NorthAmerica/Pacific:20051204T110000X-MICROSOFT-CDO-BUSYSTATUS:BUSYLAST-MODIFIED:20051204T140844ZCREATED:20051204T140844ZPRIORITY:5END:VEVENTBEGIN:VEVENTUID:566852630.4@mail.example.comRECURRENCE-ID:20051206T180000ZSUMMARY:test - recurrent (later this time)DTSTART;TZID=NorthAmerica/Pacific:20051206T120000DTEND;TZID=NorthAmerica/Pacific:20051206T130000END:VEVENT
<vevent><organizer CN=«Jim Smith»>jim_smith@example.com</organizer><rrule>FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,TU,WE,TH;UNTIL=20060305T000000Z</rrule><dtstamp>20051204T140844Z</dtstamp><uid>566852630.4@mail.example.com</uid><sequence>1</sequence><summary>test - recurrent</summary><dtstart tzid=«NorthAmerica/Pacific»>20051204T100000</dtstart><dtend tzid=«NorthAmerica/Pacific»>20051204T110000</dtend><busystatus>BUSY</busystatus><last-modified>20051204T140844Z</last-modified><created>20051204T140844Z</created><priority>5</priority><exceptions><uid>566852630.4@mail.example.com</uid><recurrenceId>20051206T180000Z</recurrenceId><summary>test - recurrent (later this time)</summary><dtstart tzid=«NorthAmerica/Pacific»>20051206T120000</dtstart><dtend tzid=«NorthAmerica/Pacific»>20051206T130000</dtend></exceptions></vevent>
vfreebusy
Эти элементы XML представляют объекты VFREEBUSY.
Атрибуты:dtstart
начало временного периода, покрываемого объектом VFREEBUSY.
dtend
конец временного периода, покрываемого объектом VFREEBUSY.
dtstamp
время создания этого объекта VFREEBUSY.
Тело:
набор элементов XML freebusy, каждый из которых представляет один временной интервал. Временные интервалы не пересекаются.
Атрибуты:dtstart
начало временного интервала.
dtend
конец временного интервала.
fbtype
необязательный атрибут с типом занятости. Если он не указан, то интервал имеет статус BUSY.
Пример:
BEGIN:VFREEBUSYDTSTART:20080329T075517ZDTEND:20080604T075517ZDTSTAMP:20080405T075517ZFREEBUSY:20080329T075517Z/20080329T120000ZFREEBUSY:20080330T070000Z/20080330T120000ZFREEBUSY:20080331T070000Z/20080331T120000ZEND:VFREEBUSY
<vfreebusy dtend=«20080604T075517Z» dtstamp=«20080405T075517Z» dtstart=«20080329T075517Z»><freebusy dtend=«20080329T120000Z» dtstart=«20080329T075517Z» /><freebusy dtend=«20080330T120000Z» dtstart=«20080330T070000Z» /><freebusy dtend=«20080331T120000Z» dtstart=«20080331T070000Z» /></vfreebusy>
xrule
Этот элемент XML представляет повторяющийся календарный объект.
Атрибуты:freq
тип повторяемости.
interval
параметр с интервалом. Если отсутствует, интервал подразумевается равным 1.
wkst
название дня, с которого начинается неделя. Если отсутствует, то подразумевается MO (понедельник).
count
необязательный атрибут с целочисленным значением, в котором указывается параметр COUNT.
until
необязательный атрибут, указывающий параметр UNTIL в формате даты-времени iCalendar.
Тело:
набор элементов XML:
BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYSETPOS
тело каждого элемента содержит число — номер месяца, недели и т.п. За исключением элемента BYMONTH, число может быть отрицательным.
BYDAY
каждое тело элемента содержит одно наименование дня (MO, TU, .. SU); каждый элемент может содержать необязательный числовой атрибут week - номер недели (он может быть отрицательным).
Пример:
RRULE:FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,TU,WE,TH;UNTIL=20060305T000000Z
<xrule freq=«WEEKLY» interval=«2» until=«20060305T000000Z»><BYDAY>MO</BYDAY><BYDAY>TU</BYDAY><BYDAY>WE</BYDAY><BYDAY>TH</BYDAY></xrule>
Пример:
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
<xrule freq=«YEARLY»><BYMONTH>10</BYMONTH><BYDAY week=«-1»>SU</BYDAY></xrule>
x509
Этот элемент XML представляет сертификат X.509.
Атрибуты:version
версия формата сертификата.
subject
необязательный адрес E-Mail, связанный с сертификатом.
Тело:
набор элементов XML:
subject,issuer
эти элементы XML содержат дочерние элементы XML с частями имени сертификата и издателя. Поддерживаются части c, country, l, city, и т.д. Значением дочернего элемента является тело элемента.
validFrom,validTill
текстовые тела каждого элемента содержат в формате iCalendar период действия сертификата
base64
необязательный элемент — его тело содержит данные сертификата в формате base64.
sdp
Этот элемент XML представляет объект SDP.
Атрибуты:ip
IP-адрес медиа по умолчанию (необязательно).
origUser
поле с именем пользователя источника (необязательно).
sessionID
поле идентификатора сессии источника.
sessionVersion
поле версии сессии источника.
origIP
IP-адрес, указанный в полях nettype, addrtype и unicast-address источника (необязательно).
subject
название сессии (необязательно). Если отсутствует, то используется название -.
Тело:
набор элементов info, attribute и media.
media
Этот элемент XML представляет объект SDP-медиа.
Атрибуты:media
типа медиа (такой, как audio, video). Если этот атрибут отсутствует, то используется значение audio.
ip
адрес и порт медиа.
protocol
медиапротокол (такой, как udp, tcp, RTP/AVP). Если этот атрибут отсутствует, то используется значение RTP/AVP.
direction
направление медиа (sendrecv, sendonly, recvonly, inactive).
rtcp
адрес и порт rtcp (необязательно)
Тело:
набор элементов codec, info, and attribute.
codec
Этот элемент XML представляет кодек SDP Медиа.
Атрибуты:id
идентификатор кодека — номер типа данных RTP (число из диапазона 0..127).
name
имя кодека (такое, как PCMU/8000).
format
параметр формата кодека (необязательно).
attr
Этот элемент XML представляет атрибут объекта SDP или SDP Медиа.
Атрибуты:name
имя атрибута.
Тело:
необязательная строка со значением атрибута.
info
Этот элемент XML представляет информационное поле объекта SDP или SDP медиа. Поддерживаемые поля:
для SDP: info, uri, email, phone, phone, bandwidth, time, repeat, zone и key;
для SDP-медиа: title, bandwidth и key;
Атрибуты:
отсутствуют.
Тело:
необязательная строка со значением поля.
Пример: образец документа SDP и его представления XML:
v=0o=- 6385718 9999 IN IP4 192.168.1.65s=-e=support@communigatepro.ruc=IN IP4 192.168.1.65t=0 0a=sdpattr1:sdpvaluea=sdpattr2m=audio 16398 RTP/AVP 0 4 8 101t=title valuea=rtpmap:0 PCMU/8000a=rtpmap:4 G723/8000a=rtpmap:8 PCMA/8000a=rtpmap:101 telephone-event/8000a=fmtp:101 0-15a=sendrecva=mediaattr1:mediavaluea=mediaattr2
<sdp ip="[192.168.1.65]« origUser=»-« sessionID=»6385718« sessionVersion=»9999« originIP=»[192.168.1.65]«><email>support@communigatepro.ru</email><attr name=»sdpattr1«>sdpvalue</attr><attr name=»sdpattr2« /><media media=»audio« ip=»[192.168.1.65]:16398« protocol=»RTP/AVP« direction=»sendrecv«><codec id=»0« name=»PCMU/8000« /><codec id=»4« name=»G723/8000« /><codec id=»8« name=»PCMA/8000« /><codec id=»101« name=»telephone-event/8000« format=»0-15« /><title>title value</title><attr name=»mediaattr1«>mediavalue</attr><attr name=»mediaattr2" /></media></sdp>
ASN.1
CommuniGate Pro может преобразовывать структуры в формате ASN.1 в объекты.
Каждый элемент данных ASN.1 преобразуется в массив.
Для элементов данных ASN.1 класса Universal элемент массива с индексом 0 содержит строку с именем типа: boolean, integer, bits, octets, null, oid, objdescr, external, real, enum, embed, string, reloid, rsrv1, rsrv2, seq, set, stringNum, stringPrint, stringT61, stringIA5, string22, timeUTC, time, stringGraphic, stringISO64, stringGeneral, stringUniversal, string29, stringBMP, string31.
Иначе элемент массива с индексом 0 содержит строку с именем класса (application, choice,private), элемент массива с индексом 1 содержит число — код элемента данных.
Для элементов данных типа «constructed» оставшиеся элементы массива (возможно — 0 элементов) содержат конвертированные элементы ASN.1.
Для «примитивных» элементов данных оставшиеся элементы массива содержат представление данных, которое зависит от типа элемента:
boolean
Нулевой объект для «false», любой другой объект для «true»
integer, enum (не длиннее 8 байт)
Число
null
Нулевой объект
string, subtypestring (данные не содержат бинарный нуль)
Строка
time, timeUTC
Отметка времени
oid, reloid
представление в виде строки для идентификатора объекта (ObjectID) (nn.mm.ll.kk.rr)
другие типы данных
Блок данных