СПОСОБ ОБРАБОТКИ ДАННЫХ СВЯЗИ TLV-ФОРМАТА
METHOD TO PROCESS COMMUNICATION DATA OF TLV FORMAT

ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Настоящее изобретение относится к области связи и, в частности к способу обработки формата TLV данных связи.
УРОВЕНЬ ТЕХНИКИ
Абстрактное описание 1 синтаксиса (ASN.1) представляет собой стандартный способ описания формата сообщения, переданного в сети, разработанный Международным союзом электросвязи (ITU), который используют для обеспечения стандартного формата для преобразования данных между узлами. Каждому узлу достаточно знать лишь формат данных, который транслирован из ASN.1 или транслирован в ASN.1, при этом знать форматы, в которых данные представлены в других местах сети, не обязательно.
ASN.1 состоит из двух частей: первая часть (ISO 8824/ITU X.208) описывает данные, тип данных и формат последовательности в сообщении, который является синтаксисом данных; и вторая часть (ISO 8825/ITU X.209) описывает правила составления сообщения из данных соответствующих частей, которые являются основными правилами кодирования данных. Формат ASN.1 был разработан в качестве части Х.409 на ранней стадии его разработки и впоследствии превратился в независимый стандарт. Стандарт Инфраструктуры открытого ключа (PKI) первого поколения главным образом основан на ASN.1. В Упрощенном протоколе управления сетью (SNMP) стандарт ASN.1 используется для задания единицы данных SNMP и формата объекта.
ASN.1 широко применяется в области связи, компьютерной области и в других областях. Сообщение в формате ASN.1 имеет следующие специальные свойства:
1. Сообщение имеет древовидную структуру, которая в случае необходимости может задавать многослойное вложенное сообщение.
2. Тип данных узла в сообщении может быть простым типом данных, например, INTEGER, GRAPHICSTRING, ENUM и т.д., или составным типом данных, содержащим подузел, например SET, SEQUENCE, SET OF, SEQUENCE OF.
3. В типе SET или типе SEQUENCE некоторый узел может отсутствовать, поскольку узел соответствующего сообщения может быть установлен как OPTIONAL, что означает, что он не является существенным. При использовании файла ASN.1 в первую очередь задают тип ASN.1 в файле ASN.1 и затем компилируют компилятором, так что тип ASN.1 становится промежуточным типом языка программирования, таким как язык Java или C++, и затем для достижения цели связи используют соответствующий тип языка программирования.
4. Стандарт ASN.1 поддерживает кодировку BER, кодировку DER, кодировку VAL и т.д., посредством которых пример типа промежуточного языка может быть закодирован в кодовый поток и декодирован из кодового потока обратно в пример соответствующего типа промежуточного языка.
5. Задающий формат, использованный в ASN.1 имеет следующий вид: "NewStructName:: = defining a message", например "UserNameList-T:: = SEQUENCE OF UserName-T", который указывает, что тип UserNameList-T задан в форме массива с именем пользователя - Т (UserName-T) в качестве элемента.
В программном обеспечении архитектуры Клиент/Сервер (C/S), Клиент и Сервер должны связываться между собой. Сообщение связи в общем виде имеет два формата: закрытый формат и стандартный формат, например протоколы ASN.1, SNMP и т.д.
Общепринятый способ использования сообщения ASN.1 в программном обеспечении типа C/S содержит этапы, на которых:
1. устанавливают соединение между клиентским терминалом и серверным терминалом,
2. клиентский терминал взаимодействует с серверным терминалом через протокол, при этом:
1) сторона, передающая сообщение, заполняет в сообщении заголовок и тело сообщения в формате ASN.1, причем заголовок сообщения содержит код операции, и в теле сообщения используют тип AsnAny с его типом реальных данных, изменяющимся в зависимости от кода операции;
2) сторона, передающая сообщение, кодирует сообщение в кодовый поток и передает его стороне, принимающей сообщение;
3) сторона, принимающая сообщение, принимает кодовый поток сообщения, декодирует заголовок сообщения и затем декодирует тело сообщения с использованием заданного типа данных в соответствии с общим кодом в сообщении; и
4) сторона, принимающая сообщение, выполняет соответствующий ответ согласно содержанию сообщения,
3. Завершают взаимодействие и разрывают соединение.
Во время связи данные, которые составлены согласно формату: "тип данных, длина данных, тело данных", могут быть представлены в виде: "Тип, Длина, Значение", который называют форматом TLV. Упомянутый формат TLV удобен и высоко эффективен при составлении данных и особенно хорошо подходит для данных переменной длины. При составлении содержания тела данных на прикладном уровне обычно используют именно этот формат. Кодировка BER в ASN.1 фактически представляет собой кодировку TLV.
В уровне техники тип данных Т в кодировке TLV не может быть настроен пользователем. Если одно и то же имя типа не задано одним и тем же способом в различных версиях, Клиент и Сервер не смогут связаться. Т.е. версии протоколов сообщения в клиентском терминале и в терминале Сервера должны быть согласованы. Если они не согласованы, эти две стороны не смогут взаимодействовать друг с другом.
РАСКРЫТИЕ ИЗОБРЕТЕНИЯ
В настоящем изобретении предложено решение проблемы уровня техники, из-за которой Клиент и Сервер не могут связываться друг с другом, если версии протоколов сообщения этих двух сторон не согласованы. Таким образом, настоящее изобретение предлагает улучшенный способ обработки данных связи формата TLV для устранения вышеуказанной проблемы уровня техники.
В вариантах осуществления настоящего изобретения предложен способ обработки данных связи формата TLV, содержащий этапы, на которых: задают тип Т целочисленного типа в формате ASN.1, передающая сторона заполняет сообщение в формате ASN.1 сообщением, содержащим пример структуры данных, и передающая сторона кодирует сообщение в кодовый поток, причем кодовый поток примера структуры данных в сообщении содержит значение V, или содержит это значение V, целочисленный тип этого значения V и длину L этого значения V.
Предпочтительно задание целочисленного типа в формате ASN.1, в частности, содержит этапы, на которых: устанавливают формат ASN.1 для обеспечения возможности задания целочисленного типа и задают структуру целочисленного типа в формате "string type name [X]:: = defining a structure", причем терм Х относится к целочисленному типу.
Предпочтительно задание структуры целочисленного типа в формате "string type name [X]::=defining a structure", в частности, содержит этапы, на которых: устанавливают структуру целочисленного типа, такого как тип SEQUENCE, SET или CHOICE, с одним и тем же именем типа, и указывают, что если его элемент должен быть изменен, то разрешено лишь чистое увеличение или чистое уменьшение в элементах и разрешено лишь изменение концевого элемента, но не разрешено изменение типа.
Предпочтительно способ обработки данных формата TLV дополнительно содержит установку компилятора формата ASN.1 с функцией обработки целочисленного типа.
Предпочтительно способ обработки данных формата TLV дополнительно содержит получение с использованием функции целочисленный тип в типе C++ в формате ASN. 1.
Предпочтительно кодирование передающей стороной сообщения в кодовый поток содержит этапы, на которых: с использованием функции кодирования интеграции вызывают функцию кодирования значения, функцию кодирования длины и функцию кодирования целочисленного типа или с использованием функции кодирования интеграции вызывают лишь функцию кодирования значения для кодирования сообщения в кодовый поток, используют функцию кодирования целочисленного типа для получения целочисленного типа кодового потока согласно кодировке данных в примере структуры данных, используют функцию кодирования значения для кодирования простых данных в примере структуры данных в значение V кодового потока, как и в случае примера структуры данных для простого типа данных, используют функцию кодирования значения для последовательного вызова функции кодирования интеграции индивидуальных элементов в примере структуры данных, как и в случае примера структуры данных типа SEQUENSE или SET, используют функцию кодирования значения для последовательного вызова функции кодирования интеграции индивидуальных элементов массива в примере структуры данных, как и в случае примера структуры данных типа SEQUENSE OF или SET OF, и используют функцию кодирования значения для кодирования выбранного элемента в примере структуры данных в значение V кодового потока, как и в случае примера структуры данных типа CHOICE, причем это значение V содержит порядковый номер выбранного элемента в CHOICE и сам выбранный элемент.
Предпочтительно если целочисленный тип равен 0 или отсутствует, функция кодирования интеграции вызывает лишь только функцию кодирования значения; и если целочисленный тип не равен 0, кодовый поток содержит это значение V, длину L этого значения V и целочисленный тип.
Предпочтительно способ обработки данных формата TLV дополнительно содержит этап, на котором принимающая сторона декодирует кодовый поток.
Предпочтительно декодирование кодового потока, в частности, содержит этапы, на которых: с использованием функции декодирования интеграции вызывают функцию декодирования значения, функцию декодирования длины и функцию декодирования целочисленного типа, или с использованием функции декодирования интеграции вызывают лишь функцию декодирования значения для декодирования кодового потока, используют функцию декодирования целочисленного типа для декодирования кодового потока согласно целочисленному типу в кодовом потоке, используют функцию декодирования значения для декодирования значения V в кодовом потоке в простые данные в примере структуры данных, как и в случае примера структуры данных для простого типа данных, используют функцию декодирования значения для декодирования последовательно значения V в кодовом потоке в данные индивидуальных элементов в примере структуры данных, как и в случае примера структуры данных типа SEQUENSE или SET, используют функцию декодирования значения для декодирования последовательно значения V в кодовом потоке в индивидуальные элементы массива в примере структуры данных, как и в случае примера структуры данных типа SEQUENSE OF или SET OF, во время которого оценивают, является ли длина потока декодирования в структуре меньше длины L, и если указанная длина потока декодирования в структуре меньше длины L, то продолжают декодирование, в противном случае декодирование в настоящей структуре прекращают, и используют функцию декодирования значения для декодирования порядкового номера в кодовом потоке и элемента, соответствующего указанному порядковому номеру, как и в случае примера структуры данных типа CHOICE, причем если элемент, соответствующий указанному порядковому номеру, не существует в настоящей структуре, то функцию декодирования значения завершают.
Предпочтительно вызов функции декодирования значения, функции декодирования длины и функции декодирования целочисленного типа с использованием функции декодирования интеграции или вызов лишь функции декодирования значения с использованием функции декодирования интеграции для декодирования кодового потока, в частности, содержит этапы, на которых: определяют с использованием функции декодирования интеграции, является ли целочисленный тип равным 0 или отсутствующим; если упомянутый целочисленный тип не равен 0 или не является отсутствующим, то вызывают функцию декодирования значения, функцию декодирования длины и функцию декодирования целочисленного типа, причем функцию декодирования значения вызывают для декодирования целочисленного типа в кодовом потоке для проверки, соответствует ли полученный целочисленный тип собственному целочисленному типу, и если он не соответствует, то он рассматривается как результат ненормального декодирования, функцию декодирования длины вызывают для декодирования длины L в кодовом потоке и затем вызывают функцию декодирования значения для декодирования значения V в кодовом потоке; если длина vL, полученная декодированием этого значения V, меньше длины L, то L-vL байтов пропускают; и если упомянутый целочисленный тип равен 0 или отсутствует, то вызывают лишь функцию декодирования значения.
Способы обработки данных формата TLV в вышеуказанных вариантах осуществления настоящего изобретения преодолевают проблему уровня техники, из-за которой различные версии протоколов не могут связываться, путем добавления способа расширения поля Т в формате ASN.1 для осуществления взаимной связи между различными версиями ASN.1 и реализации объектно-ориентированного способа TLV.
Другие характеристики и преимущества настоящего изобретения описаны в последующих частях описания и, кроме того, частично очевидны из описания или понятны из реализации настоящего изобретения. Задача и другие преимущества настоящего изобретения могут быть реализованы и получены при реализации структуры, в частности указанной в описании, приложенной формуле и сопровождающих чертежах.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Приведенные здесь сопровождающие чертежи способствуют дальнейшему пониманию настоящего изобретения и являются частью настоящей заявки. Проиллюстрированные варианты осуществления настоящего изобретения и их описания используются для объяснения настоящего изобретения, не ограничивая настоящее изобретение. На чертежах:
Фиг.1 иллюстрирует блок-схему способа обработки формата TLV данных связи согласно варианту реализации настоящего изобретения;
Фиг.2 иллюстрирует блок-схему процесса разработки, в котором клиентская сторона и сервер совместно используют один и тот же язык для разработки среды согласно предпочтительному варианту реализации настоящего изобретения;
Фиг.3 иллюстрирует вид процесса разработки на различных языках для разработки среды согласно предпочтительному варианту реализации настоящего изобретения;
Фиг.4 иллюстрирует блок-схему процесса разработки, в котором клиентская сторона и сервер используют различные языки для разработки среды и различные версии протокола согласно предпочтительному варианту реализации настоящего изобретения;
Фиг.5 иллюстрирует блок-схему системы наследования типов базового класса C++ ESNACC согласно предпочтительному варианту реализации настоящего изобретения; и
Фиг.6 иллюстрирует блок-схему функции декодирования интеграции TLV согласно предпочтительному варианту реализации настоящего изобретения.
ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ
Краткое описание функций
С учетом проблемы уровня техники, состоящей в том, что Клиент и Сервер не в состоянии связываться друг с другом, если версии протоколов сообщений этих двух сторон не являются согласованными, в вариантах выполнения настоящего изобретения предложен способ обработки данных формата TLV передачи данных. В настоящем варианте выполнения в формат ASN.1 добавлен способ расширения поля Т, и сообщение заполняют в расширенном формате ASN.1, и таким образом преодолена проблема уровня техники, из-за которой различные версии протоколов не обеспечивают взаимную связь, и реализован объектно-ориентированный способ взаимной связи между различными версиями ASN.1 и TLV.
Далее настоящее изобретение будет подробно описано со ссылкой на чертежи и в комбинации с вариантами осуществления. Варианты осуществления настоящего изобретения и отличительные особенности вариантов осуществления могут быть скомбинированы друг с другом, если это не вызывает противоречий. Необходимо отметить, что этапы, показанные в блок-схемах на чертежах, могут быть реализованы с использованием компьютерной системы, например в форме набора выполняемых компьютером инструкций. Кроме того, несмотря на логический порядок, использованный в блок-схемах, показанные или описанные этапы в некоторых ситуациях могут быть реализованы в другом порядке.
На Фиг.1 показана блок-схема способа обработки формата TLV данных связи согласно варианту выполнения настоящего изобретения, содержащего этапы, на которых:
на этапе S10 задают тип Т целочисленного типа в формате ASN.1,
на этапе S20 передающая сторона заполняет сообщение в формате ASN.1
сообщением, содержащим пример структуры данных, и
на этапе S30 передающая сторона кодирует сообщение в кодовый поток, причем упомянутый кодовый поток примера структуры данных в сообщении содержит значение V или содержит само поле V, целочисленный тип поля V и длину L поля V.
Предложенный способ обработки данных формата TLV преодолевает проблему уровня техники, из-за которой другие версии протоколов не обеспечивают взаимную связь, и реализует объектно-ориентированный способ взаимной связи между различными версиями ASN.1 и TLV, поскольку в формате ASN.1 использован способ расширения поля Т.
Далее будет подробно описан упомянутый выше процесс обработки.
(I) Этап S10
Операция определения целочисленного типа в формате ASN.1 может, в частности, содержать этапы, на которых: задают формат ASN.1 для обеспечения возможности задания целочисленного типа и задают структуру целочисленного типа в формате "имя [X] строкового типа:: = задание структуры (string type name [X]:: = defining a structure)", причем Х относится к целочисленному типу. А именно к синтаксису ASN.1 добавлен расширенный синтаксис для поддержки самоопределяемого типа Х (т.е. Т в TLV), который задан дополнительным способом между именем типа и символом "::=". Если никакой Х не указан, то Х определяют как 0, и таким образом такие данные в соответствующем кодовом потоке имеют лишь поле V, но не Х и L.
В частности, операция определения структуры целочисленного типа в формате "имя [X] строкового типа:: = задание структуры", в частности, содержит этапы, на которых: задают структуру целочисленного типа, такого как тип SEQUENCE, SET или CHOICE с тем же самым именем типа, и указывают, что, если элемент типа необходимо изменить, разрешены лишь чистое увеличение или чистое уменьшение элементов, и разрешено лишь изменение последнего элемента, но не разрешено изменение типа. Применение вышеуказанных правил обеспечивает возможность достижения совместимости сообщения, переданного согласно новому протоколу, с сообщением, переданным в соответствии со старым протоколом. Для облегчения управления типом протокола сообщения требуется, чтобы новая версия протокола могла быть лишь расширена на основе типа протокола старой версии, и расширенные элементы могут быть расположены лишь в конце родительского типа, но не могут быть уменьшены.
На этапе S10, поскольку формат ASN.1 задан для обеспечения возможности задания целочисленного типа, то компилятор формата ASN.1 может быть снабжен функцией обработки целочисленного типа. Предпочтительно целочисленный тип может быть получен через функцию типа C++ в формате ASN.1.
(II) Этап S20
Операция передающей стороны, кодирующей сообщение в кодовый поток, в частности, содержит этапы, на которых: вызывают функцию кодирования значения, функцию кодирования длины и функцию кодирования целочисленного типа с использованием функции кодирования интеграции или вызывают лишь функцию кодирования значения с использованием функции кодирования интеграции для кодирования сообщения в кодовый поток. Функцию кодирования целочисленного типа используют для получения целочисленного типа кодового потока согласно кодировке данных в примере структуры данных. В частности, функцию кодирования значения используют для кодирования простых данных в примере структуры данных в поле V кодового потока, как и в случае примера структуры данных простого типа данных. Функцию кодирования значения используют для последовательного вызова функции кодирования интеграции индивидуальных элементов в примере структуры данных, как и в случае примера структуры данных типа SEQUENSE или SET. Функцию кодирования значения используют для последовательного вызова функции кодирования интеграции индивидуальных элементов массива в примере структуры данных, как и в случае примера структуры данных типа SEQUENSE OF или SET OF. Функцию кодирования значения используют для кодирования выбранного элемента в примере структуры данных в поле V кодового потока, как и в случае примера структуры данных типа CHOICE, причем поле V содержит порядковый номер выбранного элемента в CHOICE и сам выбранный элемент.
Предпочтительно, если целочисленный тип равен 0 или отсутствует, функция кодирования интеграции вызывает лишь функцию кодирования значения, т.е. кодовый поток содержит лишь поле V или содержит поле V и целочисленный тип, равный нулю. Если целочисленный тип не равен 0, функция кодирования интеграции вызывает функцию кодирования значения, функцию кодирования длины и функцию кодирования целочисленного типа, т.е. кодовый поток содержит это поле V, длину L этого поля V и целочисленный тип.
Обработка данных формата TLV передающей стороной описана выше. Что касается принимающей стороны, предложенный способ обработки данных формата TLV дополнительно содержит этапы, на которых принимающая сторона декодирует кодовый поток.
Предпочтительно операция декодирования кодового потока, в частности, содержит этапы, на которых: вызывают функцию декодирования значения, функцию декодирования длины и функцию декодирования целочисленного типа с использованием функции декодирования интеграции или вызывают лишь функцию декодирования значения с использованием функции декодирования интеграции для декодирования кодового потока, используют функцию декодирования целочисленного типа для декодирования кодового потока согласно целочисленному типу в кодовом потоке, используют функцию декодирования значения для декодирования поля V в кодовом потоке в простые данные в примере структуры данных, как и в случае примера структуры данных простого типа данных, используют функцию декодирования значения для декодирования последовательно поля V в кодовом потоке в данные индивидуальных элементов в примере структуры данных, как и в случае примера структуры данных типа SEQUENSE или SET, используют функцию декодирования значения для декодирования последовательно поля V в кодовом потоке в индивидуальные элементы массива в примере структуры данных, как и в случае примера структуры данных типа SEQUENSE OF или SET OF, при этом оценивают, является ли длина потока декодирования в структуре меньше L, и если эта длина меньше L, то декодирование продолжается, в противном случае декодирование в настоящей структуре останавливают, и используют функцию декодирования значения для декодирования порядкового номера в кодовом потоке и элемента, соответствующего порядковому номеру, как и в случае примера структуры данных типа CHOICE, причем если элемент, соответствующий порядковому номеру, не существует в настоящей структуре, функцию декодирования значения завершают.
Предпочтительно операция вызова функции декодирования значения, функции декодирования длины и функции декодирования целочисленного типа с использованием функции декодирования интеграции или вызова лишь функции декодирования значения с использованием функции декодирования интеграции для декодирования кодового потока, в частности, содержит этапы, на которых: определяют, является ли целочисленный тип равным 0 или отсутствующим, с использованием функции декодирования интеграции, причем если он не равен 0 или не отсутствует, то вызывают функцию декодирования значения, функцию декодирования длины и функцию декодирования целочисленного типа, при этом функцию декодирования значения вызывают для декодирования целочисленного типа в кодовом потоке для проверки, соответствует ли полученный целочисленный тип его собственному целочисленному типу, и если он не соответствует, то он рассматривается как результат ненормального декодирования, после чего вызывают функцию декодирования длины для декодирования поля L в кодовом потоке и затем вызывают функцию декодирования значения для декодирования поля V в кодовом потоке, и если длина vL, полученная в результате декодирования этого поля V, меньше, чем L, то L-vL байтов пропускают; если же целочисленный тип равен 0 или отсутствует, он вызывает лишь функцию декодирования значения.
Функция декодирования интеграции в первую очередь определяет, является ли Т сам по себе равным 0. Если он не равен 0, то Т декодируют, и проверяют, соответствует ли декодированный Т самому Т, причем если он не соответствует, то его рассматривают как результат ненормального декодирования, и тогда декодируют L, и затем декодируют V, при этом если длина vL декодированного V меньше L, то L-vL байтов пропускают для согласования длины настоящего типа; если Т равен 0, то непосредственно декодируют V.
Виртуальные функции, запрашиваемые вышеуказанными кодирующими и декодирующими функциями, добавлены к базовым классам в базовый модуль ASN.1 для C++, и классы и функции его элементов, запрашиваемые вышеуказанными кодирующими и декодирующими функциями, добавлены в компилятор ASN.1 для C++.
Вышеупомянутый предпочтительный вариант осуществления содержит два функциональных модуля: базовый модуль и компилятор. Базовый модуль осуществляет поддержку базовых классов TLV и некоторых поддерживающих функций. Компилятор осуществляет анализ файла ASN.1 и генерацию классов, соответствующих различным типам ASN.1 и функциям-членам классов. В прикладной программе сообщение, заданное в соответствии с таким протоколом TLV, используется не только для осуществления взаимодействия с сообщениями по протоколу той же версии, но также и для осуществления взаимодействия Клиента с Сервером с сообщениями по новому и старому протоколам для обеспечения гарантии правил кодирования при взаимодействии Клиента с Сервером с использованием протоколов различных версий. Варианты выполнения настоящего изобретения могут быть реализованы независимо или в расширенном виде на любой существующей платформе компилятора ASN. I.
На Фиг.2 показана структурная схема развивающей процедуры, в которой Клиент и Сервер совместно используют один и тот же язык, разрабатывающий среду, согласно предпочтительному варианту выполнения настоящего изобретения, причем Клиент и Сервер оба разработаны с использованием C++. Развивающая процедура содержит: этап А, на котором разработчик спецификации интерфейса задает интерфейсный файл ASN.1 и создает интерфейсный файл file.h и интерфейсный file.cpp с использованием компилятора Asn.1 для C++; этап В, на котором разработчик Сервера записывает код Сервера и компилирует его с интерфейсным файлом file.h и интерфейсным файлом file.cpp в исполняемую программу Сервера; этап С, на котором разработчик Клиента записывает код Клиента и компилирует его с интерфейсным файлом file.h и интерфейсным файлом file.cpp в исполняемую программу Клиента; и этап D, на котором исполняют программу Клиента и программу Сервера, которые взаимодействуют и связываются с использованием базового модуля Asn.1 для C++.
На Фиг.3 показана структурная схема развивающей процедуры, разрабатывающей среду на различных языках согласно предпочтительному варианту выполнения настоящего изобретения, причем для разработки Клиента используют Java, а для разработки Сервера используют C++. Развивающая процедура содержит: этап А, на котором разработчик спецификации интерфейса задает интерфейсный файл ASN.1, создает интерфейсный файл file.h и интерфейсный файл file.cpp с использованием компилятора Asn.1 в C++ для разработчика C++ и создает интерфейсный файл file.java с использованием компилятора Java в Asn.1 для разработчика Java; этап В, на котором разработчик Сервера записывает код Сервера и компилирует его с интерфейсным файлом file.h и интерфейсным файлом file.cpp в исполняемую программу Сервера; этап С, на котором разработчик Клиента записывает код Клиента и компилирует его с интерфейсным файлом file.java в исполняемую программу Клиента; и этап D, на котором исполняемая программа Клиента и исполняемая программа сервера исполняются и, взаимодействуя, связываются с использованием базовых модулей Asn.1 соответствующего им языка.
На Фиг.4 изображена развивающая процедура разработки среды, при которой для разработки Клиента и Сервера используют различные языки и различные версии протокола согласно предпочтительному варианту выполнения настоящего изобретения, причем в Сервере используют старую версию. Клиент написан на Java, а Сервер разработан с использованием C++, что является относительно сложной процедурой программирования. На этапах осуществления и Клиент и Сервер оба разработаны с использованием C++. Процедура содержит следующие этапы, на которых:
А. Разработчик спецификации интерфейса задает интерфейсный файл версии 2.asn, разрабатывает новую версию на основе интерфейсного файла версии 1.asn, заданной для старой версии, и компилирует две версии соответственно для создания файлов, реализующих интерфейс C++ и Java,
В. Разработчик Сервера записывает код Сервера в старой версии и компилирует его с версией 1.h интерфейсного файла и версией 1.срр интерфейсного файла в исполняемый файл, реализующий программу Сервера,
С. Разработчик Клиента записывает код Клиента в новой версии и компилирует его с интерфейсным файлом 2.java в исполняемый файл, реализующий программу Клиента, и
D. исполняемая программа Клиента и исполняемая программа Сервера во время исполнения взаимодействуют и связываются с использованием базовых модулей Asn.1 соответствующего им языка.
На Фиг.5 показана иерархическая схема отношений наследования базового класса ESNACC, иллюстрирующая систему наследования типов базового класса C++ESNACC согласно предпочтительному варианту выполнения настоящего изобретения, причем AsnType представляет собой базовый класс верхнего уровня. AsnType является абстрактным базовым классом. На этой основе наследуются некоторые простые типы для поддержки базовых типов данных ASN.1, например AsnInt, AsnReal, AsnRelativeOid, AsnAny, AsnOcts, AsnBool, AsnNull и AsnString, причем AsnInt произведен из PERGgeneral, AsnEnum произведен из Asnint; AsnOid произведен из AsnRelativeOid; AsnList представляет собой промежуточный тип для реализации других типов Asn.1; AsnSetOf и AsnSeqOf произведены из AsnList; std::string и std::list из стандартной библиотеки шаблонов используются для дополнительной поддержки SEQUENCE OF, SET OF и т.д. Некоторые примененные строковые типы, например, VisibleString, GraphicString, Ia5String, PrintableString, NumericString произведены из основного строкового типа AsnString, при этом GeneralizedTime и UTCTime произведены из VisibleString.
На Фиг.6 показана блок-схема функции декодирования целого TLV согласно предпочтительному варианту реализации настоящего изобретения.
В дальнейшем согласно требованию объекта управления сетью правила кодирования и декодирования сообщений TLV реализуются на основе ESNACC, который является открытым источником, компилирующим платформу ASN.1. Настоящее изобретение может быть реализовано с использованием любого языка объектно-ориентированного программирования. В настоящей заявке в основном использован язык C++. Также могут использоваться и другие языки объектно-ориентированного программирования, например, язык JAVA.
(I) Источник требования
Как и в случае объектов управления сетью, один объект управления сетью часто должен управлять различными устройствами сетевых элементов. Различные устройства имеют различные версии, и объект управления сетью непосредственно также может иметь различные версии. Объекты управления сетью и программное обеспечение устройства нуждаются в обмене сообщениями. Для ослабления зависимости от версии объектов управления сетью и программного обеспечения устройств объекты управления сетью должны управлять устройствами элементов сети совместимым с версией способом, таким образом чтобы отвечать требованию необходимо ввести правило протокола.
(II) Компиляция Платформы
ESNACC представляет собой открытый исходный компилятор ASN.1, который поддерживает правила кодирования BER и PER базового модуля ASN.1, обеспеченные компилятором. Компилятор ASN.1 в целом обеспечивает компилятор и базовый модуль поддержки, причем компилятор компилирует файл ASN.1 для создания кода конкретного языка программирования, например, C++ и Java. Типы ASN.1 откомпилированы в классы языка программирования. Базовый поддерживающий модуль оказывает поддержку исполнения созданных кодов. Правила кодирования и декодирования TLV реализованы модификацией компилятора и основного поддерживающего модуля.
(III) Реализация конкретных правил кодирования TLV
В реализующей процедуре кодовый поток должен быть отлаженным, и кодовый поток TLV должен быть читаемым, таким образом, Т использует два байта, L использует четыре байта, и формат должен иметь сетевой порядок. Практически для сохранения Т и L могут использоваться и другие форматы, например, формат представления длины в базовых правилах кодирования (BER).
1. Макрос SYNTAX в ASN.1 расширен для поддержки самоопределяемого поля Т, например:
QxString32[10]:: = GraphicString(32)
NameAndStringValue-E [30]:: = SEQUENCE
{
name QxString32
,value QxString32
}.
Терм Т заключен в квадратные скобки перед "::=" и может быть представлен в различных форматах, например, в десятичном и шестнадцатеричном. Макрос SYNTAX является опционным, и таким образом, невозможна ситуация, когда Т представлен как 0.
2. Сообщения, заданные следующими способами, могут быть связаны с использованием старой и новой версий.
(1) Определяют старую версию
ANode [0xF001]:: = SEQUENCE
{
а1 QxUInt8,
a2 QxUInt32,
}
BNode [0xF003]:: = SEQUENCE
{
b1 QxUInt32,
b2 QxUInt16,
c3 QxUInt32
}
CNode [0xF005]:: = SEQUENCE
{
a ANode,
b BNode
}
(2) Определяют новую версию
ANode [0xF001]:: = SEQUENCE
{
a1 QxUInt8,
a2 QxUInt32,
d3 QxUInt32,
d4 QxUInt32
}
BNode [0xF003]:: = SEQUENCE
{
b1 QxUInt32,
b2 QxUInt16,
}
CNode [0xF005]:: = SEQUENCE
{
ANode,
b BNode
}
В новой и старой версиях элементы d3 и d4 добавлены в конце ANode новой версии, в то время как элемент с3 удален из BNode. Две вышеуказанные ноды и CNode могут достичь совместимости по версиям и могут взаимодействовать с использованием способа согласно настоящему изобретению. Из старой версии код сообщения переносят в сообщение новой версии, для d3 и d4 используют значения по умолчанию, в то время как кодовый поток с3 опускают. Код сообщения из новой версии переносят в сообщение старой версии, кодовые потоки d3 и d4 опускают, в то время как значение с3 задают по умолчанию. Другие данные являются согласованными между новой и старой версиями.
3. Файл синтаксиса ASN.1 в ESNACC изменен для поддержки компилятора, который анализирует и сканирует поле Т. Во время осуществления способа Т вносят в информацию описания МЕТА-класса классов.
4. В основной базовый класс ESNACC добавляют функции кодирования и декодирования, которые в основном являются функцией кодирования интеграции, функцией кодирования значения, функцией декодирования интеграции и функцией декодирования значения. Прототипы функций могут быть следующими:
функция кодирования интеграции: virtual AsnLen TlvEnc (AsnBuf&_b);
функция кодирования поля V: virtual AsnLen TlvEncContent (AsnBuf&_b);
функция декодирования интеграции: virtual AsnLen TlvDec (AsnBuf &_b, AsnLen&bytesDecoded) и
функция декодирования значения: virtual AsnLen TlvDecContent (AsnBuf &_b, short iT, AsnLen iL, AsnLen & bytesDecoded).
Как указано выше, b - параметр кодового потока, byteDecoded - суммарное количество байтов одного декодированного кодового потока сообщения, iT-Т кодового потока, iL-L кодового потока, и возвращаемые значения TlvEnc и TlvEncContent представляют собой длины кодировки кодовых потоков. Возвращаемые значения TlvDec и TlvDecContext по существу представляют собой количество байтов, декодированных в функциях. Прототип функций на основе предложенного способа в случае необходимости может быть изменен.
5. Компилятор в ESNACC модифицирован для осуществления генерации кодов различных функций кодирования и декодирования, которые в основном являются функцией кодирования значения и функцией декодирования значения. Поскольку функции кодирования и декодирования интеграции могут быть универсальными для различных типов, процедуры кодирования и декодирования были описаны со ссылкой на Фиг.5 и в вышеуказанном операционном процессе кодирования и декодирования кодового потока.
6. Согласно подробному описанию вышеуказанного этапа S10 формируют интерфейсный файл file.asn новой/старой версии, создают интерфейсный файл message.h и интерфейсный файл message.срр и для редактирования Клиента и Сервера используют C++. Таким образом, подобным способом, как показано на Фиг.3, могут быть осуществлены взаимодействие и связь между различными версиями Клиента и Сервера.
Следует подразумевать, что специалистами могут быть сделаны различные модификации или замены согласно описанию технического решения и конкретным вариантам реализации настоящего изобретения; например, позиция и формат Т, формат L, использованные форматы сжатия и шифрования, а также функции для реализации настоящее изобретение могут быть различными, и, кроме того, оно может быть реализовано даже с использованием способа кодирования оператора вместо функций - элементов.
Из приведенного выше описания можно видеть, что в настоящем изобретении достигнуты следующие технические эффекты:
1. конвертирование типа в кодовый поток способом кодирования;
2. декодирование кодового потока в пример класса способом декодирования;
3. взаимосвязь между протоколами различных версий;
4. самоопределение типа Т;
5. взаимосвязь между программами, написанными на различных языках; и
6. осуществление высокой абстрактной производительности обработки благодаря использованию механизма виртуальных функций объектно-ориентированного языка.
Настоящий способ обработки данных формата TLV сам по себе является универсальным и не зависит от конкретного компилятора ASN.1 и конкретного объектно-ориентированного языка. Такое кодирование и декодирование TLV может быть осуществлено даже при использовании структурированного языка.
Очевидно, специалист в данной области техники должен понимать, что вышеуказанные соответствующие модули или соответствующие этапы способа согласно настоящему изобретению могут быть осуществлены с использованием универсального вычислительного устройства. Они могут быть встроены в одиночное вычислительное устройство или распределены в сети, состоящей из нескольких вычислительных устройств. Кроме того, они могут быть осуществлены с использованием программного кода, исполняемого вычислительным устройством, и таким образом они могут быть сохранены в запоминающем устройстве для исполнения вычислительным устройством или изготовлены в форме соответствующих модулей интегральных схем, или указанные модули или этапы могут быть изготовлены в форме одиночного модуля интегральной схемы. Таким образом, настоящее изобретение не ограничено какой-либо конкретной комбинацией аппаратных и программных средств.
Приведенное выше описание представляет лишь предпочтительные варианты осуществления настоящего изобретения, которые не являются ограничением настоящего изобретения. Настоящее изобретение допускает различные модификации и изменения. Любые модификации, эквивалентные замены, усовершенствования и т.д., сохраняющие идею и принцип настоящего изобретения, входят в объем защиты настоящего изобретения.