CN101316241B - 用于通信数据的tlv格式处理方法 - Google Patents
用于通信数据的tlv格式处理方法 Download PDFInfo
- Publication number
- CN101316241B CN101316241B CN2008101376473A CN200810137647A CN101316241B CN 101316241 B CN101316241 B CN 101316241B CN 2008101376473 A CN2008101376473 A CN 2008101376473A CN 200810137647 A CN200810137647 A CN 200810137647A CN 101316241 B CN101316241 B CN 101316241B
- Authority
- CN
- China
- Prior art keywords
- type
- code stream
- decoding
- integer type
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Communication Control (AREA)
- Devices For Executing Special Programs (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提供了一种用于通信数据的TLV格式处理方法,包括以下步骤:在ASN.1格式中定义整数类型的T;发送方填写ASN.1格式的报文,其包括数据结构实例;发送方将报文编码为码流,报文中的数据结构实例的码流包括V,或者包括V的整数类型,V的L和V。本发明实现了ASN.1不同版本的互通。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种用于通信数据的TLV格式处理方法。
背景技术
ASN.1(Abstract Syntax Notation 1,抽象语法标记1)是ITU(International Telecommunications Union,国际电信联盟)定义的描述在网络上传输信息格式的标准方法,为节点间的数据转换提供标准格式。每个节点只关心从ASN.1翻译过来或翻译成ASN.1的数据格式,而不必知道数据存在于网络任何其他处的格式。
ASN.1有两部分:第一部分(ISO 8824/ITU X.208)描述信息内的数据、数据类型及序列格式,也就是数据的语法;第二部分(ISO8825/ITU X.209)描述如何将各部分数据组成消息,也就是数据的基本编码规则。ASN.1原来是作为X.409的一部分而开发的,后来才独立地成为一个标准。第一代PKI(Public Key Infrastructure,公开密钥体系)标准主要是基于ASN.1的,在SNMP(Simple NetworkManagement Protocol,简单网络管理协议)中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::=定义信息”,如UserNameList-T::=SEQUENCE OF UserName-T表示定义类型UserNameList-T是以UserName-T为元素的数组。
在软件的C/S(Client客户机/Server服务器)架构中,需要Client和Server通信,通信报文一般有两种格式:私有格式;标准格式,如ASN.1,SNMP等协议。
关于ASN.1报文在C/S类型软件中一般常用的方法:
1、建立客户端与服务器端的连接;
2、客户端与服务器端进行协议交互:
1)报文发送方填写ASN.1报文头和报文体,报文头包括命令码,报文体采用AsnAny类型,其真实数据类型因命令码不同而不同;
2)报文发送方编码报文为码流,发送给报文接收方;
3)报文接收方接收到报文码流,解码报文头,然后根据其中的命令码,用特定数据类型解码报文体;
4)报文接收方根据报文的内容,作相应地响应;
3、交互结束,关闭连接。
在通信中,按照“数据类型、数据长度、数据体”的格式组织数据的,用英文表示就是“Type类型,Length长度,Value值”,简称TLV格式。利用TLV格式组织数据非常方便和高效,尤其适用于可变长的数据。对于应用层数据体中内容的组织一般都是采用这种格式,在ASN.1的BER编码实际上就是一种TLV编码。
在实现本发明过程中,发明人发现现有的TLV编码中的数据类型T是用户不能定制的,同一名称类型如果在不同版本中定义不完全一样,Client和Server是不能通信的,也就是Client和Server端的报文协议版本要一致,如果不一致,二者之间就无法交互。
发明内容
本发明旨在提供一种用于通信数据的TLV格式处理方法,以解决上述的不同版本不能互通的缺陷。
在本发明的实施例中,提供了一种用于通信数据的类型-长度-值TLV格式处理方法,包括以下步骤:在抽象语法标记一(ASN.1) 格式中定义整数类型的类型T;发送方填写ASN.1格式的报文,其包括数据结构实例;发送方将报文编码为码流,报文中的数据结构实例的码流包括值V,或者包括V的整数类型,V的长度L和V,其中,当所述整数类型为0或不存在,所述码流仅包括V,或者包括V和整数类型等于0,当所述整数类型不为0,所述码流包括所述整数类型、V的长度L和V。
优选的,在ASN.1格式中定义整数类型具体包括:设置ASN.1格式允许定义整数类型;以“字符串类型名[X]::=定义结构”的格式定义整数类型的结构,其中X指整数类型。
优选的,以“字符串类型名[X]::=定义结构”的格式定义整数类型的结构具体包括:设置整数类型的结构为同类型名的SEQUENCE、SET或CHOICE类型,规定要修改其成员,则仅允许净增加或净减少成员,并且只能变动末尾的成员,不可以修改类型。
优选的,该TLV格式处理方法还包括:对ASN.1格式的编译器设置处理整数类型的功能。
优选的,该TLV格式处理方法还包括:在ASN.1格式的C++类型中通过函数获取整数类型。
优选的,发送方将报文编码为码流包括:通过整体编码函数调用值编码函数,长度编码函数,以及整数类型编码函数,或者通过整体编码函数仅调用值编码函数以将报文编码为码流;整数类型编码函数用于根据数据结构实例中的数据编码得到码流中的整数类型;对于简单数据类型的数据结构实例,值编码函数用于将数据结构实例中的简单数据编成码流中的V;对于SEQUENSE或SET类型的数据结构实例,值编码函数用于依次调用数据结构实例中的各成员的整体编码函数;对于SEQUENSE OF或SET OF类型的数据结构实例,值编码函数用于依次调用数据结构实例中的数组各元素的整体编码函数;对于CHOICE类型的数据结构实例,值编码函数 用于将数据结构实例中选定的成员编成码流中的V,其中,V包括选定成员在CHOICE中的序号和选定成员。
优选的,当整数类型为0或不存在,则整体编码函数仅调用值编码函数;当整数类型不为0,则码流包括V,V的长度L和整数类型。
优选的,该TLV格式处理方法还包括:接收方将码流解码。
优选的,将码流解码具体包括:通过整体解码函数调用值解码函数,长度解码函数,以及整数类型解码函数,或者通过整体解码函数仅调用值解码函数以将码流解码;整数类型解码函数用于根据码流中的整数类型解码码流;对于简单数据类型的数据结构实例,值解码函数用于将码流中的V解成数据结构实例中的简单数据;对于SEQUENSE或SET类型的数据结构实例,值解码函数用于将码流中的V依次解成数据结构实例中的各成员数据;对于SEQUENSEOF或SET OF类型的数据结构实例,值解码函数用于将码流中的V依次解成数据结构实例中的数组各元素;解码V的过程中判断本结构内解码流长度是否小于L,如果小于L则继续解码,否则停止本结构内解码;对于CHOICE类型的数据结构实例,值解码函数用于解码码流中的序号和序号对应的成员,如果序号对应的成员在本结构中不存在则结束值解码函数。
优选的,通过整体解码函数调用值解码函数,长度解码函数,以及整数类型解码函数,或者通过整体解码函数仅调用值解码函数以将码流解码具体包括:通过整体解码函数判断整数类型是否为0或者是否存在;如果不为0或者存在,则调用值解码函数,长度解码函数,以及整数类型解码函数,其中,调用值解码函数解码码流中的整数类型,验证得到的整数类型和自身的整数类型是否一致,不一致则认为解码异常,然后再调用长度解码函数解码码流中的L,再调用值编码函数解码码流中的V,如果解码V得到的长度vL小于L,则跳过L-vL字节;如果为0或者不存在,则仅调用值解码函数。
本发明上述实施例的TLV格式处理方法因为在ASN.1格式中增加了扩展T的方法,所以克服协议不同版本不能互通的缺陷,实现了ASN.1不同版本的互通,并且实现了TLV的面向对象的方法。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1示出了根据本发明实施例的用于通信数据的TLV格式处理方法的流程图;
图2示出了根据本发明优选实施例的在客户机与服务器共享相同的开发语言环境时的开发过程;
图3示出了根据本发明优选实施例的使用不同的开发语言环境时的开发过程;
图4示出了根据本发明优选实施例的客户机与服务器使用的开发语言环境和协议版本都不同的开发过程;
图5示出了根据本发明优选实施例的ESNACC C++基本类类型继承体系;
图6示出了根据本发明优选实施例的TLV整体解码功能流程图。
具体实施方式
下面将参考附图并结合实施例,来详细说明本发明。
图1示出了根据本发明实施例的用于通信数据的TLV格式处理方法的流程图,包括以下步骤:
步骤S10,在ASN.1格式中定义整数类型的T;
步骤S20,发送方填写ASN.1格式的报文,其包括数据结构实例;
步骤S30,发送方将报文编码为码流,报文中的数据结构实例的码流包括V,或者包括V的整数类型,V的L和V。
该TLV格式处理方法因为在ASN.1格式中增加了扩展T的方法,所以克服了协议不同版本不能互通的缺陷,实现了ASN.1不同版本的互通,并且实现了TLV的面向对象的方法。
优选的,在ASN.1格式中定义整数类型具体包括:设置ASN.1格式允许定义整数类型;以“字符串类型名[X]::=定义结构”的格式定义整数类型的结构,其中X指整数类型。即,在ASN.1的语法中加入扩展语法支持自定义类型X(即TLV中的T),以可选方式定义在类型名称和符号“::=”。如果无X则按0处理,这种数据在对应码流中只有V而没有X、L。
优选的,以“字符串类型名[X]::=定义结构”的格式定义整数类型的结构具体包括:设置整数类型的结构为同类型名的SEQUENCE、SET或CHOICE类型,规定要修改其成员,则仅允许净增加或净减少成员,并且只能变动末尾的成员,不可以修改类型。 按照这样的原则就可以实现协议报文的新旧兼容。为了协议报文类型的管理方便,可以要求新版本协议是在旧版本协议类型上只能扩展,扩展成员只能在父类型的末尾,而不能减少。
优选的,该TLV格式处理方法还包括:对ASN.1格式的编译器设置处理整数类型的功能。
优选的,该TLV格式处理方法还包括:在ASN.1格式的C++类型中通过函数获取整数类型。
优选的,发送方将报文编码为码流包括:
通过整体编码函数调用值编码函数,长度编码函数,以及整数类型编码函数,或者通过整体编码函数仅调用值编码函数以将报文编码为码流;整数类型编码函数用于根据数据结构实例中的数据编码得到码流中的整数类型;
对于简单数据类型的数据结构实例,值编码函数用于将数据结构实例中的简单数据编成码流中的V;
对于SEQUENSE或SET类型的数据结构实例,值编码函数用于依次调用数据结构实例中的各成员的整体编码函数;
对于SEQUENSE OF或SET OF类型的数据结构实例,值编码函数用于依次调用数据结构实例中的数组各元素的整体编码函数;
对于CHOICE类型的数据结构实例,值编码函数用于将数据结构实例中选定的成员编成码流中的V,其中,V包括选定成员在CHOICE中的序号和选定成员。
优选的,当整数类型为0或不存在,则整体编码函数仅调用值编码函数,即,码流只包括V或者包括V和整数类型=0。当整数类型不为0,则通过整体编码函数调用值编码函数,长度编码函数,以及整数类型编码函数,即码流包括V,V的长度L和整数类型。
优选的,该TLV格式处理方法还包括:接收方将码流解码。
优选的,将码流解码具体包括:
通过整体解码函数调用值解码函数,长度解码函数,以及整数类型解码函数,或者通过整体解码函数仅调用值解码函数以将码流解码;整数类型解码函数用于根据码流中的整数类型解码码流;
对于简单数据类型的数据结构实例,值解码函数用于将码流中的V解成数据结构实例中的简单数据;
对于SEQUENSE或SET类型的数据结构实例,值解码函数用于将码流中的V依次解成数据结构实例中的各成员数据;
对于SEQUENSE OF或SET OF类型的数据结构实例,值解码函数用于将码流中的V依次解成数据结构实例中的数组各元素;解码V的过程中判断本结构内解码流长度是否小于L,如果小于L则继续解码,否则停止本结构内解码;
对于CHOICE类型的数据结构实例,值解码函数用于解码码流中的序号和序号对应的成员,如果序号对应的成员在本结构中不存在则结束值解码函数。
优选的,通过整体解码函数调用值解码函数,长度解码函数,以及整数类型解码函数,或者通过整体解码函数仅调用值解码函数以将码流解码具体包括:通过整体解码函数判断整数类型是否为0 或者是否存在;如果不为0或者存在,则调用值解码函数,长度解码函数,以及整数类型解码函数,其中,调用值解码函数解码码流中的整数类型,验证得到的整数类型是否和自身的整数类型是否一致,不一致则认为解码异常,然后再调用长度解码函数解码码流中的L,再调用值编码函数解码码流中的V,如果解码V得到的长度vL小于L,则跳过L-vL字节;如果为0或者不存在,则仅调用值解码函数。
整体解码函数首先判断自身T是否为0。如果不为0,解码T,验证T是否和自身T一致,不一致则认为解码异常,再解码L,再解码V,如果解码V的长度vL小于L,则跳过L-vL字节,平衡本类型内的长度;如果为0,直接按V解码。
可以在ASN.1C++基础模块中ASN.1基类中添加上述编码函数和解码函数所要求的虚函数;以及在ASN.1C++编译器中上述编码函数和解码函数所要求的类及其成员函数功能。
上述优选实施例包括两个功能模块:基础模块、编译器。基础模块实现支持TLV的基类和一些支持功能,编译器实现分析ASN.1文件,生成各Asn.1类型对应的类及其成员函数。在应用程序中,用这种TLV协议定义的报文,不但可以同版本协议报文的交互,还可以让新老协议报文的client端和Server端交互,为不同版本协议的C/S交互提供的编码规则保障。本发明可以独立实现,也可以在已有的任何ASN.1编译器平台上扩展实现。
图2示出了根据本发明优选实施例的在客户机与服务器共享相同的开发语言环境时的开发过程,Client和Server都采用C++开发。包括:A.接口制定者定义ASN.1接口文件,并用Asn.1C++编译器生成接口文件.h和接口文件.cpp;B.Server开发者编写Server代码、和接口文件.h、接口文件.cpp一起编译成可执行的server程序;C. Client开发者编写Client代码,和接口文件.h、接口文件.cpp一起编译成可执行的client程序;D.可执行的Client程序和可执行的Server程序在执行时利用Asn.1C++基础模块交互通信。
图3示出了根据本发明优选实施例的使用不同的开发语言环境时的开发过程,Client采用java开发,Server采用C++开发。包括:A.接口制定者定义ASN.1接口文件,为C++开发人员用Asn.1C++编译器生成接口文件.h、接口文件.cpp,为java开发人员用Asn.1java编译器生成接口文件.java;B.Server开发者编写Server代码、和接口文件.h、接口文件.cpp一起编译成可执行的server程序;C.Client开发者编写Client代码,和接口文件.java一起编译成可执行的client程序;D.可执行的Client程序和可执行的Server程序在执行时利用各自语言的Asn.1基础模块交互通信。
图4示出了根据本发明优选实施例的客户机与服务器使用的开发语言环境和协议版本都不同的开发过程,Server是老版本,Client采用java开发,Server采用C++开发,这是一种较复杂的开发过程,在实现步骤中Client和Server都采用C++开发。包括:
A.接口制定者根据在老版本时定义了接口文件版本1.asn,在开发新版本时定义了接口文件版本2.asn。对两个版本分别编译生成C++和Java的接口实现文件;
B.Server开发者在老版本中编写Server代码、和接口文件版本1.h、接口文件版本1.cpp一起编译成可执行的server执行文件;
C.Client开发者在新版本编写Client代码,和接口文件2.java一起编译成可执行的client执行文件;
D.可执行的Client程序和可执行的Server程序在执行时利用各自语言的Asn.1基础模块交互通信。
图5示出了根据本发明优选实施例的ESNACC C++基本类类型继承体系。AsnType的顶层基类。ESNACC基本类继承关系层次图,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整体解码功能流程图。
下面结合一个网管的需求,基于ASN.1开源的ESNACC编译平台,实现TLV报文编解码规则,本发明可以适用于任何面向对象程序语言实现,本文主要结合C++讨论,也可以使用其它面向对象的程序语言,如JAVA语言实现。
(一)需求来源
在网管中,一个网管经常要管理各种设备网元,不同的设备存在不同的版本,而网管自身也存在不同的版本,网管和设备软件间需要报文交互,为了使网管和设备软件间的版本依赖较小,需要网管能版本兼容的管理网元。这就要求一种协议规则来支持此需求。
(二)编译平台
ESNACC是开放源码的ASN.1编译器,支持BER,PER编码,编译器提供的ASN.1基础模块:ASN.1编译器通常提供编译器和基础支持模块,编译器将ASN.1文件编译生成特定程序语言代码,如C++、Java。将ASN.1的类型编译成程序语言的类。基础支持模块为生成的代码执行提供支持。通过修改编译器和基础支持模块来实现TLV编解码规则。
(三)特定TLV编码规则的实现
在实现中,由于要求码流具有一定的可调试性,TLV码流需要一定的可读性,因此T采用2个字节,L采用4个字节,格式都采用网络序。在别实现中也可以采用其它格式来存储T和L,比如BER中关于长度的表示格式。
在ASN.1中扩充语法,支持自定义T。如
QxString32[10]::=GraphicString(32)
NameAndStringValue-E[30]::=SEQUENCE
{
name Qx String32
,value QxString32
}
在“::=”前的方括号中填写T,T可以采用各种格式表示,如十进制,十六进制。该语法是可选项,不存在表示T为0。
2.如下方式定义的报文可以在旧版本和新版本互通。
(1)旧版本定义:
ANode[0xF001]::=SEQUENCE
{
a1 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
{
a ANode,
b BNode
}
新旧版本中,ANode在新版本末尾增加了成员d3、d4,而BNode减少了成员c3.它们和CNode都能按本文方法版本兼容交互。旧版报文码流到新版报文中d3,d4采用缺省值,而c3的码流被忽略掉。新版报文码流到旧版报文中d3,d4的码流被忽略掉,而c3的值采用了缺省值。其它数据在新旧版本中是一致的。
3.修改ESNACC的ASN.1语法文件,支持编译器对T的扫描分析。在实现中并且把T放入了类的META类描述信息中。
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,shortiT,AsnLen iL,AsnLen&bytesDecoded);
其中_b为码流参数,byteDecoded一个报文码流解码的累积字节数,iT为码流中的T,iL为码流中的L,TlvEnc、TlvEncContent的返回值为编码码流的长度。TlvDec、TlvDecContext返回值为函数内解码的字节数。根据实现方式函数原形可以根据需要变化。
5.在ESNACC中修改编译器实现生成各类型的编码和解码函数代码,主要是值编码和值解码函数,因为整体编解码函数可以通用于各种类型,编解码过程已经在图5中描述。
6.根据制定新老版本接口文件.asn,生成接口报文.h、接口报文.cpp,client和server都采用C++编写,这样类似图3方式,就可以实现client和Server的不同版本交互通信了。
应当理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案的说明和具体实施方式做出各种可能的改变或替换,如T的位置和格式,L的格式,以及可能采用压缩和加密格式,实现的函数方式都可能不同,甚至不采用成员函数而采用编码算子方式实现。
从以上的描述中,可以看出,本发明实现了如下技术效果:
1.可以通过编码方法把类型转换成码流。
2.可以通过解码方法把码流解码为类实例。
3.不同版本的协议可以互通。
4.可以自定义类型T。
5.可以在不同语言的程序间互通。
6.由于采用面向对象语言虚函数机制,有很高的抽象处理能力。
本TLV格式处理方法本身是通用的,不依赖于特定的ASN.1编译器和特定的面向对象语言,甚至在结构化语言中也能实现这种TLV编解码。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们 可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种用于通信数据的类型-长度-值TLV格式处理方法,其特征在于,包括以下步骤:
在抽象语法标记一ASN.1格式中定义整数类型的类型T;
发送方填写所述ASN.1格式的报文,其包括数据结构实例;
所述发送方将所述报文编码为码流,所述报文中的所述数据结构实例的码流包括值V,或者包括V的所述整数类型,V的长度L和V,其中,当所述整数类型为0或不存在,所述码流仅包括V,或者包括V和整数类型等于0,当所述整数类型不为0,所述码流包括所述整数类型,V的长度L和V;
其中,在ASN.1格式中定义整数类型包括:
设置ASN.1格式允许定义所述整数类型;
以“字符串类型名[X]::=定义结构”的格式定义所述整数类型的结构,其中X指所述整数类型;以“字符串类型名[X]::=定义结构”的格式定义所述整数类型的结构包括:
设置所述整数类型的结构为同类型名的SEQUENCE、SET或CHOICE类型,规定要修改其成员,则仅允许净增加或净减少成员,并且只能变动末尾的成员,不可以修改类型。
2.根据权利要求1所述的TLV格式处理方法,其特征在于,还包括:
对所述ASN.1格式的编译器设置处理所述整数类型的功能。
3.根据权利要求2所述的TLV格式处理方法,其特征在于,还包括:
在所述ASN.1格式的C++类型中通过函数获取所述整数类型。
4.根据权利要求1所述的TLV格式处理方法,其特征在于,所述发送方将所述报文编码为码流包括:
通过整体编码函数调用值编码函数,长度编码函数,以及整数类型编码函数,或者通过所述整体编码函数仅调用值编码函数以将所述报文编码为码流;
所述整数类型编码函数用于根据所述数据结构实例中的数据编码得到所述码流中的所述整数类型;
对于简单数据类型的所述数据结构实例,所述值编码函数用于将所述数据结构实例中的简单数据编成所述码流中的V;
对于SEQUENSE或SET类型的所述数据结构实例,所述值编码函数用于依次调用所述数据结构实例中的各成员的整体编码函数;
对于SEQUENSE OF或SET OF类型的所述数据结构实例,所述值编码函数用于依次调用所述数据结构实例中的数组各元素的整体编码函数;
对于CHOICE类型的所述数据结构实例,所述值编码函数用于将所述数据结构实例中选定的成员编成所述码流中的V,其中,V包括选定成员在CHOICE中的序号和所述选定成员。
5.根据权利要求4所述的TLV格式处理方法,其特征在于,当所述整数类型为0或不存在,则整体编码函数仅调用值编码函数;当所述整数类型不为0,则所述码流包括V,V的长度L和整数类型。
6.根据权利要求1所述的TLV格式处理方法,其特征在于,还包括:接收方将所述码流解码。
7.根据权利要求6所述的TLV格式处理方法,其特征在于,将所述码流解码具体包括:
通过整体解码函数调用值解码函数,长度解码函数,以及整数类型解码函数,或者通过所述整体解码函数仅调用值解码函数以将所述码流解码;
所述整数类型解码函数用于根据码流中的所述整数类型解码所述码流;
对于简单数据类型的所述数据结构实例,所述值解码函数用于将所述码流中的V解成所述数据结构实例中的简单数据;
对于SEQUENSE或SET类型的所述数据结构实例,所述值解码函数用于将所述码流中的V依次解成所述数据结构实例中的各成员数据;
对于SEQUENSE OF或SET OF类型的所述数据结构实例,所述值解码函数用于将所述码流中的V依次解成所述数据结构实例中的数组各元素;解码V的过程中判断本结构内解码流长度是否小于L,如果小于L则继续解码,否则停止本结构内解码;
对于CHOICE类型的所述数据结构实例,所述值解码函数用于解码所述码流中的序号和所述序号对应的成员,如果所述序号对应的成员在本结构中不存在则结束值解码函数。
8.根据权利要求7所述的TLV格式处理方法,其特征在于,通过整体解码函数调用值解码函数,长度解码函数,以及整数类型解码函数,或者通过所述整体解码函数仅调用值解码函数以将所述码流解码具体包括:
通过所述整体解码函数判断所述整数类型是否为0或者是否存在;
如果不为0或者存在,则调用所述值解码函数,长度解码函数,以及整数类型解码函数,其中,调用所述值解码函数解码所述码流中的所述整数类型,验证得到的整数类型和自身的整数类型是否一致,不一致则认为解码异常,然后再调用所述长度解码函数解码所述码流中的L,再调用所述值编码函数解码所述码流中的V,如果解码V得到的长度vL小于L,则跳过L-vL字节;
如果为0或者不存在,则仅调用所述值解码函数。
Priority Applications (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101376473A CN101316241B (zh) | 2008-07-02 | 2008-07-02 | 用于通信数据的tlv格式处理方法 |
PCT/CN2009/070391 WO2010000139A1 (zh) | 2008-07-02 | 2009-02-10 | 用于通信数据的tlv格式处理方法 |
ES09771909.0T ES2659396T3 (es) | 2008-07-02 | 2009-02-10 | Método para procesar formato TLV de datos de comunicación |
EP09771909.0A EP2302864B1 (en) | 2008-07-02 | 2009-02-10 | Method for processing tlv format of communication data |
US13/001,978 US20110134939A1 (en) | 2008-07-02 | 2009-02-10 | Method for processing tlv format of communication data |
BRPI0915217-2A BRPI0915217B1 (pt) | 2008-07-02 | 2009-02-10 | Método para processar um formato tlv de dados de comunicação |
RU2011103630/08A RU2473180C2 (ru) | 2008-07-02 | 2009-02-10 | Способ обработки данных связи tlv-формата |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101376473A CN101316241B (zh) | 2008-07-02 | 2008-07-02 | 用于通信数据的tlv格式处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101316241A CN101316241A (zh) | 2008-12-03 |
CN101316241B true CN101316241B (zh) | 2013-05-01 |
Family
ID=40107085
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101376473A Active CN101316241B (zh) | 2008-07-02 | 2008-07-02 | 用于通信数据的tlv格式处理方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20110134939A1 (zh) |
EP (1) | EP2302864B1 (zh) |
CN (1) | CN101316241B (zh) |
BR (1) | BRPI0915217B1 (zh) |
ES (1) | ES2659396T3 (zh) |
RU (1) | RU2473180C2 (zh) |
WO (1) | WO2010000139A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101316241B (zh) * | 2008-07-02 | 2013-05-01 | 中兴通讯股份有限公司 | 用于通信数据的tlv格式处理方法 |
CN103246671A (zh) * | 2012-02-09 | 2013-08-14 | 中兴通讯股份有限公司 | 抽象语法标记文件的处理方法及装置 |
CN103036877A (zh) * | 2012-12-10 | 2013-04-10 | 北京中创信测科技股份有限公司 | 一种基于tlv格式协议的编解码代码生成装置及方法 |
US10109983B2 (en) | 2016-04-28 | 2018-10-23 | Hewlett Packard Enterprise Development Lp | Devices with quantum dots |
US10566765B2 (en) | 2016-10-27 | 2020-02-18 | Hewlett Packard Enterprise Development Lp | Multi-wavelength semiconductor lasers |
US10680407B2 (en) | 2017-04-10 | 2020-06-09 | Hewlett Packard Enterprise Development Lp | Multi-wavelength semiconductor comb lasers |
US10396521B2 (en) | 2017-09-29 | 2019-08-27 | Hewlett Packard Enterprise Development Lp | Laser |
WO2019190345A1 (ru) * | 2018-03-30 | 2019-10-03 | Публичное Акционерное Общество "Сбербанк России" | Система управления сетью pos-терминалов |
CN109298866A (zh) * | 2018-09-26 | 2019-02-01 | 杭州米加科技股份有限公司 | 基于c语言的tlv格式协议快速解析方法 |
US11271792B2 (en) * | 2019-01-18 | 2022-03-08 | Hewlett Packard Enterprise Development Lp | Using a recursive parser tree to implement a smaller code segment for an embedded simple network management protocol agent |
CN113742294A (zh) * | 2021-08-23 | 2021-12-03 | 宜通世纪科技股份有限公司 | 一种asn.1-per信令消息解码方法、***、装置及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000339175A (ja) * | 1999-05-28 | 2000-12-08 | Nec Corp | 抽象構文記法を用いたデータ構造定義における型情報の動的割り当て方法 |
US6356955B1 (en) * | 1996-02-15 | 2002-03-12 | International Business Machines Corporation | Method of mapping GDMO templates and ASN.1 defined types into C++ classes using an object-oriented programming interface |
CN101159743A (zh) * | 2007-10-22 | 2008-04-09 | 中兴通讯股份有限公司 | Asn.1编解码函数自动生成中的数据类型选择方法 |
CN101197818A (zh) * | 2006-12-08 | 2008-06-11 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5473691A (en) * | 1993-11-05 | 1995-12-05 | Microsoft Corporation | System and method for computer data transmission |
US5649189A (en) * | 1995-11-29 | 1997-07-15 | 3Com Corporation | Method and apparatus for single pass data encoding of binary words using a stack for writing in reverse order |
FI20002720A (fi) * | 2000-12-12 | 2002-06-13 | Nokia Corp | Menetelmä konversioiden suorittamiseksi |
US6883164B2 (en) * | 2000-12-15 | 2005-04-19 | International Business Machines Corporation | Strategy for dynamically modeling ASN.1 data to an object model |
EP1400784A1 (de) * | 2002-09-14 | 2004-03-24 | Leica Geosystems AG | Verfahren und Vorrichtungen zur Nutzung von Daten in nicht direkt verarbeitbaren Datenformaten |
CN100505743C (zh) * | 2003-12-12 | 2009-06-24 | 华为技术有限公司 | 通用消息解释器的实现方法 |
US20050181787A1 (en) * | 2004-02-18 | 2005-08-18 | Judd Tom D. | Systems and methods for encoding and decoding data messages |
US6999010B2 (en) * | 2004-04-16 | 2006-02-14 | Ares International Corporaton | Table look-up method for abstract syntax notation encoding/decoding system |
CN100530193C (zh) * | 2007-10-25 | 2009-08-19 | 中兴通讯股份有限公司 | 复杂抽象语法标识对象的存储方法 |
US7996523B2 (en) * | 2008-01-17 | 2011-08-09 | Fluke Corporation | Free string match encoding and preview |
CN101316241B (zh) * | 2008-07-02 | 2013-05-01 | 中兴通讯股份有限公司 | 用于通信数据的tlv格式处理方法 |
-
2008
- 2008-07-02 CN CN2008101376473A patent/CN101316241B/zh active Active
-
2009
- 2009-02-10 WO PCT/CN2009/070391 patent/WO2010000139A1/zh active Application Filing
- 2009-02-10 RU RU2011103630/08A patent/RU2473180C2/ru active
- 2009-02-10 US US13/001,978 patent/US20110134939A1/en not_active Abandoned
- 2009-02-10 EP EP09771909.0A patent/EP2302864B1/en active Active
- 2009-02-10 ES ES09771909.0T patent/ES2659396T3/es active Active
- 2009-02-10 BR BRPI0915217-2A patent/BRPI0915217B1/pt active IP Right Grant
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6356955B1 (en) * | 1996-02-15 | 2002-03-12 | International Business Machines Corporation | Method of mapping GDMO templates and ASN.1 defined types into C++ classes using an object-oriented programming interface |
JP2000339175A (ja) * | 1999-05-28 | 2000-12-08 | Nec Corp | 抽象構文記法を用いたデータ構造定義における型情報の動的割り当て方法 |
CN101197818A (zh) * | 2006-12-08 | 2008-06-11 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理方法 |
CN101159743A (zh) * | 2007-10-22 | 2008-04-09 | 中兴通讯股份有限公司 | Asn.1编解码函数自动生成中的数据类型选择方法 |
Also Published As
Publication number | Publication date |
---|---|
EP2302864B1 (en) | 2017-11-15 |
ES2659396T3 (es) | 2018-03-15 |
RU2473180C2 (ru) | 2013-01-20 |
US20110134939A1 (en) | 2011-06-09 |
BRPI0915217A2 (pt) | 2016-09-13 |
BRPI0915217B1 (pt) | 2020-10-06 |
EP2302864A1 (en) | 2011-03-30 |
RU2011103630A (ru) | 2012-08-10 |
WO2010000139A1 (zh) | 2010-01-07 |
CN101316241A (zh) | 2008-12-03 |
EP2302864A4 (en) | 2013-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101316241B (zh) | 用于通信数据的tlv格式处理方法 | |
CN100389572C (zh) | 一种远程调用通信组件的***及方法 | |
ES2559680T3 (es) | Dispositivo de gestión orientado a objetos para mensaje ASN.1 | |
WO2017054531A1 (zh) | 一种基于yang模型的编译方法、及对应的接口、组件和*** | |
CA2514832C (en) | System and method for compression of wireless applications expressed in a structured definition language | |
CN101222365B (zh) | 一种类c结构接口报文处理方法 | |
CN101197818A (zh) | 一种asn.1报文面向对象的处理方法 | |
CN110060158B (zh) | 基于变长编码的智能合约执行方法和装置 | |
CN100505743C (zh) | 通用消息解释器的实现方法 | |
CN101631261A (zh) | 信令跟踪方法、信令跟踪后台装置及跟踪*** | |
US6976263B2 (en) | Mechanism for encoding and decoding upgradeable RPC/XDR structures | |
Werner et al. | Compressing soap messages by using pushdown automata | |
CN101572624B (zh) | 一种跨平台跨方法的snmp扩展mib实现方法 | |
WO2012083616A1 (zh) | 报文编、解码方法及装置 | |
Deri | Network Management for the 90s | |
Riedel et al. | A model driven internet of things | |
US9065789B2 (en) | Remote communication method | |
CN108259500A (zh) | 一种rpc通讯方法、***及装置 | |
EP1872521A1 (en) | System and method for generating a wireless application from a web service definition | |
Dietz et al. | Formal techniques for automatically generating marshalling code from high-level specifications | |
Qiang et al. | ASN. 1 application in parsing ISUP PDUs | |
CN107276968A (zh) | 一种网络传输方法及*** | |
CN100589358C (zh) | 处理消息的方法和***以及消息发送端和消息接收端 | |
Moore | Get stuffed: Tightly packed abstract protocols in Scheme | |
KR100660057B1 (ko) | 패스트 인포셋을 이용한 이진 엑스엠엘 저장 방법 및 복원방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |