首页> 中国专利> 用抽象语法规则描述的通信协议的实现方法及其装置

用抽象语法规则描述的通信协议的实现方法及其装置

摘要

本发明涉及通信协议的实现技术,公开了一种用抽象语法规则描述的通信协议的实现方法及其装置,使得实现抽象语法规则描述的通信协议,并高效实现协议编解码,此外还支持用户定制数据结构、支持协议规格调整、支持错误检测和处理、支持用户定制操作处理。本发明中,对每种通信协议的抽象语法规则描述都生成相应的专用实现代码和数据结构,直接可以在通信实体上编译或解释运行;按照深度优先的原则遍历语法树,并行处理用户定制信息、生成符合节点间逻辑关系的数据结构和实现代码;事先建立基本数据类型的处理代码库,直接取用以生成简单节点的实现代码。

著录项

  • 公开/公告号CN1859359A

    专利类型发明专利

  • 公开/公告日2006-11-08

    原文格式PDF

  • 申请/专利权人 上海华为技术有限公司;

    申请/专利号CN200510027693.4

  • 发明设计人 金颖;龙纲;李冠臣;

    申请日2005-07-12

  • 分类号H04L29/06(20060101);

  • 代理机构31232 上海明成云知识产权代理有限公司;

  • 代理人竺云

  • 地址 200121 上海市浦东新区宁桥路615号

  • 入库时间 2023-12-17 17:51:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-07-05

    未缴年费专利权终止 IPC(主分类):H04L29/06 授权公告日:20100825 终止日期:20180712 申请日:20050712

    专利权的终止

  • 2010-08-25

    授权

    授权

  • 2007-01-03

    实质审查的生效

    实质审查的生效

  • 2006-11-08

    公开

    公开

说明书

技术领域

本发明涉及通信协议的实现技术,特别涉及用抽象语法规则描述的通信协议的实现方法和装置。

背景技术

通信系统中,不同的实体之间要完成通信必须按照一定通信协议进行。不同通信设备消息的交互也是按照协议规定的消息格式进行的。通信协议的实现是通信系统的关键步骤。对于通信系统中的各个接口都有专用的通信协议,包括其消息的编码方式。同时考虑到传输的效率等问题,大多接口消息都定义了自己的编码方式,发送方按照预先约定的编码规则把消息编成码流,接受方则根据这个编码规则来解码,以此完成消息的交互过程。

通信协议特别是消息的编解码要在通信系统的实体上实现。比如通信设备的对外接口上就要求有一个编解码模块。编解码模块的实现方式可以是软件或硬件。目前由于通信设备的处理能力逐渐增强以及计算机语言描述能力的扩展,一般都在实体上采用软件实现。另外,在通信系统研发和维护工作中,对通信协议及消息编解码的实现也是非常重要的。比如一些要求具有捕获设备接口之间码流的测试仪器就有类似于编解码模块的需求。

为了便于实现和管理,通信协议的描述需要有统一的语言。抽象语法规则语言就是可以用于描述通信协议内容、协议消息结构的语言。该类语言只是抽象地描述协议消息中各信息元素(Information Element,简称“IE”)的逻辑关系、数据类型、赋值方式等。其中“抽象语法规则一”(Abstract SyntaxNotation One,简称“ASN.1”),是一种用于定义两个不同的网络系统之间该如何发送数据的标准语言。ASN.1一般用于描述结构化客体的结构和内容。基于ASN.1的描述可以有许多编解码规则,这些编解码规则即可应用于各类通信接口。

比如基本编码规则(Basic Encoding Rules,简称“BER”)、压缩编码规则(Packed Encoding Rules,简称“PER”)都是由ASN.1定义的一种编解码方法。具体的讲,ASN.1提供了描述抽象文法结构和内容的表示方法,而BER、PER等是描述接口间通信过程中消息是如何编解码的。

在第三代移动通信系统(3rd Generation,简称“3G”),比如宽带码分多址(Wideband Code Division Multiple Access,简称“WCDMA”)移动通信系统中,第三代合作伙伴项目(3rd Generation Partnership Project,简称“3GPP”)标准也采用了ASN.1来描述了各个通信协议的消息结构。其中WCDMA系统基于并规定使用的ASN.1编码规则为PER。因此PER编解码模块的实现就是WCDMA通信设备关键。

ASN.1语言规范规定了变量命名规则、基本数据类型、数据构造方法等。

比如命名规则要求有三条:1)内部类型名和保留字全部大写;2)用户定义的类型名或者模块名第一个字母大写;3)其他标示符(值得名称和字段名称)第一个字母要小写。

而基本数据类型则包括:BOOLEAN,INTEGER,BITSTRING,OCTETSTRING,REAL,ENUMERATED,ANY,OBJECT IDENTIFIER等,其中字符串类型都是OCTETSTRING的子类型,包括:NumericString,PrintableString,TeletexString,VideotexString,IA5String,GraphicString,VisibleString,GeneralString。

基本构造类型有:SEQUENCE指一个或多个组成元素的有序列表,其元素可以是各种类型,也可以是SEQUENCE;SEQUENCE OF则是SEQUENCE的特例,它的组成元素必须是同一个ASN.1类型,类似数组;SET类似于SEQUENCE,区别在于它的组成元素是无序排列的;SET OF和SET的区别类似于SEQUENCE和SEQUENCE OF的区别;CHOICE包含一个可供选择类型的列表。

另外还有模块定义、类型分配与值分配规则,标签等。

目前已经有一些商用工具可以完成从ASN.1的协议描述到通信实体上的实现过程。根据输入的ASN.1协议描述来完成对应的可以完成该通信协议编码解码处理功能,同时提供与协议消息结构对应的数据结构,供高层应用软件使用。

现有的商用工具都是采用通用的方式,就是将ASN.1描述的协议消息结构输入工具,然后在现有处理函数库的基础上,按照协议消息的节点结构,用通用的遍历查询节点并调用处理的代码来应用到实体上,在实体上运行并实现协议消息编解码。

该方法表面上看能够提高协议实现过程的效率,但同时导致诸多问题,比如协议运行时编解码处理效率很低、用户在高层软件无法方便的调用底层数据结构、对于出错信息无法检测和处理、对于协议规格无法适当调整。

现有用于实现ASN.1语言描述的通信协议的技术方法一般是根据这样的原理实现的:首先需要一个处理所有ASN.1基本数据类型的处理函数库,其次需要一个查询协议消息节点结构并调用相关处理函数的通用主程序,最后还需要一个编译转换ASN.1到相关协议消息的数据结构的转换器。在实现给定ASN.1描述的通信协议时,首先用转换器ASN.1通信协议描述转化到通用主程序识别的数据结构,然后将通用主程序和数据结构结合运行在通信实体上,由通用主程序在每次编解码的时候都查询该数据结构并调用处理函数库的来处理每个节点数据、对IE赋值。可见,该方法通信性高,但处理效率收到严重影响,特别是查询数据结构并调用的过程耗费处理资源。

图1示出了现有现有技术方案在转化给定的ASN.1描述的通信协议的流程,可以分为以下步骤:

步骤101,首先用语法分析工具分析ASN.1描述的通信协议,得到语法树等容易由计算机识别的逻辑描述;

步骤102,接着调用转换器,遍历该语法树,并将每个节点建立其相应的数据结构,整个数据结构与协议消息相对应,该数据结构符合通用处理程序的;

步骤103,然后将该数据结构嵌入到通用主程序中,并配合基本处理函数库,在通信实体上允许该通用主程序,通用主程序所需要做的基本操作是与具体协议结构无关的,即遍历数据结构中的每个数据节点,并从基本处理函数库中调用相应类型的处理函数来处理该节点的IE。

可见,现有技术的关键转换器及通用主程序,其中转换器生成了协议消息的结构,是包含IE的类型、逻辑关系等信息的表格。而通用主程序则是在运行通信协议时,通过访问这些表格信息,同时结合库函数来完成编码和解码过程。

这种方案表面上看转化过程主要只在数据结构的生成方面,而主程序则是对所有协议消息都通用的,然而该方法也带来弱点,就是严重影响的编解码的效率。该通用主程序每次编解码都需要查询数据结构、调用库函数,这一查询的过程显然成为了编解码过程的瓶颈。这一问题在3G协议实现中尤为明显,因为3G是比较庞大的协议,比第二代(2nd Generation,简称“2G”)的消息规模大很多也复杂很多,因此这样遍历查询的过程就成为影响编解码消息的主要问题,这在WCDMA协议中显得尤为突出。

处理这一问题,现有商用软件还存在其他不足之处,由于通用主程序是固定的,因此在实现过程中很多因素都无法改变而且也无法添加额外的处理功能。比如无法进行用户定制,无法适当调整协议规格以满足实际需求,无法加入其他代码以检测错误并进行处理,无法完成用户特别需要的操作。其中用户定制也包括对数据结构的定制

在实际应用中,上述方案存在以下问题:现有技术方案所采用的通用处理方式严重影响了实际通信过程中的编解码效率;不支持用户定制数据结构,影响用户开发效率,导致编解码性能降低;无法灵活调整协议规格以适应实际需求;无法完成对编解码错误情况的检测和处理;无法实现用户定制的额外操作处理。

造成这种情况的主要原因在于,现有技术方案采用通用主程序来查询数据结构并调用函数库的方法来完成编解码,这给编解码过程添加了耗用处理资源的查询调用步骤,严重影响了编解码效率;

现有技术方案采用固定的转化器来生成数据结构,无法按照用户定制的需求建立数据结构,不支持用户定制数据结构,无法灵活调整协议规格如数据规模,且用户需求与数据结构的不匹配将导致赋值出错,进而影响编解码效率;

现有技术方案采用固定的通用主程序进行编解码,无法添加额外的代码,以完成用户定制操作处理,或者进行错误检测和处理等。

发明内容

有鉴于此,本发明的主要目的在于提供一种用抽象语法规则描述的通信协议的实现方法及其装置,使得实现抽象语法规则描述的通信协议,并高效实现协议编解码,此外还支持用户定制数据结构、支持协议规格调整、支持错误检测和处理、支持用户定制操作处理。

为实现上述目的,本发明提供了一种用抽象语法规则描述的通信协议的实现方法,包含步骤,

分析用所述抽象语法规则描述的所述通信协议,生成语法树和协议消息结构,还包含步骤,

遍历所述语法树的所有节点,生成节点对应的实现代码;

在通信实体中,编译或解释执行所述实现代码,实现所述通信协议。

其中,包含以下子步骤,

A根据用户定制信息,遍历所述语法树的所有节点,将节点与其对应的所述用户定制信息相关联;

B遍历所述语法树的所有节点,根据节点关联的所述用户定制信息生成节点的数据结构,用于实现用户定制的节点数据的存储表示;

C遍历所述语法树的所有节点,根据节点关联的所述用户定制信息生成节点的实现代码,用于实现对所述数据结构的编解码处理和所述用户定制信息要求的操作。

此外,所述步骤A进一步包含以下子步骤,

A1访问所述语法树,在所述用户定制信息中查询与当前节点相关的描述,进入步骤A2;

A2按照所述用户定制信息的描述,在当前节点做标记,进入步骤A3;

A3判断所述语法树是否遍历完毕,如果是则终止流程,否则返回所述步骤A1继续遍历下一节点。

此外,所述步骤B进一步包含以下子步骤,

B1访问所述语法树,判断当前节点是否标记有所述用户定制信息的数据结构要求,如果是,则进入步骤B2,否则进入步骤B3;

B2按照所述用户定制信息的数据结构要求,建立所述数据结构,使其命名规范、数据类型、数据规格符合所述数据结构要求,进入步骤B4;

B3按照默认设置,建立所述数据结构,进入步骤B4;

B4判断所述语法树是否遍历完毕,如果是则终止流程,否则返回所述步骤B1继续遍历下一节点。

此外,所述步骤B2或B3中,如果当前节点包含子节点,则建立所述数据结构,包含其所有子节点的数据结构。

所述步骤C中遍历所述语法树的所有节点的算法为深度优先遍历算法,可以进一步包含以下子步骤,

C1访问所述语法树,生成当前节点的编解码处理代码,用于完成所述数据结构的编解码,进入步骤C2;

C2判断当前节点是否标记有所述用户定制信息的操作处理要求,如果是,则进入步骤C3,否则进入步骤C4;

C3按照所述用户定制信息的操作处理要求,生成当前节点的用户定制操作代码,用于完成所述用户定制操作处理要求,然后进入步骤C4;

C4判断当前节点是否包含子节点,如果是,进入步骤C5,否则进入步骤C6;

C5添加待处理子节点的编解码函数的调用入口,并返回步骤C1进入该子节点的处理流程;

C6生成本节点编解码代码并进入步骤C7;

C7判断当前节点是否有父节点,如果是则退出到其父节点的处理流程的步骤C8继续执行,否则终止;

C8判断是否遍历处理完所有子节点,如果是则进入步骤C7,否则返回步骤C5继续处理下一子节点。

此外,所述步骤C1中,从基本数据结构处理代码库中,取用与当前节点数据结构的相应的代码,作为所述编解码处理代码。

此外,所述步骤C3中生成的所述用户定制操作代码用于实现针对特定数据值的定制操作或通信错误检测与处理。

此外,所述步骤C3中生成的所述用户定制操作代码直接嵌入当前节点的实现代码中。

此外,所述步骤C3中生成的所述用户定制操作代码独立于当前节点的实现代码,而在该实现代码中嵌入所述用户定制操作代码的调用入口。

此外,所述步骤A、B、C串行执行,先执行所述步骤A,再执行所述步骤B,最后执行所述步骤C。

此外,所述步骤A、B、C并行执行,所述步骤A、B、C同步遍历所述语法树的所有节点。

此外,所述抽象语法规则为“抽象语法规则一”语言。

此外,所述通信协议为宽带码分多址第三代移动通信系统(WCDMA)的通信协议。

本发明还提供了一种用抽象语法规则描述的通信协议的实现装置,包含以下模块,

用户定制信息预处理模块,用于遍历所述通信协议对应的语法树的所有节点,将节点与其对应的用户定制信息相关联;

数据结构生成模块,用于遍历所述语法树的所有节点,根据节点关联的所述用户定制信息生成节点的数据结构;

代码生成模块,用于遍历所述语法树的所有节点,根据节点关联的所述用户定制信息生成节点的实现代码。

其中,所述代码生成模块还包含以下子模块,

编解码处理代码生成模块,用于生成编解码处理代码;

用户定制操作代码生成模块,用于生成用户定制操作代码。

通过比较可以发现,本发明的技术方案与现有技术的主要区别在于,对每种通信协议的抽象语法规则描述都生成相应的专用实现代码和数据结构,直接可以在通信实体上编译或解释运行;

按照深度优先的原则遍历语法树,并行处理用户定制信息、生成符合节点间逻辑关系的数据结构和实现代码;

事先建立基本数据类型的处理代码库,直接取用以生成简单节点的实现代码;

结合用户定制信息生成数据结构,按照用户要求进行数据结构命名、限制数据尺寸、确定数据类型;

结合用户定制信息生成实现代码,按照用户要求添加额外操作处理代码,实现错误检测和处理、用户定制特殊操作;

单独生成用户定制操作的函数,并将函数调用入口嵌入实现代码,完成用户定制操作。

这种技术方案上的区别,带来了较为明显的有益效果,即专用代码的运行避免了现有技术方案中查询调用的步骤,大大提高编解码效率;

遍历语法树并行处理提高本发明的生成代码过程的效率;

按用户要求进行数据结构命名、限制数据尺寸、确定数据类型,方便了用户继续开发,提高了系统资源利用率;

按用户要求实现错误检测和处理、用户定制特殊操作,提高了系统性能;

单独生成用户定制操作的函数完成用户定制操作,提高了实现代码的稳定性和可扩展性。

附图说明

图1是现有技术方案的实现ASN.1描述的通信协议的流程图;

图2是根据本发明的第一实施例的用抽象语法规则描述的通信协议的实现方法流程图;

图3是根据本发明的第一实施例的一条WCDMA通信协议消息的语法树示意图;

图4是根据本发明的第四实施例的用抽象语法规则描述的通信协议的实现方法中步骤204的子流程图;

图5是根据本发明的第八实施例的用抽象语法规则描述的通信协议的实现装置示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。

为了解决现有技术方案的编解码效率瓶颈问题,本发明从一个新的角度出发,放弃用于编解码的代码的通用性,开发抽象语法规则到可实现的高级语言代码的转换器,并结合用户定制信息的处理,按照用户定制信息从抽象语法规则描述的通信协议生成符合要求的数据结构、专用实现代码,同时所述转换器保留了通用性,不仅可以通过专用实现代码来保证协议消息编解码的高效实现,而且由转换器的通用性确保了抽象语法规则到实现代码的转换可行性。

本发明通过将遍历语法树的高耗费步骤搬到编解码之前的转换过程中,即先由转换器遍历语法树生成专用实现代码,该实现代码与具体的通信协议相关,而且可以在实体上编译或解释运行,直接完成编解码,而不再需要对数据结构的遍历及对函数库的调用。从而大大提高编解码效率。

而专用实现代码的生成则需要一个通用的生成方法和一个基本数据结构处理代码库,该生成方法遍历语法树时将处理代码库中的基本代码填入专用实现代码中,整个过程都保留了通用性,使得自动完成专用实现代码的生成成为可行。

另外,还通过融合用户定制信息到转换步骤中,实现了按照用户定制信息来生成数据结构和实现代码。这样生成的数据结构符合用户要求,有利于用户高层应用开发,也提高了用户与底层的兼容性,也符合实际应用要求,灵活调整数据规格以节约系统资源。这样生成的实现代码可以按照用户要求加入额外操作代码,从而可以实现诸如错误检测与处理、用户定制操作处理等。

本发明的第一实施例中针对抽象语法规则语言描述的通信协议进行四个步骤的操作实现通信协议。下面结合图2详细介绍每一步骤的具体操作。

首先在步骤201中,用语法解析工具来分析抽象语法规则描述的通信协议,生成协议消息对应的语法树或者其他协议消息结构。要实现ASN.1的通信协议,首先要识别ASN.1语法,因此从ASN.1语言到语法树等逻辑描述是必须的,现有的技术方案也采用了。使用ASN.1语法解析工具把协议消息分解,比如可以使用类似“yacc”的解析工具来完成语法识别。一般语法分析以后就可以得到一颗语法树,有了语法树之后就可以通过遍历语法树来对协议消息进行有序处理,比如生成相应的实现代码、数据结构等。

接着在步骤202中,根据用户定制信息,遍历语法树的所有节点,将节点与其对应的所述用户定制信息相关联。本发明引入的用户定制信息的融合,用户可以定制代码生成中的许多方面,比如数据规格、额外操作等。而定制信息比然是针对具体的节点或者IE的,因此需要首先将用户定制信息结合到相关的语法树的节点上,这样遍历处理的同时即可方便参照用户定制信息进行。

在步骤203中,遍历语法树的所有节点,根据节点关联的用户定制信息生成节点的数据结构,用于实现节点数据的存储表示。每个节点都是一个IE,对于简单的节点就是包含一种基本类型的IE,而复杂的节点包含多个IE,比如前述ASN.1描述的各种数据构造方法,可以是同类型数组、不同类型数组等。因此必须要对消息建立数据结构,对应于消息中的每个IE,这样可以在编解码及协议高层应用中方便地存储和表示协议消息。在生成数据结构的同时,需要考虑到用户定制对数据结构的要求,比如可以是对命名规范的要求、数据类型的要求、以及数据规格尺寸的要求。这样的用户定制数据结构能够实现的一个好处是,用户在使用数据结构或高层应用与底层混合开发的时候能够方便的按照相同的规范进行,提高开发效率。另外,数据结构规格尺寸的调整也使得协议根据符合实际需求,提高资源利用率。

在步骤204中,遍历所述语法树的所有节点,根据节点关联的用户定制信息生成节点的实现代码,用于实现对所述数据结构的处理和所述用户定制信息要求的操作。生成数据结构的同时还要生成实现代码,所谓实现代码就是专用的实现本协议的可直接使用的高级语言代码。比如可以对PER通信协议生成专门用于处理PER编解码的C语言代码,这些代码即可通过编译在通信设备上运行,从而实现PER通信协议。实现代码包括本身处理数据结构的处理代码即编解码的赋值、取值等操作,还包括额外代码即实现用户定制需求的,比如错误检测、额外操作等。专用的实现代码摈弃了现有技术方案中通用代码的缺点,即可以直接运行,而无需在每次编解码的时候都需一边查询数据结构一边调用库函数。另外由于代码是专门生成的,因此可以根据用户定制需求添加额外代码或者更改处理方式,完成一些高效的处理,提高编解码及整个通信系统的效率。

最后在步骤205中,生成数据结构及专用实现代码之后,即可在通信实体中编译或解释执行实现代码,进行通信协议编解码操作。

为了跟生动的描述本发明的工作机制,下面以WCDMA系统中的协议消息为例说明处理方法,比如通信协议消息结构的ASN.1描述如下:

CN-DomainIdentity::=    ENUMERATED{

                                 cs-domain,

                                 ps-domain}

PagingRecordTypeID::=   ENUMERATED{

                                 imsi-GS M-MAP

                                 tmsi-GSM-MAP-P-TMSI,

                                 imsi-DS-41,

                                 tmsi-DS-41}

PagingCause::=          ENUMERATED{

                                 terminatingConversationalCall,

                                 terminatingStreamingCall,

                                 terminatingInteractiveCall,

                                 terminatingBackgroundCall,

                                 terminatingHighPrioritySignalling,

                                 terminatingLowPrioritySignalling,

                                 terminatingCauseUnknown,

                                 spare}

PagingType2::=SEQUENCE{

   -User equipment IEs

     rrc-TransactionIdentifier   INTEGER(0..3),

     pagingCause                 PagingCause,

   -Core network IEs

      cn-DomainIdentity          CN-DomainIdentity,

      pagingRecordTypeID         PagingRecordTypeID,

      laterNonCriticalExtensions SEQUENCE{

           -Container for additional R99 extensions

           pagingType2-r3-add-ext    BIT STRING    OPTIONAL,

           nonCriticalExtensions    SEQUENCE{}     OPTIONAL

      }    OPTIONAL

}

用语法解析工具对上面这一段ASN.1语言解析以后,就可以得到如图3所示的这样一个语法树。图中每个节点有两个指针,左指针指向下一级节点即子节点,右节点指向下一同级节点即兄弟节点,这样所有兄弟节点就连成一条链。可以看出其中,rrc-TransactinonIdentifier为简单类型(Integer),没有子节点;pagingCause,Cn-DomainIdentity,PagingRecordTypeID,也为简单类型(ENUM),所包含的枚举变量没有利用子节点的形式表达,而是采用了数组的形式表达;laterNonCriticalExtensions为结构类型(Sequence),其成员采用了子节点的方式表达。

首先与现有技术方案的实现方法进行比较,比如对于消息PagingType2,每个IE都有不同的属性,包括是否可选,是否有扩展等等。这样现有技术方案就要生成一个表格来描述消息包含的IE,以及各个IE的类型和属性。然后将通用主程序运行在实体上,当编码开始时,通用主程序先遍历到这个IE的属性表格,再根据IE的类型,是否可选,值域大小,等等来决定如何编码,而对于SEQUENCE类型的IE,则需要遍历到下一层IE,来完成编码过程。对于每个IE则通过调用基本函数库来处理。其解码过程也类似,显然,现有技术方案的遍历调用过程的开销很大。

而本发明则是通过首先遍历语法树并生成专用代码,然后直接编译运行来实现的,避免每次运行都需要遍历数据结构,从而提高编解码的效率,当然本发明并没有因此而丢失通用性,因为所采用的生成实现代码的方法仍然是通用的。同样对于上面这个实际应用的例子,本发明的方法在遍历语法树的时候,当遍历到PagingType2消息时,直接生成其下所有IE的编解码函数。比如最终生成的高级语言代码可以是这样的程序结构:

PaingType2_Encode()

{

     rrc-TransactionIdentifier_Encode();

     pagingCause_Encode();

     cn-DomainIdentity_Encode();

     pagingRecordTypeID_Encode();

     laterNonCriticalExtensions_Sequence_Encode();

}

解码的代码也类似。该程序结构简单高效,其中按照语法树的结构嵌套了各个子节点的处理函数。当然每个子节点的处理函数还会生成相应的具体实现代码。这样的专用代码编译后直接运行,而不需要再次遍历数据结构的节点就可以完成编解码过程。

在本发明的第一实施例的实际应用中,在公共信道测量报告代码中使用了这样的专用代码来完成编解码,并与原来使用的现有技术方案的商用工具的编解码进行了比较,结果证明本发明的方法使得公共测量报告编码时间减少到1/8,编码效率大大提高。

本发明的第二实施例,在第一实施例的基础上,步骤202是按如下子步骤实现的:接收用户定制信息的输入,并遍历访问语法树,对于当前节点在用户定制信息中查询与当前节点相关的描述;然后按照该描述,在当前节点做标记;判断语法树是否遍历完毕,如果是则终止,否则继续遍历下一节点。本发明进行转换前需要输入的是语法树结构和用户定制信息,其中语法树结构是用户使用的ASN.1描述的数据结构的对应语法树结构,用户定制信息则包含了用户对于生成的用户直接使用的数据结构和编解码代码的对应特殊需求信息,比如前述对于命名规范、错误处理等要求。

本发明的第三实施例,在第一实施例的基础上,步骤203是按如下子步骤实现的:

首先,遍历访问所述语法树,判断当前节点是否标记有用户定制信息的数据结构要求;

如果是,则按照用户定制信息的数据结构要求,建立数据结构,使其命名规范、数据类型、数据规格符合所述数据结构要求;

否则,按照默认设置,建立数据结构;

最后,判断语法树是否遍历完毕,如果是则终止,否则返回继续遍历下一节点。

由于节点可能包含子节点,如果当前节点包含子节点,在建立数据结构时,还包含其所有子节点的数据结构,具体实现时可以采用递归嵌套的方式进行。

这里对于每个节点的处理都要考虑用户定制信息,用户定制信息对于数据结果的需求主要是针对变量命名规范、数据类型和尺寸等。

比如,上述例子中ASN.1变量为rrc-TransactionIdentifier,但是用户可能要求在直接使用的数据结构中对应的结构名可以变为rrc-TransID,这样便于用户在基于底层的开发时直接使用,这对于采用同样的高级语言进行开发的用户是非常方便的。

或者对于数据规格的要求,协议本身关于ASN.1文本的数组结构描述由于考虑到以后的升级,往往限制会比较宽松,而用户基于自己考虑可能会要求进行更严格的限制,以节省资源。比如协议上描述一个数组最多可以有65535个元素,但是用户往往不可能支持那么元素,可能会要求数据结构限制为最多只可以有15个元素。这样用户通过在定制信息中描述该要求即可灵活调整数据规格,以符合实际需求,大大节省系统资源。

本发明的第四实施例,在第一实施例的基础上,步骤204中对于语法树的遍历采用深度优先遍历的算法实现,而深度优先遍历又可以按前序、中序和后序进行,下面给出前序的实现流程。图4示出了该流程的详细步骤,其中包含了嵌套结构。

首先在步骤401中,访问语法树,生成当前节点的编解码处理代码,用于对数据结构编解码,并进入步骤402。这里对于节点的处理分为复杂节点和简单节点,即如果这是最低下的节点没有子节点,则直接生成该节点的处理代码,即用于对数据进行赋值取值等正常操作的代码。如果还若干子节点,则用该子节点的函数调用组成当前节点的处理代码,而其子节点的处理函数则在嵌套处理子节点的同时进行。

在步骤402中,判断当前节点是否标记有用户定制信息的操作处理要求,如果是,则进入步骤403,否则进入步骤404。

在步骤403中,按照用户定制信息的操作处理要求,生成当前节点的用户定制操作代码,用于完成用户规定的操作处理要求,然后进入步骤404。但对于该节点用户有定制需求时,则应该生成额外的代码。

在步骤404中,判断当前节点是否包含子节点,如果是,则进入步骤405,否则进入步骤406。如果当前节点包含子节点,则按照深度优先的编辑规则应该进入子节点将子节点的处理代码生成。

在步骤405中,添加当前待处理子节点的编解码函数的调用入口,并嵌套进入该子节点的处理流程,即返回步骤401处理当前子节点,生成其编解码函数。这一步是嵌套结构的嵌入点。

在步骤406中,判断当前节点是否有父节点,如果是则退出到其父节点的处理流程的步骤407继续执行,否则终止。当前子节点处理完毕,则应该返回到父节点继续处理,如果没有父节点说明已经是根节点,说明整棵树遍历完毕可以终止流程。

在步骤407中,判断是否遍历完所有子节点,如果是则返回步骤406,否则返回步骤405继续遍历下一个子节点。处理玩当前子节点后还需要下一子节点。

上面的流程按照深度优先遍历了语法树,顺便也生成了符合逻辑关系的实现代码。其中代码最基本的步骤就是对于简单数据类型代码的生成。比如对于Integer类型的IE如何进行赋值和取值等编解码操作,本发明采用从基本数据结构处理代码库中取用与当前节点数据结构的相应的代码作为编解码处理代码的方法实现这一基本步骤。事实上,每个基本类型的操作是固定的,因此可以实现建立这一基本类型操作代码库,这样生成代码非常高效,而且具有保留通用性。

这里用户定制的操作处理要求可以是对于变量特殊情况的检测、对于错误的检测和处理、特殊的操作等。用户可能要求对于某个特殊的ASN.1描述的变量在产生的代码中作特殊处理,比如当rrc-TransactionIdentifier解码值为5时告警或其他操作。或者用户还有其他特殊处理要求,例如在限制数据规格后,当编码时发现要求在限制元素个数为15的数组中编入超过15个元素时希望能告警并停止编码,当解码时发现待解码流中该数组包含的元素个数大于15,希望对于超出部分要做特殊处理。这类特殊处理要求的定制可以使得错误处理等步骤结合到编解码处理中,提高系统性能。

比如以上述例子中PagingType2的编码代码生成为例,当遍历到PagingType2节点时,首先会生成函数名,函数名可以根据用户的要求生成,假设用户要求编码函数的函数名就是成员名+ENCODE,则生成的函数名就是PaingType2_Encode,然后生成函数体,通过语法树结构发现PagingType2有4个子节点,则可知PagingType2的编码函数体就应该为四个字节点的编码函数的调用,而四个子节点的函数名是根据用户需求自动生成的,因此得到整个函数体。而如果遍历到cn-DomainIdentity时,根据语法树节点可知其没有子节点并且ASN.1类型属性为ENUMERATED,而ENUMERATED类型的编码函数是由事先开发建立的,假设其函数名为ENUMERATED_ENCODE,则cn-DomainIdentity的编码函数体内就是函数ENUMERATED_ENCODE的调用,或者直接将代码库中的代码填入该处理函数中。

本发明的第五实施例,在第四实施例的基础上,在步骤403中生成用户定制操作代码时将其直接嵌入当前节点的实现代码中。比如当用户定制要求是判断解码出的IE值是否满足特殊条件时,假设遍历到cn-DomainIdentity节点时,编解码代码模块生成了编解码函数调用,如果查询用户定制信息时,发现要求当cn-DomainIdentity大于最大之时告警,遍在打印完函数调用后直接打印判断语句及告警处理语句,即得到如下结构:

        cn-DomainIdentity_Encode()

        {

           ENUMERATED_ENCODE();

           IF(cn-DomainIdentity大于MAX)

           {

               //告警处理语句

           }

         }

本发明的第六实施例,在第四实施例的基础上,在步骤403中生成用户定制操作代码时,所述用户定制操作代码独立于当前节点的实现代码,而在该实现代码中嵌入所述用户定制操作代码的调用入口。对于用户而言,编解码的过程对其是不可见,他并不关心具体过程,因此为了保证编解码的稳定,工具生成的代码一般而言是尽量不进行手工修改。但是用户的有些特殊需求是与编解码流程无关的但是却会不断变动这就会不断地对生成的的编解码文件进行手工修改,引入了出现问题的可能,于是本发明的第五实施例可以把这部分特殊处理代码生成到另一个独立的文件,这样用户可以在该文件上进行修改而不必对编解码主体文件的修改,保证了编解码的稳定。例如用户对cn-DomainIdentity的不同值会有不同操作,当cn-DomainIdentity解码后值为cs-domain时需要进行额外操作,则生成代码如下

        cn-DomainIdentity_Encode()

        {

           ENUMERATED_ENCODE();

           cn-DomainIdentity_special();

        }

这里cn-DomainIdentity_special()即为特殊代码函数的调用入口,该函数的处理代码单独写在其他文件中,如下:

        cn-DomainIdentity special()

         {

           IF(cn-DomainIdentity值为cs-domain)

           {

               //用户定制操作

           }

         }

这样,如果以后用户要求更换操作,或者要增加cn-DomainIdentity值为ps-domain的操作,则只要在上述cn-DomainIdentity_special()函数文件中修改即可。该方法使得用户定制操作修改方便,保证代码稳定性,同时为用户特殊处理操作预留接口。

用户定制操作代码还可以时对于出错问题的检测和处理,以根据协议特定的需要加入解码出错以后的特殊处理或者根据通信设备制造商的需要加入规格控制,把这部分功能集成到编解码,在编码和解码的同时完成,而不需要在编解码完成以后再遍历消息,同样可以提高效率。例如将兼容性代码移入解码过程代码中以后,这样检查时不用再调用其他函数,实验证明通过集成错误处理机制到编解码中,可以使得系统效率提高60%。

本发明的第七实施例,在第一实施例的基础上,将步骤202、203、204并行执行,即三个步骤同步遍历所述语法树的所有节点。由于这三个步骤都要遍历依次语法树,因此可以一起遍历,每遍历一个节点即完成三个步骤的操作,然后继续遍历,这样下来一次遍历即完成三个步骤的操作,而不需执行三次遍历,大大提高代码生成的效率。

熟悉本领域的技术人员可以理解,用于描述通信协议的不限于ASN.1,可以是其他抽象语法规则语言描述通信协议,所述通信协议不限于WCDMA的PER编解码规则,可以是其他通信系统的通信协议,同样可以实现发明目的而不影响本发明的实质和范围。

在本发明的第八实施例中,对于每个处理步骤都由相应的模块封装,包含用户定制信息预处理模块、数据结构生成模块、代码生成模块,其中代码生成模块还包含编解码处理代码生成模块和用户定制操作代码生成模块,这些模块即组成本发明的实现装置。图5示出了实现装置的各个模块及处理流程。

首先需要输入通信协议的语法树结构以及用户定制信息到用户定制信息预处理模块503,它要做以下几步操作:读入语法树节点信息,并与用户信息对比,判断是否有用户定制信息对该节点有要求,如有则标记该节点,如无则直接跳过该节点,读入下一个节点。

然后,由数据结构生成模块进行处理,读入树结点信息,根据用户要求,生成该节点的数据结构。生成的数据结构与ASN.1描述的数据结构应该是一一对应的关系。ASN.1描述的数据结构是分为复杂结构和简单结构两种,复杂结构即为该结构包含子结构,而简单结构即为结构不再包含子结构并且已有确定定义和协议规定的相应编码方式。数据结构的生成以用户的要求为主,在用户输入的定制信息已经明确了数据结构的命名方式,每一种ASN.1类型在实际生成语言中采用何种类型来对应。因为数据结构是用户最终要直接使用的,这样的设计可以使得用户得到能最大限度满足其使用需求的数据结构。

然后,由代码生成模块处理,代码生成模块需要生成两种代码,因此分别由子模块编解码处理代码生成模块和用户定制操作代码生成模块完成。

其中编解码处理代码生成模块,读入树节点信息,根据用户要求,生成编码和解码过程的代码。生成的代码结构与ASN.1描述的数据结构应该是一一对应的关系。对应复杂结构的生成的代码就是该结构所包含的子结构的编解码函数的调用。对于简单类型结构而言,协议对于其编码方式已经有了确定的描述,即直接取用事先建立的基本类型处理代码库中的代码。

而用户定制操作代码生成模块,按照用户提出的特殊要求,以及通信协议对于解码的检查错误要求,添加额外处理代码。例如用户定制信息中包含了对于超规格的元素要使用其他结构来保存,那么就要生成相应的处理函数,并把此函数的调用写入解码代码中。还例如在通信协议的ASN.1描述中,对一个特定的IE虽然ASN1描述了取值范围,但是协议基于其他考虑对于该IE还设定了一个协议范围,协议范围要小于ASN.1描述中的取值范围,协议要求在解码时发现IE解码值大于协议范围,但是小于ASN1取值范围时,虽然解码正确,但是要作为错误记录。那么当用户定制操作代码生成模块遍历到这个特定IE的语法树结点就会在解码代码中生成告警语句。

最终三个模块输出为数据结构、编解码处理代码和用户定制操作代码。

事实上,上述用户定制信息预处理模块、数据结构生成模块和代码生成模块是一个有机整体,共同属于实现模块化结构,而且这三个的具体操作步骤也可以是并行处理,即同步遍历语法树,对每个节点同时进行操作。

虽然通过参照本发明的某些优选实施例,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号