CN103036877A - 一种基于tlv格式协议的编解码代码生成装置及方法 - Google Patents
一种基于tlv格式协议的编解码代码生成装置及方法 Download PDFInfo
- Publication number
- CN103036877A CN103036877A CN2012105247529A CN201210524752A CN103036877A CN 103036877 A CN103036877 A CN 103036877A CN 2012105247529 A CN2012105247529 A CN 2012105247529A CN 201210524752 A CN201210524752 A CN 201210524752A CN 103036877 A CN103036877 A CN 103036877A
- Authority
- CN
- China
- Prior art keywords
- node
- configuration file
- code
- class
- type
- 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.)
- Pending
Links
Images
Landscapes
- Communication Control (AREA)
Abstract
本发明公开了一种基于TLV格式协议的编解码代码生成装置及方法,包括以下模块:TLV格式协议的配置文件生成模块,将LTE的TLV格式协议所有消息用一种树形结构进行表示;配置文件解析和编解码代码生成模块,用于对输入的TLV格式协议配置文件进行解析,并根据代码生成规则产生相应的TLV格式协议的编解码代码;编解码代码文件生成模块,TLV格式协议的编解码代码采用类结构进行实现,即协议配置文件生成模块中的配置文件中的树形结构的节点都由相应的类类型进行表示。
Description
技术领域
本发明属于通信网络协议仿真测试分析技术应用领域,尤其是涉及一种基于TLV格式协议的编解码代码生成装置及方法。
背景技术
作为3G(Third Generation)的演进技术,LTE(长期演进)不仅可以提供更高的数据速率和容量、更大的覆盖范围,还可以降低业务的延迟以及系统的运营成本,有利于运营商推出更多实时性、高速率业务,从而吸引更多的高端用户。而相对于UMTS系统,LTE系统的网络结构和协议也发生了很大的变化,其LTE网络结构如图1所示。
如图1所示,LTE系统的无线接入部分由eNodeB(增强节点B)一种节点组成,核心网部分主要由MME(移动管理实体)、S-GW(服务网关ServingGateway)实体、PDNGateway(分组数据网络网关)实体及PCRF(策略与计费规则功能)实体等组成,HSS为所有移动网络的共享实体。相关的接口和协议如以下所述:
S1-MME接口,eNodeB实体和MME实体之间的接口,该接口上传输的是S1AP(S1接口应用部分协议),并在S1AP消息中会嵌套传输NAS(非接入层协议)消息,其中NAS协议就是属于TLV(类型/长度/值)格式的,是标准的层3消息。
S10接口,为MME实体之间的接口,在该接口上传输的是GTPv2-C(GTP控制协议版本2)消息。
S6a接口,为MME实体与HSS实体之间的接口,该接口上传输的是Diameter(一种AAA协议)消息。
在LTE网络中,一个标准的层3协议消息包含一个必选的部分和一个非必选的部分,非必选的部分在必选部分的后面,而消息中必选部分由一个消息头部和剩下部分组成,消息结构如图2所示。消息中的必选部分的非头部部分和消息的非必选部分都是由连续的标准的IE(information element信息元素)组成,一个标准的IE按顺序可能由以下三部分组成:一个IE的标识IEI(information elementidentifier)、一个长度标识LI(length indicator)、一个值部分。
一个标准的IE可以是以下表中几种格式的之一:
其中第一行表示格式T,意味着仅仅有类型,也就是说仅存在TEI部分。第二行表示格式V,意味着仅仅有值,也就是说仅存在值部分。依此类推,第五行表示TLV(类型/长度/值)格式,表示类型/长度/值,也就是说TEI、LI和值部分都存在。
如果一个IE不在一个消息中出现,则IE的三个部分都不会出现,否则,IE的三个部分会根据IE的格式有相应的出现。如果一个IE在一个消息的所有实例中都要求出现,则这个IE在该消息中属于必选,否则就是可选。
现有技术中,直接通过手工编写代码方式,实现TLV格式的编解码。这样的技术方案的缺陷是:由于每个人对协议的TLV格式描述有不同的理解,对应也有不同的编解码设计方式,因此通过人工编写的编解码代码不易于他人理解,维护此较困难。而且手工实现代码也一个繁琐复杂的过程,极易产生很多细节错误,影响协议编解码代码的正确使用。
为解决上述技术问题,本发明由TLV格式协议的配置文件格式规则、TLV格式协议编解码代码的组成元素和结构、以及配置文件的解析与编解码代码生成方法三部分组成。生成TLV格式协议的编解码代码过程为:首先按照配置文件的规则将协议的TLV格式描述转换成相应的配置文件,这步可通过编辑工具完成;然后利用配置文件与代码的对应规则生成协议相应的编解码代码,这步由程序自动完成。
发明的主要目的就是:设计实现一种基于配置的TLV格式协议编解码自动生成方法,减少实现TLV格式协议编解码的工作量和工作难度,增加TLV格式协议编解码的正确性。
本发明中所要解决的主要技术难题是:设计实现解析TLV格式协议配置文件与相应的编解码代码生成方法,该方法需要将协议的配置文件规则与编解码代码的组成元素和代码结构对应起来,这样才能正确地实现TLV格式协议的编解码。
发明内容
本发明提供了一种基于TLV格式协议的编解码代码生成装置,该装置包括以下模块:
TLV格式协议的配置文件生成模块,将LTE的TLV格式协议所有消息用一种树形结构进行表示;
配置文件解析和编解码代码生成模块,用于对输入的TLV格式协议配置文件进行解析,并根据代码生成规则产生相应的TLV格式协议的编解码代码;
编解码代码文件生成模块,TLV格式协议的编解码代码采用类结构进行实现,即协议配置文件生成模块中的配置文件中的树形结构的节点都由相应的类类型进行表示。
进一步,在生成的TLV格式协议的配置文件中的节点包括以下字段:
ID=#N,用于表示该节点在树形结构中相对于兄弟节点的顺序ID;
MAN=Y/N,用于表示该节点是否为必选,即记录协议消息中的某字段是否为必选字段,Y为必选字段,N为可选字段;
NAME=字符串,用于表示该节点的名字,即记录协议消息中的某字段名称;
NEXT=字符串,用于表示该节点是否为树形结构中的叶子节点,如果为叶子节点则值为NoField,如果为非叶子节点,则值为该节点的所有子节点的集合名称;
TYPE=节点类型,用于表示节点的类型;
LENGTH=#N,当节点为叶子节点时,用于表示该叶子节点所表示的值的长度;
TAG=#N,当节点为TLVSequence_TV、TLVSequence_TLV、TLVSequence_TLVE类型时,用于记录该节点的TAG值;
RelationID=#N,当该节点为叶子节点时,用于记录和该节点有关联的节点ID,一般会从关联节点得到该节点所表示值的长度信息。
进一步,TLV格式协议的配置文件中用树形结构将所有节点组织起来,节点的树形结构采用父节点记录子节点集合名称的方式实现。
进一步,为了表示“父节点”和所有子节点之间的父子关系,先将所有子节点表示在集合中,然后在父节点的字段中指定子节点的集合,建立父节点和子节点之间的关系,子节点又可以指定自己的子节点集合,形成节点的树形结构;而TLV格式协议的每一个消息就是从树形结构的根节点开始的一个子树。
进一步,配置文件解析和编解码代码生成模块进一步包括:
读入模块,用于读入TLV格式协议的配置文件,生成一个节点队列,读出树形结构的根节点,并将根节点加入队列;
第一判断模块,判断节点队列是否为空,如果为空则转到终止模块,否则转入取出模块;
取出模块,从节点队列中取出一个节点;
生成模块,判断取出的节点类型,并根据节点的类型在TLV协议编解码代码中生成该节点类型所对应的类实例;
信息读取模块,读取该取出节点所带的信息,并将这些信息赋值到为该节点所生成的类实例中;
父子关系形成模块,将为该取出的节点所生成的类实例添加到该节点的父节点所对应的类实例的孩子列表中,也即在TLV格式协议的编解码代码中使该节点和父节点分别对应的类实例形成父子关系,并记录在父节点的类实例代码中;
第二判断模块,判断该取出的节点是否为叶子节点,通过节点的字段的值进行判断,如果判断为叶子节点,转到第一判断模块;否则为非叶子节点,转到加入模块;
加入模块,将该非叶子节点的所有子节点按顺序加入到节点队列中,转到第一判断模块;
终止模块,结束配置文件的解析和代码生成。
进一步,类类型中包括以下各个类:
类CBaseNode,为所有节点类型的基类,用于提供记录节点的ID、RelationID、出现属性,出现属性对应树形节点的MAN=Y/N,以及节点数组,该数组用于保存非叶子节点的所有子节点;
类CTLVBase,为所有TLV类型的基类,用于声明所有TLV类型的接口;
类CTLVChoice,配置文件中TLVChoice类型节点的代码实现,用于提供其子节点只能出现一个操作属性;
类CTLVSequence,配置文件中TLVSequence类型节点的代码实现,用于提供其所有字节点按顺序出现的操作属性;
类CTLVSequenceOf,配置文件中TLVSequenceOf类型节点的代码实现,用于提供其只有一种类型的子节点,但可以重复出现多次的操作属性;
类CTLVSequence_TV,配置文件中TLVSequence_TV类型节点的代码实现,用于提供对协议消息中TV格式IE的操作;
类CTLVSequence_TLV,配置文件中TLVSequence_TLV类型节点的代码实现,用于提供对协议消息中TLV格式IE的操作;
类CTLVSequence_TLVE,配置文件中TLVSequence_TLVE类型节点的代码实现,用于提供对协议消息中TLVE格式IE的操作;
类CBitString,配置文件中BitString类型叶子节点的代码实现,用于提供对协议消息中值类型为BitString的字段操作;
类COctetString,配置文件中OctetString类型叶节点的代码实现,用于提供对协议消息中值类型为OctetString的字段操作;
类CSignlnteger,配置文件中Signlnteger类型叶节点的代码实现,用于提供对协议消息中值类型为Signlnteger的字段操作;
类CUnsignlnteger,配置文件中Unsignlnteger类型叶节点的代码实现,用于提供对协议消息中值类型为Unsignlnteger的字段操作;
类CAscString,配置文件中AscString类型叶节点的代码实现,用于提供对协议消息中值类型为AscString的字段操作。
本发明还提供了一种基于TLV格式协议的编解码代码生成方法,该方法包括以下步骤:
TLV格式协议的配置文件生成步骤,将LTE的TLV格式协议所有消息用一种树形结构进行表示;
配置文件解析和编解码代码生成步骤,用于对输入的TLV格式协议配置文件进行解析,并根据代码生成规则产生相应的TLV格式协议的编解码代码;
编解码代码文件生成步骤,TLV格式协议的编解码代码采用类结构进行实现,即协议配置文件生成模块中的配置文件中的树形结构的节点都由相应的类类型进行表示。
进一步,TLV格式协议的配置文件中用树形结构将所有节点组织起来,节点的树形结构采用父节点记录子节点集合名称的方式实现。
进一步,为了表示“父节点”和所有子节点之间的父子关系,先将所有子节点表示在集合中,然后在父节点的字段中指定子节点的集合,建立父节点和子节点之间的关系,子节点又可以指定自己的子节点集合,形成节点的树形结构;而TLV格式协议的每一个消息就是从树形结构的根节点开始的一个子树。
进一步,配置文件解析和编解码代码生成步骤进一步包括:
步骤(1)用于读入TLV格式协议的配置文件,生成一个节点队列,读出树形结构的根节点,并将根节点加入队列;
步骤(2),判断节点队列是否为空,如果为空则转到步骤(9),否则转入步骤(3);
步骤(3),从节点队列中取出一个节点;
步骤(4),判断取出的节点类型,并根据节点的类型在TLV协议编解码代码中生成该节点类型所对应的类实例;
步骤(5),读取该取出节点所带的信息,并将这些信息赋值到为该节点所生成的类实例中;
步骤(6),将为该取出的节点所生成的类实例添加到该节点的父节点所对应的类实例的孩子列表中,也即在TLV格式协议的编解码代码中使该节点和父节点分别对应的类实例形成父子关系,并记录在父节点的类实例代码中;
步骤(7),判断该取出的节点是否为叶子节点,通过节点的字段的值进行判断,如果判断为叶子节点,转到步骤(2);否则为非叶子节点,转到步骤(8);
步骤(8),将该非叶子节点的所有子节点按顺序加入到节点队列中,转到步骤(2);
步骤(9),结束配置文件的解析和代码生成。
附图说明
图1是示出现有技术的LTE系统网络结构示意图。
图2是根据本发明的层3协议消息的结构示意图。
图3是根据本发明装置的模块图。
图4是根据本发明的协议编解码代码中的类类型结构图。
图5是根据本发明的配置文件解析和编解码代码生成的流程图。
具体实施方式
为使本发明的上述目的、特征和优点更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明:
在LTE协议仿真测试的应用中,本技术方案可实现将TLV格式描述的协议生成相应的编解码代码。
如图3所示,为本发明装置的组成结构图,本发明装置有三部分组成:TLV格式协议的配置文件生成模块、配置文件解析和编解码代码生成模块、编解码代码文件生成模块。
本发明装置各组成部分描述如下:
TLV格式协议的配置文件生成模块:该配置文件生成模块为配置文件解析和编解码代码生成模块的输入部分,作用是将TLV格式的协议用本技术方案中的配置表示方式进行描述。具体描述如下:该描述方法作用是将LTE的TLV格式协议所有消息用一种树形结构进行表示,树形结构由相应的节点组成,下面分别描述树形结构和节点。
1.TLV格式协议配置文件中的节点表示方式
配置文件中的节点表示方式如下:
其中:ID=#N用于表示该节点在树形结构中相对于兄弟节点的顺序ID;
MAN=Y/N用于表示该节点是否为必选,即记录协议消息中的某字段是否为必选字段,Y为必选字段,N为可选字段;
NAME=字符串 用于表示该节点的名字,即记录协议消息中的某字段名称;
NEXT=字符串 用于表示该节点是否为树形结构中的叶子节点,如果为叶子节点则值为NoField,如果为非叶子节点,则值为该节点的所有子节点的集合名称;
TYPE=节点类型,用于表示节点的类型,叶子节点的类型有:BitString,
OctetString,Signlnteger,Unsignlnteger,AscString,用于表示叶子节点所表示值的类型;非叶子节点类型有:TLVChoice,TLVSequence,TLVSequence_TV,TLVSequence_TLV,TLVSequence_TLVE,TLVSequenceOf,用于表示非叶子的子节点组成形式,其中TLVChoice表示子节点中只能有一个出现;TLVSequence表示所有的子节点按顺序出现;TLVSequenceOf表示其子节点只有一个类型,但可以重复出现;TLVSequence_TV表示格式为TV的节点;TLVSequence_TLV表示格式为TLV的节点;TLVSequence_TLVE表示格式为TLVE的节点;格式为TV、TLV、TLVE的节点参考3GPP TS24.007规范;
LENGTH=#N,当节点为叶子节点时,用于表示该叶子节点所表示的值的长度;
TAG=#N,当节点为TLVSequence_TV、TLVSequence_TLV、TLVSequence_TLVE类型时,用于记录该节点的TAG值;
RelationID=#N,当该节点为叶子节点时,用于记录和该节点有关联的节点ID,一般会从关联节点得到该节点所表示值的长度信息。
2.TLV格式协议配置文件中的树形结构表示方式
TLV格式协议配置文件中需要用树形结构将所有节点组织起来,节点的树形结构采用父节点记录子节点集合名称的方式实现,描述如下:
其中BOLCK=字符串,表示节点的集合名称(如block_n),集
合中的所有节点都放在“BOLCK=字符串“下面的方括号中[]中,并且这个节点集合有集合的名称进行标识。
即为了表示“父节点”和所有子节点之间的父子关系,先将所有子节点表示在集合“block_n“中,然后在父节点的NEXT字段中指定子节点的集合(NEXT=block_n),这样就建立了父节点和子节点之间的关系,以此类推,子节点又可以指定自己的子节点集合,这样就形成了节点的树形结构;而TLV格式协议的每一个消息就是从树形结构的根节点开始的一个子树。
配置文件解析和编解码代码生成模块:用于对输入的TLV格式协议配置文件进行解析,并根据代码生成规则产生相应的TLV格式协议的编解码代码。具体步骤如下:
配置文件解析和编解码代码生成模块负责解析TLV格式协议的配置文件,按广度优先遍历配置文件中的树形结构,根据配置文件中树形结构节点的类型等信息,在编解码代码中生成相应的类实例,以此生成TLV格式协议的编解码代码,详细的配置文件解析和编解码代码生成流程如图5所示,详细步骤如下:
第一步:读入TLV格式协议的配置文件,生成一个节点队列,读出树形结构的根节点,并将根节点加入队列;
第二步:判断节点队列是否为空,如果为空则执行最后第九步,否则执行第三步操作;
第三步:从节点队列中取出一个节点;
第四步;判断取出的节点类型,并根据节点的类型在TLV协议编解码代码中生成该节点类型所对应的类实例。例如,取出的节点类型为TLVSequence,则生成类CTLVSequence的实例,以此类推,其它类型的节点也生成相应的类实例。
第五步:读取该取出节点所带的信息,并将这些信息赋值到为该节点所生成的类实例中;例如在类的实例中记录节点出现属性(可选还是必选),如果是叶子节点,则记录LENGTH=#N字段所带值,以及RelationID=#N字段所带的值;如果节点类型为TLVSequence_TV、TLVSequence_TLV、TLVSequence_TLVE,并且出现属性为可选时,类的实例记录该节点所带的TAG=#N字段值。
第六步:将为该取出的节点所生成的类实例添加到该节点的父节点所对应的类实例的孩子列表中,也即在TLV格式协议的编解码代码中使该节点和父节点分别对应的类实例形成父子关系,并记录在父节点的类实例代码中。
第七步,判断该取出的节点是否为叶子节点,通过节点的“NEXT=字符串“字段的值进行判断,如果“字符串”为“NoField”则为叶子节点,继续执行第二步;否则为非叶子节点,继续执行第八步;
第八步:将该非叶子节点的所有子节点按顺序加入到节点队列中,继续执行第二步;
第九步:结束配置文件的解析和代码生成流程。
编解码代码文件生成模块:该文件为配置文件解析和编解码代码生成模块的输出部分,作用是将TLV格式的协议编解码代码用本技术方案中的代码结构表示方式进行描述。具体描述如下:TLV格式协议的编解码代码采用类结构进行实现,即协议配置文件中树形结构的节点都由相应的类(class)类型进行表示,协议编解码代码中的类类型结构如图4所示:其中各个类的作用和说明如下:
类CBaseNode,为所有节点类型的基类,用于提供记录节点的ID、RelationID、出现属性(对应树形节点的MAN=Y/N),以及节点数组(用于保存非叶子节点的所有子节点)。
类CTLVBase,为所有TLV类型的基类,用于声明所有TLV类型的接口;
类CTLVChoice,配置文件中TLVChoice类型节点的代码实现,用于提供其子节点只能出现一个操作属性。
类CTLVSequence,配置文件中TLVSequence类型节点的代码实现,用于提供其其所有字节点按顺序出现的操作属性。
类CTLVSequenceOf,配置文件中TLVSequenceOf类型节点的代码实现,用于提供其只有一种类型的子节点,但可以重复出现多次的操作属性。
类CTLVSequence_TV,配置文件中TLVSequence_TV类型节点的代码实现,用于提供对协议消息中TV格式IE(informationelement)的操作;
类CTLVSequence_TLV,配置文件中TLVSequence_TLV类型节点的代码实现,用于提供对协议消息中TLV格式IE(information element)的操作;
类CTLVSequence_TLVE,配置文件中TLVSequence_TLVE类型节点的代码实现,用于提供对协议消息中TLVE格式IE(information element)的操作;
类CBitString,配置文件中BitString类型叶子节点的代码实现,用于提供对协议消息中值类型为BitString(此特串)的字段操作;
类COctetString,配置文件中OctetString类型叶节点的代码实现,用于提供对协议消息中值类型为OctetString(字节串)的字段操作;
类CSignlnteger,配置文件中Signlnteger类型叶节点的代码实现,用于提供对协议消息中值类型为Signlnteger(有符号整数)的字段操作;
类CUnsignlnteger,配置文件中Unsignlnteger类型叶节点的代码实现,用于提供对协议消息中值类型为Unsignlnteger(无符号整数)的字段操作;
类CAscString,配置文件中AscString类型叶节点的代码实现,用于提供对协议消息中值类型为AscString(ascll码串)的字段操作。
本发明技术方案具有以下特点:在本发明的技术方案中,设计了TLV格式协议的配置文件,在生成协议的编解码代码之前需要将协议的TLV格式描述转换成相应的配置文件。在本发明的总体技术方案中,设计了TLV格式协议配置文件的解析和编解码生成方法。
本发明所取得的技术效果有:由于设计了相应的TLV格式协议配置文件的格式规则,使对协议的TLV格式描述有统一的理解,并且根据配置的规则可以设计相应编辑工具,简化编辑配置文件的工作,不会遗漏编解码需要的信息。好处:可以根据TLV格式协议配置文件所带的信息和对应的编解码代码的组成元素和代码结构,能自动生成协议的编解码代码,生成的代码按照生成规则具有统一的结构,易于他人理解和维护。
以上是对本发明的优选实施例进行的详细描述,但本领域的普通技术人员应该意识到,在本发明的范围内和精神指导下,各种改进、添加和替换都是可能的。这些都在本发明的权利要求所限定的保护范围内。
Claims (10)
1.一种基于TLV格式协议的编解码代码生成装置,其特征在于该装置包括以下模块:
TLV格式协议的配置文件生成模块,将LTE的TLV格式协议所有消息用一种树形结构进行表示;
配置文件解析和编解码代码生成模块,用于对输入的TLV格式协议配置文件进行解析,并根据代码生成规则产生相应的TLV格式协议的编解码代码;
编解码代码文件生成模块,TLV格式协议的编解码代码采用类结构进行实现,即协议配置文件生成模块中的配置文件中的树形结构的节点都由相应的类类型进行表示。
2.根据权利要求1所述的装置,其特征在于:
在生成的TLV格式协议的配置文件中的节点包括以下字段:
ID=#N,用于表示该节点在树形结构中相对于兄弟节点的顺序ID;
MAN=Y/N,用于表示该节点是否为必选,即记录协议消息中的某字段是否为必选字段,Y为必选字段,N为可选字段;
NAME=字符串,用于表示该节点的名字,即记录协议消息中的某字段名称;
NEXT=字符串,用于表示该节点是否为树形结构中的叶子节点,如果为叶子节点则值为NoField,如果为非叶子节点,则值为该节点的所有子节点的集合名称;
TYPE=节点类型,用于表示节点的类型;
LENGTH=#N,当节点为叶子节点时,用于表示该叶子节点所表示的值的长度;
TAG=#N,当节点为TLVSequence_TV、TLVSequence_TLV、TLVSequence_TLVE类型时,用于记录该节点的TAG值;
RelationID=#N,当该节点为叶子节点时,用于记录和该节点有关联的节点ID,一般会从关联节点得到该节点所表示值的长度信息。
3.根据权利要求1所述的装置,其特征在于:
TLV格式协议的配置文件中用树形结构将所有节点组织起来,节点的树形结构采用父节点记录子节点集合名称的方式实现。
4.根据权利要求3所述的装置,其特征在于:
为了表示“父节点”和所有子节点之间的父子关系,先将所有子节点表示在集合中,然后在父节点的字段中指定子节点的集合,建立父节点和子节点之间的关系,子节点又可以指定自己的子节点集合,形成节点的树形结构;而TLV格式协议的每一个消息就是从树形结构的根节点开始的一个子树。
5.根据权利要求1所述的装置,其特征在于配置文件解析和编解码代码生成模块进一步包括:
读入模块,用于读入TLV格式协议的配置文件,生成一个节点队列,读出树形结构的根节点,并将根节点加入队列;
第一判断模块,判断节点队列是否为空,如果为空则转到终止模块,否则转入取出模块;
取出模块,从节点队列中取出一个节点;
生成模块,判断取出的节点类型,并根据节点的类型在TLV协议编解码代码中生成该节点类型所对应的类实例;
信息读取模块,读取该取出节点所带的信息,并将这些信息赋值到为该节点所生成的类实例中;
父子关系形成模块,将为该取出的节点所生成的类实例添加到该节点的父节点所对应的类实例的孩子列表中,也即在TLV格式协议的编解码代码中使该节点和父节点分别对应的类实例形成父子关系,并记录在父节点的类实例代码中;
第二判断模块,判断该取出的节点是否为叶子节点,通过节点的字段的值进行判断,如果判断为叶子节点,转到第一判断模块;否则为非叶子节点,转到加入模块;
加入模块,将该非叶子节点的所有子节点按顺序加入到节点队列中,转到第一判断模块;
终止模块,结束配置文件的解析和代码生成。
6.根据权利要求1所述的装置,其特征在于类类型中包括以下各个类:
类CBaseNode,为所有节点类型的基类,用于提供记录节点的ID、RelationID、出现属性,出现属性对应树形节点的MAN=Y/N,以及节点数组,该数组用于保存非叶子节点的所有子节点;
类CTLVBase,为所有TLV类型的基类,用于声明所有TLV类型的接口;
类CTLVChoice,配置文件中TLVChoice类型节点的代码实现,用于提供其子节点只能出现一个操作属性;
类CTLVSequence,配置文件中TLVSequence类型节点的代码实现,用于提供其所有字节点按顺序出现的操作属性;
类CTLVSequenceOf,配置文件中TLVSequenceOf类型节点的代码实现,用于提供其只有一种类型的子节点,但可以重复出现多次的操作属性;
类CTLVSequence_TV,配置文件中TLVSequence_TV类型节点的代码实现,用于提供对协议消息中TV格式IE的操作;
类CTLVSequence_TLV,配置文件中TLVSequence_TLV类型节点的代码实现,用于提供对协议消息中TLV格式IE的操作;
类CTLVSequence_TLVE,配置文件中TLVSequence_TLVE类型节点的代码实现,用于提供对协议消息中TLVE格式IE的操作;
类CBitString,配置文件中BitString类型叶子节点的代码实现,用于提供对协议消息中值类型为BitString的字段操作;
类COctetString,配置文件中OctetString类型叶节点的代码实现,用于提供对协议消息中值类型为OctetString的字段操作;
类CSignlnteger,配置文件中Signlnteger类型叶节点的代码实现,用于提供对协议消息中值类型为Signlnteger的字段操作;
类CUnsignlnteger,配置文件中Unsignlnteger类型叶节点的代码实现,用于提供对协议消息中值类型为Unsignlnteger的字段操作;
类CAscString,配置文件中AscString类型叶节点的代码实现,用于提供对协议消息中值类型为AscString的字段操作。
7.一种基于TLV格式协议的编解码代码生成方法,其特征在于该方法包括以下步骤:
TLV格式协议的配置文件生成步骤,将LTE的TLV格式协议所有消息用一种树形结构进行表示;
配置文件解析和编解码代码生成步骤,用于对输入的TLV格式协议配置文件进行解析,并根据代码生成规则产生相应的TLV格式协议的编解码代码;
编解码代码文件生成步骤,TLV格式协议的编解码代码采用类结构进行实现,即协议配置文件生成模块中的配置文件中的树形结构的节点都由相应的类类型进行表示。
8.根据权利要求7所述的方法,其特征在于:
TLV格式协议的配置文件中用树形结构将所有节点组织起来,节点的树形结构采用父节点记录子节点集合名称的方式实现。
9.根据权利要求8所述的方法,其特征在于:
为了表示“父节点”和所有子节点之间的父子关系,先将所有子节点表示在集合中,然后在父节点的字段中指定子节点的集合,建立父节点和子节点之间的关系,子节点又可以指定自己的子节点集合,形成节点的树形结构;而TLV格式协议的每一个消息就是从树形结构的根节点开始的一个子树。
10.根据权利要求7所述的方法,其特征在于配置文件解析和编解码代码生成步骤进一步包括:
步骤(1)用于读入TLV格式协议的配置文件,生成一个节点队列,读出树形结构的根节点,并将根节点加入队列;
步骤(2),判断节点队列是否为空,如果为空则转到步骤(9),否则转入步骤(3);
步骤(3),从节点队列中取出一个节点;
步骤(4),判断取出的节点类型,并根据节点的类型在TLV协议编解码代码中生成该节点类型所对应的类实例;
步骤(5),读取该取出节点所带的信息,并将这些信息赋值到为该节点所生成的类实例中;
步骤(6),将为该取出的节点所生成的类实例添加到该节点的父节点所对应的类实例的孩子列表中,也即在TLV格式协议的编解码代码中使该节点和父节点分别对应的类实例形成父子关系,并记录在父节点的类实例代码中;
步骤(7),判断该取出的节点是否为叶子节点,通过节点的字段的值进行判断,如果判断为叶子节点,转到步骤(2);否则为非叶子节点,转到步骤(8);
步骤(8),将该非叶子节点的所有子节点按顺序加入到节点队列中,转到步骤(2);
步骤(9),结束配置文件的解析和代码生成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105247529A CN103036877A (zh) | 2012-12-10 | 2012-12-10 | 一种基于tlv格式协议的编解码代码生成装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105247529A CN103036877A (zh) | 2012-12-10 | 2012-12-10 | 一种基于tlv格式协议的编解码代码生成装置及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103036877A true CN103036877A (zh) | 2013-04-10 |
Family
ID=48023360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012105247529A Pending CN103036877A (zh) | 2012-12-10 | 2012-12-10 | 一种基于tlv格式协议的编解码代码生成装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103036877A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104281515A (zh) * | 2013-07-09 | 2015-01-14 | 腾讯科技(深圳)有限公司 | 一种日志数据的调整方法和装置 |
CN109298866A (zh) * | 2018-09-26 | 2019-02-01 | 杭州米加科技股份有限公司 | 基于c语言的tlv格式协议快速解析方法 |
CN112084197A (zh) * | 2020-09-16 | 2020-12-15 | 艾体威尔电子技术(北京)有限公司 | 一种emv协议库中数据的存储方法 |
CN112104552A (zh) * | 2019-06-17 | 2020-12-18 | 华为技术有限公司 | 处理报文的方法、装置及计算机存储介质 |
CN114900570A (zh) * | 2022-07-13 | 2022-08-12 | 江西联创精密机电有限公司 | 一种标准化数据采集传输方法及系统 |
CN114938401A (zh) * | 2022-03-21 | 2022-08-23 | 北京思信飞扬信息技术股份有限公司 | 可配置的网络协议数据解析方法及电子设备 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0327102A2 (en) * | 1988-02-05 | 1989-08-09 | Nec Corporation | Apparatus and method for structuring data written according to ISO/8824/ASN.1 specification |
CN1635763A (zh) * | 2003-12-26 | 2005-07-06 | 中国电子科技集团公司第三十研究所 | 用于抽象句法表示法高层应用的通用编解码方法 |
US20060235868A1 (en) * | 2004-01-13 | 2006-10-19 | Achilles Heather D | Methods and apparatus for representing markup language data |
CN1859359A (zh) * | 2005-07-12 | 2006-11-08 | 上海华为技术有限公司 | 用抽象语法规则描述的通信协议的实现方法及其装置 |
CN1992715A (zh) * | 2005-12-31 | 2007-07-04 | 中兴通讯股份有限公司 | 基于asn.1定义的pdu编解码代码自动生成的实现方法 |
CN101159743A (zh) * | 2007-10-22 | 2008-04-09 | 中兴通讯股份有限公司 | Asn.1编解码函数自动生成中的数据类型选择方法 |
CN101179580A (zh) * | 2007-12-12 | 2008-05-14 | 北京北方烽火科技有限公司 | 一种用于实现WiMAX系统消息编解码的方法 |
CN101197818A (zh) * | 2006-12-08 | 2008-06-11 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理方法 |
CN101202739A (zh) * | 2006-12-11 | 2008-06-18 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理装置 |
CN101202736A (zh) * | 2006-12-13 | 2008-06-18 | 西安大唐电信有限公司 | 一种在通讯网络中实现编解码的方法 |
CN101316241A (zh) * | 2008-07-02 | 2008-12-03 | 中兴通讯股份有限公司 | 用于通信数据的tlv格式处理方法 |
CN101324846A (zh) * | 2008-07-08 | 2008-12-17 | 国电南瑞科技股份有限公司 | 根据asn.1信息动态创建数据模型的方法 |
CN101370003A (zh) * | 2007-08-14 | 2009-02-18 | 大唐移动通信设备有限公司 | 用于定制通讯协议的方法和装置、转换通讯协议描述的方法和装置 |
-
2012
- 2012-12-10 CN CN2012105247529A patent/CN103036877A/zh active Pending
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0327102A2 (en) * | 1988-02-05 | 1989-08-09 | Nec Corporation | Apparatus and method for structuring data written according to ISO/8824/ASN.1 specification |
CN1635763A (zh) * | 2003-12-26 | 2005-07-06 | 中国电子科技集团公司第三十研究所 | 用于抽象句法表示法高层应用的通用编解码方法 |
US20060235868A1 (en) * | 2004-01-13 | 2006-10-19 | Achilles Heather D | Methods and apparatus for representing markup language data |
CN1859359A (zh) * | 2005-07-12 | 2006-11-08 | 上海华为技术有限公司 | 用抽象语法规则描述的通信协议的实现方法及其装置 |
CN1992715A (zh) * | 2005-12-31 | 2007-07-04 | 中兴通讯股份有限公司 | 基于asn.1定义的pdu编解码代码自动生成的实现方法 |
CN101197818A (zh) * | 2006-12-08 | 2008-06-11 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理方法 |
CN101202739A (zh) * | 2006-12-11 | 2008-06-18 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理装置 |
CN101202736A (zh) * | 2006-12-13 | 2008-06-18 | 西安大唐电信有限公司 | 一种在通讯网络中实现编解码的方法 |
CN101370003A (zh) * | 2007-08-14 | 2009-02-18 | 大唐移动通信设备有限公司 | 用于定制通讯协议的方法和装置、转换通讯协议描述的方法和装置 |
CN101159743A (zh) * | 2007-10-22 | 2008-04-09 | 中兴通讯股份有限公司 | Asn.1编解码函数自动生成中的数据类型选择方法 |
CN101179580A (zh) * | 2007-12-12 | 2008-05-14 | 北京北方烽火科技有限公司 | 一种用于实现WiMAX系统消息编解码的方法 |
CN101316241A (zh) * | 2008-07-02 | 2008-12-03 | 中兴通讯股份有限公司 | 用于通信数据的tlv格式处理方法 |
CN101324846A (zh) * | 2008-07-08 | 2008-12-17 | 国电南瑞科技股份有限公司 | 根据asn.1信息动态创建数据模型的方法 |
Non-Patent Citations (3)
Title |
---|
刘云龙: "ASN.1编码与解码过程的一种形式化描述", 《数字通信》 * |
李小文,等: "ASN.1编解码模块在LTE协议栈中的研究与应用", 《电视技术》 * |
高骏: "ASN.1翻译系统关键技术的研究与部分实现", 《中国优秀硕士论文全文数据库》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104281515A (zh) * | 2013-07-09 | 2015-01-14 | 腾讯科技(深圳)有限公司 | 一种日志数据的调整方法和装置 |
CN109298866A (zh) * | 2018-09-26 | 2019-02-01 | 杭州米加科技股份有限公司 | 基于c语言的tlv格式协议快速解析方法 |
CN112104552A (zh) * | 2019-06-17 | 2020-12-18 | 华为技术有限公司 | 处理报文的方法、装置及计算机存储介质 |
CN112084197A (zh) * | 2020-09-16 | 2020-12-15 | 艾体威尔电子技术(北京)有限公司 | 一种emv协议库中数据的存储方法 |
CN112084197B (zh) * | 2020-09-16 | 2023-10-31 | 艾体威尔电子技术(北京)有限公司 | 一种emv协议库中数据的存储方法 |
CN114938401A (zh) * | 2022-03-21 | 2022-08-23 | 北京思信飞扬信息技术股份有限公司 | 可配置的网络协议数据解析方法及电子设备 |
CN114938401B (zh) * | 2022-03-21 | 2023-03-10 | 北京思信飞扬信息技术股份有限公司 | 可配置的网络协议数据解析方法及电子设备 |
CN114900570A (zh) * | 2022-07-13 | 2022-08-12 | 江西联创精密机电有限公司 | 一种标准化数据采集传输方法及系统 |
CN114900570B (zh) * | 2022-07-13 | 2022-10-18 | 江西联创精密机电有限公司 | 一种标准化数据采集传输方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103036877A (zh) | 一种基于tlv格式协议的编解码代码生成装置及方法 | |
CN101778168B (zh) | 一种移动终端浏览器上网页优化显示方法和系统 | |
CN101815093A (zh) | 一种网页到移动终端的适配方法及移动终端页面适配装置 | |
CN104484216A (zh) | 服务接口文档和在线测试工具生成方法、装置 | |
CN111585344B (zh) | 一种基于全站ied仿真的变电站智能校核方法及装置 | |
CN102843245B (zh) | 配置数据交互方法及装置 | |
CN101188561A (zh) | 基于自定义模板的通用业务数据通讯方法与系统 | |
CN106850531B (zh) | 一种基于模板的协议代码生成方法 | |
CN106909361A (zh) | 基于模版引擎的web开发方法和装置 | |
CN111400554B (zh) | 一种统一标签库的接入方法及装置 | |
CN102222112B (zh) | 资源管理装置和资源管理方法 | |
CN108509199A (zh) | 自动生成中文注释的方法、装置、设备及存储介质 | |
CN104660438A (zh) | 问题定位处理方法及装置 | |
CN103020318A (zh) | 一种对数据库中数据库表维护的方法 | |
CN102521008A (zh) | 程序编译装置和程序编译方法 | |
CN106199323A (zh) | 一种智能变电站虚端子连接正确性判别方法 | |
CN103747067A (zh) | 一种基于数字家庭智能网关的数据配置方法 | |
CN103905233B (zh) | 实现模拟传感器即插即用的方法、系统与接入网络设备 | |
CN111858521A (zh) | 配网工程设计数据共享云平台及应用方法 | |
CN103379519A (zh) | 一种基于智能手机的移动通信网络测试方法 | |
CN102905300A (zh) | 基于网络数据的lte仿真测试流程自动生成方法 | |
CN110445752A (zh) | 一种支持多种can设备并灵活解析各类can报文的实现方法 | |
CN109144878A (zh) | 基于路径差异的代码测试方法 | |
CN105577462A (zh) | 移动设备的流量统计方法及装置 | |
CN104753659A (zh) | 一种多网元数据同步加载的方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130410 |