CN1992715A - 基于asn.1定义的pdu编解码代码自动生成的实现方法 - Google Patents
基于asn.1定义的pdu编解码代码自动生成的实现方法 Download PDFInfo
- Publication number
- CN1992715A CN1992715A CN 200510135665 CN200510135665A CN1992715A CN 1992715 A CN1992715 A CN 1992715A CN 200510135665 CN200510135665 CN 200510135665 CN 200510135665 A CN200510135665 A CN 200510135665A CN 1992715 A CN1992715 A CN 1992715A
- Authority
- CN
- China
- Prior art keywords
- header file
- asn
- pdu
- definition
- data 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.)
- Granted
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)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种基于ASN.1定义的PDU编解码代码自动生成的实现方法,首先确定在自定义的头文件中使用的数据类型的定义规则与标注规则,并根据该定义规则与标注规则生成头文件;再根据所述数据类型的定义规则与标注规则,编码生成头文件分析工具,以及对应的代码产生工具;使用所述头文件分析工具来扫描各头文件,解析出各头文件中定义的数据结构名及结构之间的关系;然后使用所述代码产生工具,根据从头文件中解析出的数据结构名及结构之间的关系,自动产生PDU结构编解码的代码。本发明避免了生成代码在编程规范等方面不相容的问题,而且编程工作量相对较小、成本较低。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种自动生成通信协议中协议数据单元的编解码代码的方法。
背景技术
在现代通信领域,随着通信功能的日益强大,很多网络协议已成为一个非常庞大和复杂的软件系统,这个系统中有着许多基于不同编解码规则的编解码过程,比如层3消息编解码以及基于ASN.1(Abstract Sybtax NotationOne)定义的PDU编解码等。这些编解码过程是整个协议软件系统的重要组成部分,并起着极其重要的作用。
在两个协议实体交换PDU(协议数据单元)时,采用ASN.1抽象语法定义每一个PDU,然后用ASN.1编码规则对PDU进行编码。ASN.1的定义和编码规则分别在ISO 8824和8825中作了规定。
ASN.1有严格的BNF定义,具有简洁、精确和无二义性的特点。它有两种用途:一是用于如电子邮件等应用语法;二是用作定义特定协议实体PDU结构的一种手段。
ASN.1类似于高级程序设计语言的数据描述部分,它提供若干语言构件用以定义类型和值。类型和值是任何数据都具有的两个重要的属性,类型对应结构,值对应内容。如果给定一种类型,则该类型的一个值就称为该类型的一个具体实例。但是与其他程序设计语言不同的是,ASN.1的类型不需要由机器实现,例如ASN.1中的整型INTEGER允许使用所有的整数作为其值,这样一种类型在实际机器中是不可能表示的。
ASN.1的基本构件是模块,一种抽象数据类型可以用ASN.1定义成一个模块,这个模块描述了抽象数据类型的抽象语法。模块可以用名字来引用,模块名也是它定义的抽象语法的名字。当应用实体把协议数据单元交给表示服务时,同时要说明这个协议数据单元的抽象语法名。
目前对于基于ASN.1定义PDU编解码代码的实现一般有两种方法:
第一种方法是所有代码完全人工实现。由于此类PDU集定义的庞大和复杂性决定了代码量通常多达数万行,人工实现工作量异常巨大。
第二种方法是通过基于ASN.1语法的编译器的商业软件工具自动生成PDU编解码代码。
如图1所示,为基于ASN.1语法的代码自动生成的商业软件工具自动生成PDU编解码代码的方法流程图,包括以下步骤:
(步骤101)使用ASN.1抽象语法对通信协议文件中PDU进行结构描述;
(步骤102)使用ASN.1编译器编译;
(步骤103)生成PDU编解码代码。
此方法虽然大大减少了工作量;但还有以下缺点:
(1)生成的代码与系统其它部分在编程规范等方面不相容,大大降低了整个软件的完整性和规范性。
(2)数据类型定义不灵活,增大了各种数据类型对内存的占用。
(3)只能使用ASN.1抽象语法描述消息结构,不能使用自定义消息头文件。
(4)增加了商业成本。
发明内容
本发明所要解决的技术问题在于提供了一种基于ASN.1定义的PDU编解码代码自动生成的实现方法,可以避免生成代码在编程规范方面不相容和数据类型定义不灵活而增大对内存占用的问题,编程工作量相对较小,成本较低。
为解决上述技术问题,本发明提供了一种基于ASN.1定义的PDU编解码代码自动生成的实现方法,其具体步骤为:
(1)确定在自定义的头文件中使用的数据类型的定义规则与标注规则,并根据该定义规则与标注规则生成头文件;
(2)根据所述数据类型的定义规则与标注规则,编码生成头文件分析工具,以及代码产生工具;
(3)使用所述头文件分析工具来扫描各头文件,解析出各头文件中定义的数据结构名及结构之间的关系;
(4)使用所述代码产生工具,根据从头文件中解析出的结构名及结构之间的关系,自动产生PDU结构编解码的代码。
所述方法还可以包括以下步骤:
(5)将所述自动产生的PDU结构编解码的代码,与ASN.1基本类型编解码的代码以及对应的头文件整合到一起,形成完整的PDU结构编解码代码。
使用本发明,由于允许使用自定义的头文件,因此不需使用ASN.1抽象语法。而利用自定义的编程规范产生的代码,避免了基于ASN.1语法的编译器商业软件工具生成代码在编程规范等方面不相容的问题。而且,针对自定义的头文件而生成的头文件分析工具和代码产生工具,使得避免了人工实现代码的巨大工作量,编程工作量相对小、成本低。
附图说明
图1为基于ASN.1语法的代码自动生成的商业软件工具自动生成PDU编解码代码的方法流程图;
图2为本发明实施例所述的基于ASN.1定义的PDU编解码代码自动生成的实现方法流程图。
具体实施方式
如图2所示,为本发明实施例所述的基于ASN.1定义的PDU编解码代码自动生成的实现方法流程图,其具体步骤为:
步骤201:生成自定义头文件。
本发明的特点之一就是可以允许用户使用自定义的头文件。自定义头文件不仅可以符合编程规范,而且可以对各种数据类型进行灵活定义,以尽量减少各种数据类型对内存的占用。
而要做到对各个不同的头文件进行统一化的解析,则需要规范头文件中的结构定义规则。也就是说,需要按照统一的结构定义规则来生成自定义头文件。因此,本发明在生成自定义头文件前,必须首先确定在头文件中使用的数据类型的定义规则与标注规则。
在确定数据类型的定义规则与标注规则时,可以首先对通信协议文件中所有PDU结构类型进行分析,记录所有结构的声明类型,然后把记录的声明类型进行分类,就得到所有使用到的ASN.1的抽象数据类型。如Integer,bitstring,octetstring,Enum,bool,Null,sequence,choice,sequenceof等。从而确定需要加标注的范围。
通过上一步的分析知道,不同的抽象数据类型在自定义的头文件中可能是同一种数据类型,如sequence和choice,在自定义头文件中都可以被定义为struct数据类型,为了扫描分析头文件时得到正确的结果,对这些需要加以区分的类型在头文件中加入特别标注;另外,对于有的抽象数据类型在自定义头文件定义的数据类型中无法完全表示其全部信息的,也要在头文件中加入特别标注。如Integer抽象数据类型需要加入是否是受限类型,以及上限、下限的数值等。
对于两种情况都存在的抽象数据类型,就要同时加入两种标注。
对于上述的两种情况以下展开具体说明:
1.对于在自定义头文件中被定义成同一种数据类型从而无法区分的情况。Sequence类型、Sequence-Of类型、Choice类型、Bitstring类型、Octetstring类型在自定义头文件中都被定义为struct类型,因此需要在每一个struct类型定义后加入标注以说明,在Sequence类型的struct声明后面加上标注“$SN”,在Sequence-Of类型的struct声明后面加上标注“$SO”,在Choice类型的struct声明后面加上标注“$CH”,在Bitstring类型的struct声明后面加上标注“$BT”,在Octetstring类型的struct声明后面加上标注“$OT”。
2.对于在自定义头文件中定义的数据类型中无法完全表示其全部信息的情况。Sequence-Of类型、Bitstring类型、Octetstring类型、Integer类型等。因为存在受限情况等信息需要说明,因此需要加入特别标注。Sequence-Of类型的声明后面加上“$上限数值$下限数值”(如$2048$1),Bitstring类型、Octetstring类型、Integer类型也是如此。
3.对于两种情况都存在的抽象数据类型,如Sequence-Of类型、Bitstring类型、Octetstring类型等需要依次加入两种情况的标注。例如Sequence-Of类型的struct声明后面加上依次加上“$SO$上限数值$下限数值”;Bitstring类型、Octetstring类型也是如此。
应当说明的是,本发明仅仅是需要首先确定头文件中使用的数据类型的定义规则与标注规则,但并不限制使用何种具体的定义规则与标注规则,也不要求制定这种规则的方法,上述情况也仅是举例说明规则的形式而已,实际上,还可以使用其他定义形式。也就是说,在这一步骤中,本发明仅是需要知道这个规则是什么即可,并根据该规则就可以生成头文件,这利用现有技术手段即可实现。而至于该规则的定义过程并非本发明的重点。
步骤202:编码生成头文件分析工具及对应的代码产生工具。
由于在步骤201中已经知道了头文件是按照什么规则进行数据类型的声明以及各种标注的含义了,因此,可以方便的实现对头文件分析工具的生成。该分析工具不仅可以分析头文件数据结构,还可以分析加入的标注以得到正确的结果。
头文件分析工具与代码产生工具的对应关系,其实就原理来说,就是头文件分析出头文件中的数据结构之间的关系,并把结构之间的关系告知代码产生工具,让代码产生工具根据结构之间的关系产生函数。函数之间的关系和结构之间的关系是完全一致的。
比如,结构之间的关系是嵌套的,对应的函数之间的关系也是嵌套的;如结构之间的关系是平行的,对应的函数之间的关系也是平行的。头文件分析工具与代码产生工具中间并没有其它特别的转换。
也就是说,头文件分析工具与代码产生工具这两者之间的数据如何转换和对应的实现方法有很多,这属于具体的软件编程采用的方法不同,但不影响本发明的思想方法。
步骤203:使用所述头文件分析工具来扫描各头文件,解析出各头文件中定义的数据结构名及结构之间的关系;
步骤204:使用所述代码产生工具,根据从头文件中解析出的数据结构名及结构之间的关系,自动产生PDU结构编解码的代码。其中,代码所使用的函数名和结构名均取自头文件。
步骤205:将产生的PDU结构编解码的代码与ASN.1基本类型编解码的代码以及自定义头文件加以整合,得到完整的PDU结构编解码代码。
Claims (8)
1、一种基于ASN.1定义的PDU编解码代码自动生成的实现方法,其特征在于,包括以下步骤:
(1)确定在自定义的头文件中使用的数据类型的定义规则与标注规则,并根据该定义规则与标注规则生成头文件;
(2)根据所述数据类型的定义规则与标注规则,编码生成头文件分析工具,以及对应的代码产生工具;
(3)使用所述头文件分析工具来扫描各头文件,解析出各头文件中定义的数据结构名及结构之间的关系;
(4)使用所述代码产生工具,根据从头文件中解析出的数据结构名及结构之间的关系,自动产生PDU结构编解码的代码。
2、根据权利要求1所述基于ASN.1定义的PDU编解码代码自动生成的实现方法,其特征在于,所述方法还包括以下步骤:
(5)将所述自动产生的PDU结构编解码的代码,与ASN.1基本类型编解码的代码以及对应的头文件整合到一起,形成完整的PDU结构编解码代码。
3、根据权利要求1所述的基于ASN.1定义的PDU编解码代码自动生成的实现方法,其特征在于,所述步骤(1)中,确定头文件中使用的数据类型的定义规则的原则是:使各种数据类型对内存的占用最小。
4、根据权利要求1所述基于ASN.1定义的PDU编解码代码自动生成的实现方法,其特征在于,所述步骤(1)中,确定在自定义的头文件中使用的数据类型的标注规则的步骤包括:对在自定义PDU结构头文件中被定义成同一种数据类型从而无法区分的ASN.1抽象数据类型加入标注来进行区分。
5、根据权利要求1所述基于ASN.1定义的PDU编解码代码自动生成的实现方法,其特征在于,所述步骤(1)中,确定在自定义的头文件中使用的数据类型的标注规则的步骤包括:对在自定义PDU结构头文件中定义的数据类型无法完全表示其全部信息的ASN.1抽象数据类型加入标注来补充声明。
6、根据权利要求1所述基于ASN.1定义的PDU编解码代码自动生成的实现方法,其特征在于,所述步骤(1)中,确定在自定义的头文件中使用的数据类型的标注规则的步骤包括:对在自定义PDU结构头文件中被定义成同一种数据类型从而无法区分、并且在自定义PDU结构头文件中定义的数据类型无法完全表示其全部信息的ASN.1抽象数据类型,依次加入两种标注来进行区分并补充声明。
7、根据权利要求1所述基于ASN.1定义的PDU编解码代码自动生成的实现方法,其特征在于,所述步骤(1)中,确定在自定义的头文件中使用的数据类型的标注规则的步骤包括:确定加入标注的位置位于数据类型的声明后面。
8、根据权利要求1所述基于ASN.1定义的PDU编解码代码自动生成的实现方法,其特征在于,步骤(3)中所述头文件分析工具扫描头文件的步骤,包括扫描头文件的数据类型以及加入的标注。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510135665 CN100579120C (zh) | 2005-12-31 | 2005-12-31 | 基于asn.1定义的pdu编解码代码自动生成的实现方法 |
PCT/CN2006/003016 WO2007076676A1 (fr) | 2005-12-31 | 2006-11-10 | Procede pour la production automatique de code de codage/decodage des unites de donnees de protocole (pdu) base sur une definition de notation de syntaxe abstraite numero 1 (asn.1) |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510135665 CN100579120C (zh) | 2005-12-31 | 2005-12-31 | 基于asn.1定义的pdu编解码代码自动生成的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1992715A true CN1992715A (zh) | 2007-07-04 |
CN100579120C CN100579120C (zh) | 2010-01-06 |
Family
ID=38214662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200510135665 Expired - Fee Related CN100579120C (zh) | 2005-12-31 | 2005-12-31 | 基于asn.1定义的pdu编解码代码自动生成的实现方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN100579120C (zh) |
WO (1) | WO2007076676A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101841515A (zh) * | 2009-03-19 | 2010-09-22 | 北京理工大学 | 可变目标的协议数据单元编解码代码自动生成的实现方法 |
CN102055723A (zh) * | 2009-11-03 | 2011-05-11 | 杰脉通信技术(上海)有限公司 | 一种ue侧实现3g rrc asn.1结构中协议版本前向兼容的方法 |
CN102332018A (zh) * | 2011-09-21 | 2012-01-25 | 西安理工大学 | 一种Asn.1编码的快速读码方法 |
CN102929681A (zh) * | 2012-10-31 | 2013-02-13 | 中国运载火箭技术研究院 | 一种虚拟试验分布式对象模型框架代码自动生成方法 |
CN103036877A (zh) * | 2012-12-10 | 2013-04-10 | 北京中创信测科技股份有限公司 | 一种基于tlv格式协议的编解码代码生成装置及方法 |
CN105843663A (zh) * | 2016-04-18 | 2016-08-10 | 苏州简约纳电子有限公司 | 适用于asn.1递归解析数据结构描述的编解码方法 |
CN105867991A (zh) * | 2016-03-25 | 2016-08-17 | 苏州简约纳电子有限公司 | 适用于asn.1编译器符号表的转换方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0567137A1 (en) * | 1992-04-23 | 1993-10-27 | Nec Corporation | Protocol data unit encoding/decoding device |
CN100505743C (zh) * | 2003-12-12 | 2009-06-24 | 华为技术有限公司 | 通用消息解释器的实现方法 |
-
2005
- 2005-12-31 CN CN 200510135665 patent/CN100579120C/zh not_active Expired - Fee Related
-
2006
- 2006-11-10 WO PCT/CN2006/003016 patent/WO2007076676A1/zh active Application Filing
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101841515A (zh) * | 2009-03-19 | 2010-09-22 | 北京理工大学 | 可变目标的协议数据单元编解码代码自动生成的实现方法 |
CN101841515B (zh) * | 2009-03-19 | 2014-01-08 | 北京理工大学 | 可变目标的协议数据单元编解码代码自动生成的实现方法 |
CN102055723B (zh) * | 2009-11-03 | 2013-11-06 | 开曼晨星半导体公司 | 一种ue侧实现3g rrc asn.1结构中协议版本前向兼容的方法 |
CN102055723A (zh) * | 2009-11-03 | 2011-05-11 | 杰脉通信技术(上海)有限公司 | 一种ue侧实现3g rrc asn.1结构中协议版本前向兼容的方法 |
CN102332018A (zh) * | 2011-09-21 | 2012-01-25 | 西安理工大学 | 一种Asn.1编码的快速读码方法 |
CN102332018B (zh) * | 2011-09-21 | 2013-10-23 | 西安理工大学 | 一种Asn.1编码的快速读码方法 |
CN102929681A (zh) * | 2012-10-31 | 2013-02-13 | 中国运载火箭技术研究院 | 一种虚拟试验分布式对象模型框架代码自动生成方法 |
CN102929681B (zh) * | 2012-10-31 | 2016-06-01 | 中国运载火箭技术研究院 | 一种虚拟试验分布式对象模型框架代码自动生成方法 |
CN103036877A (zh) * | 2012-12-10 | 2013-04-10 | 北京中创信测科技股份有限公司 | 一种基于tlv格式协议的编解码代码生成装置及方法 |
CN105867991A (zh) * | 2016-03-25 | 2016-08-17 | 苏州简约纳电子有限公司 | 适用于asn.1编译器符号表的转换方法 |
CN105867991B (zh) * | 2016-03-25 | 2019-06-25 | 苏州简约纳电子有限公司 | 适用于asn.1编译器符号表的转换方法 |
CN105843663A (zh) * | 2016-04-18 | 2016-08-10 | 苏州简约纳电子有限公司 | 适用于asn.1递归解析数据结构描述的编解码方法 |
CN105843663B (zh) * | 2016-04-18 | 2019-06-25 | 苏州简约纳电子有限公司 | 适用于asn.1递归解析数据结构描述的编解码方法 |
Also Published As
Publication number | Publication date |
---|---|
CN100579120C (zh) | 2010-01-06 |
WO2007076676A1 (fr) | 2007-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1992715A (zh) | 基于asn.1定义的pdu编解码代码自动生成的实现方法 | |
CN101841515B (zh) | 可变目标的协议数据单元编解码代码自动生成的实现方法 | |
CN1277186C (zh) | 软件接口测试方法 | |
KR100583517B1 (ko) | 소프트웨어 객체와 구조화 언어 요소 기반 문서간의 매핑시스템 및 방법 | |
CN101329665A (zh) | 解析标记语言文档的方法和解析器 | |
CN112511416A (zh) | 基于规则式的数据通信协议转换系统、解码及编码方法 | |
FI115416B (fi) | Rakenteellisen datan jäsennys | |
KR20010078015A (ko) | 데이터 압축 장치, 데이터베이스 시스템, 데이터 통신시스템, 데이터 압축 방법, 기억 매체 및 프로그램 전송장치 | |
CN101202736B (zh) | 一种基于抽象语法标记实现编解码的方法 | |
CN1791119A (zh) | 对移动通信系统信令消息的追踪方法 | |
CN116450616A (zh) | 一种基于解析树的通用异构关系型数据库sql迁移方法 | |
CN101222365B (zh) | 一种类c结构接口报文处理方法 | |
CN111427940B (zh) | 一种自适应数据库转换方法及装置 | |
CN101499015A (zh) | 一种高级语言转换成其它高级语言的方法及转换器 | |
Breuer et al. | A prettier compiler‐compiler: Generating higher‐order parsers in C | |
CN1238834C (zh) | 一种口语识别理解的识别分析方法 | |
de Jonge et al. | Grammars as feature diagrams | |
CN100347706C (zh) | 一种pdf文档到xml文档转换的方法 | |
CN102270223B (zh) | 消息解码库的生成方法、装置及消息解码方法、装置 | |
CN102111160A (zh) | 用于反应式系统测试的编解码系统及其编解码器 | |
CN110839022A (zh) | 一种基于xml语言的车载控制软件通信协议解析方法 | |
CN116521217A (zh) | 一种基于autosar工具快速配置bsw的方法、系统及储存介质 | |
CN115794119A (zh) | 一种案例自动解析方法及装置 | |
CN116755770A (zh) | 一种基于组合模式的icd头文件生成方法 | |
Blackwell | Fast decoding of tagged message formats |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100106 Termination date: 20141231 |
|
EXPY | Termination of patent right or utility model |