一种在通讯网络中实现编解码的方法

文档序号:7965361阅读:686来源:国知局
专利名称:一种在通讯网络中实现编解码的方法
技术领域
-
本发明涉及数据通信技术领域,特别是涉及一种网络通讯系统中实现信 息传递时的编解码的方法。
背景技术
-
ASN. 1 (Abstract Syntax Notation One抽象语法标记)是一种独立于机 器的描述语言,用于描述在网络上传递的消息,特别是广泛应用于移动网络 通讯系统中的各种协议的传输。例如RANAP (Radio Access Network Application Part无线接入网络应用部分)协议、MAP (Mobile A卯lication Part移动应用部分)协议、H.248协议等。ASN. 1的编码方式能够快速并可靠 的传输可扩展信息一一这是无线带宽的一个优势。由于从1982年以后ASN. 1 已经成为一个国际标准,所以它的编码规则是成熟的并且它有长期的可靠性 和互用性的跟踪记录。ASN.l的数据类型包括1、简单数据类型是ASN.l 中规定的不包含子结构的数据类型,例如Integer, Boolean, Bit String (比 特串类型)等;2、结构数据类型是ASN. 1中规定的包含子结构的数据类型, 例如Sequence (序列类型),Set (集合类型),Choice (选择类型)等。
然而,ASN. 1编解码是一个很费时费工的工作,目前多数的ASN. l编解码 方式是针对协议的,需要对于不同的协议以及不同的消息内容编写不同的编 解码程序,当协议发生改变时,编解码程序也必须进行相应的修改,不同版 本协议的编解码程序也存在较大的区别,这些都增加了编写编解码程序员的 工作量以及程序出错的几率。
已公开中国专利申请用于抽象语法表示法高层应用的编解码方法(公开 号1635763A,申请号200310104144.3)也提供了一种通用的编解码方法, 编码过程如下根据高层应用协议基于ASN. 1的数据类型和关系,构建编码 格式串,利用格式串生成相应空值的二叉树结构,然后根据需要参照应用的操作编码定义向结构中插值,最后遍历二叉树生成二进制信息流数据;解码 过程如下根据编码格式串生成收到ASN.l编码信息的二叉树数据结构,然 后根据二叉树的遍历的反向过程解码,并把数据赋给数据结构中,业务逻辑 再通过二叉树的节点査询来取得数据信息。但该方法的信息编码格式串的定 义方法未加说明及应用层使用数据时需要查询二叉树才能获取数据,致使应 用层使用复杂,不方便。

发明内容
本发明的目的就是利用词法语法分析工具,提供一种针对结构的统一编解 码方法,解决上述现有技术中存在的技术问题。本发明的方法适用于所有通 讯网络中需要进行编解码的协议。
为了达到上述目的,本发明提供以下技术方案 一种在通讯网络中实现编解码的方法,包括以下步骤
A、 数据结构的定义根据分析工具的要求和协议的描述,定义出协议中 消息的结构,编码时由应用层填写结构中的数据,而解码时由编解码模块填 写结构中的数据;
B、 结构信息的生成利用分析工具分析定义的结构,分析出消息中结构及 参数的属性并记录到文件中,以供编解码模块调用;
C、 编解码的调度获取参数的信息,根据获得的信息进行数据结构的拆 分和数值填写以及将结构数据类型分解成简单数据类型进行编解码;
D、 简单类型的编解码根据调度模块的调用进行简单数据类型的编解码。 本发明与现有技术相比具有以下特点
本方法根据协议语法,针对不同的协议,定义应用层使用的头文件(即协 议中消息的结构)。用分析工具来读取头文件,生成编解码需要的结构及参数 信息。编解码模块根据这些信息以及通过信息获取的结构中参数地址和值进 行编解码,编解码模块仅针对协议中的基本数据类型进行编解码,大幅降低 程序开发维护的工作量以及难度。
程序员只需针对不同协议定义不同的数据结构,不必编写针对不同协议的 不同编解码程序,所以本发明能够简单,快捷实现协议的编解码。
在编码方式不改变的情况下,当协议发生改变或协议升级版本时,无需重 新编写编解码的程序,只需修改根据协议定义的数据结构的头文件,使得它 更加灵活和具有扩展性。
根据协议定义的数据结构的头文件是按照协议来定义的,并根据协议的语 法注释数据的属性,使得头文件更具可读性。
统一的编解码接口,编解码模块对外只提供两个接口函数(编码函数和解 码函数),使得应用层不必关心编解码的内部实现机制。为程序的开发,升级 提供了方便。
应用层使用数据时,只需从结构中获取数据或向结构中赋值,简化了应用 层的使用。


图1是词法语法分析工具的原理图2是ASN. 1编解码的工作原理图3是ASN. 1数据类型定义示意图4是消息的结构信息存储方式示意图5是消息的结构信息存储内容示意图6是编解码调度示意图7是编码的流程图8是解码的流程图。
具体实施例方式
以下结合附图详细说明本发明的具体实施方式
。本实施例中使用的协议语
法为ASN. 1。
图1为词法语法分析工具的原理图,包含了正则表达式的词法语法规则作 为其输入的程序,并且为每一个词法表达式被匹配时定义一种动作。用于通知语法规则,当语法规则被匹配时,根据定义的动作产生所需的数据。编译 器根据词法语法规则生成分析工具。
分析工具指定根据协议定义的头文件作为它的输入,并根据语法规则的分析过程,记录结构属性和ASN.l属性,并产生特定格式的输出文件,即以 树形格式(图4)存储分析出的结构的参数属性和ASN.l属性(图5)。
图2是ASN. 1编解码的工作流程图。
步骤201:数据结构的定义,根据协议的ASN. 1语法定义结构头文件(即数 据结构)。
步骤202:结构信息的生成,用分析工具分析结构头文件,产生结构信息 数据。
步骤203:编解码的调度,应用层向编解码模块传入待编码结构或ASN.l 码流的数据,编解码的调度模块通过结构信息获得结构中的参数和参数的 ASN. 1属性并将结构类型拆分成简单类型。
步骤204:简单类型的编解码,根据ASN. 1简单数据类型的编码方式进行编 解码。
图3展示了 ASN. 1数据类型同编程语言数据类型的对应关系,其中
Sequence, Set, Choice类型对应为包含表示子参数是否被填写的标志位 (一个参数占一个Bit)和子参数的结构;
SequenceOf , SetOf类型对应为包含表示选用的数组个数的标志位(数组 的最大维数)和子参数数组的结构;
OCTET STRING, NUMBER STRING, PRINT STRING. .等字符串类型对应为包含使用字节数和字符串值的结构;
BIT STRING字符串类型对应为包含使用字节数,未使用比特数和字符串值 的结构;
除上述的ASN. 1数据类型以外的其他的ASN. 1数据类型(如Integer)对应 为编程语言相应的数据类型(如整型)。
图4展示了结构信息存储的方式,以一种树形结构的方式存储结构信息, 根节点作为消息的主结构。包含消息的所有参数,其参数可以为简单编码类 型,也可为结构编码类型。结构编码类型应包含指向它的子结构的指针。
图5展示了结构信息存储的内容
a. 变量类型,起始地址,变量名称,占用字节,变量数量,指向子结构 的指针等结构中参数自身的信息。
b. ASN. l标签,赋值范围,ASN. l类型,结构编码或简单编码,可选/必 选,显式/隐式等ASN.l规定的属性。
图6是编解码调度示意图,展示了编解码调度模块如何将结构进行拆分以 及结构内容的填写调度模块从参数信息中获取的参数的起始地址等于 0,占用字节为4,变量名为A1,编码时就能在结构的内存中取得A1地址并 在结构的Al参数信息中获得Al的ASN. 1属性。
编码时,调度模块根据参数的起始地址,大小,变量名等信息就能在结构 的内存中获取相应的值100,并连同ASN. 1属性一起传入简单类型编解码的编 码模块即可获得标准的ASN. 1码流。
解码时,将参数的ASN. 1属性和ASN. 1码流传入简单类型编解码的解码模 块,解出数据值100,再根据其起始地址和大小,变量名等信息,将数据填入 结构中。
图7是编码的流程图,编码过程包括以下步骤
步骤701:应用层对结构进行赋值,调用编码接口函数(主要输入参数包 括消息操作码,协议中消息结构的指针)进行编码过程;
步骤702:编解码模块获取消息结构信息,为编码过程进行消息的编码提 供参数的详细信息;
步骤703:根据消息结构信息获取结构中第一个参数的信息;
步骤704:根据参数的信息在结构的内存中获取参数的值;
步骤705:根据获取参数的值判断参数填写是否正确(包括参数是否填写,范围是否正确等);
步骤706:错误时进行出错处理,输出错误信息; 步骤707:判断参数是简单类型还是结构类型;
步骤708:如果是结构类型,则进行递归调用,进入结构类型的子类型, 返回步骤703,进行子类型的编码过程;
步骤709:若是简单类型,则根据ASN. 1的编码规则进行简单类型的编码; 步骤710:拼接编码产生的码流;
步骤711:判断结构是否结束(即是否是最后一个参数);
步骤712:若结构未结束则获取下一个参数,返回步骤703,进行下一个参数的编码,直至结构结束。若结构结束则返回编码的码流。
图8是解码的流程图。解编码过程包括以下步骤 步骤801:应用层将ASN. l码流传入解码接口函数; 步骤802:编解码模块获取消息结构信息; 步骤803:根据消息结构信息获取结构中参数的ASN. 1属性; 步骤804:根据参数属性解析出码流中包含的信息和值; 步骤805:判断参数为简单类型还是结构类型;
步骤806:如果是结构类型则进行递归调用,进入结构类型的子类型,返 回步骤803,进行子类型的解码过程;
步骤807:若为简单类型则获取参数在结构内存中的地址信息。 步骤808:向结构中赋值,将解出的码流写入到结构中的相应地址中; 步骤809:判断码流是否为码流结尾;
步骤810:若没有结束则进行下一个参数的解码,返回步骤803,直至码流结束。然后,返回结构的内容。
以上公开的仅为本发明的一个具体实施例,但是本发明并非局限于此,任 何本领域的技术人员能思之的变化,都应落在本发明的保护范围内。
权利要求
1、一种在通讯网络中实现编解码的方法,其特征在于包括以下步骤(A)、数据结构的定义根据分析工具的要求和协议的描述,定义出协议中消息的结构,编码时由应用层填写结构中的数据,而解码时由编解码模块填写结构中的数据;(B)、结构信息的生成利用分析工具分析定义的结构,分析出结构及参数信息并记录到文件中,以供编解码模块调用;(C)、编解码的调度获取结构及参数信息,根据获得的信息进行数据结构的拆分和数值填写以及将结构数据类型分解成简单数据类型进行编解码;(D)、简单类型的编解码根据调度模块的调用进行简单数据类型的编解码。
2、 根据权利要求1所述实现编解码的方法,其特征在于所述结构及参数 信息是以一种树形结构的方式存储,根节点作为消息的主结构。
3、 根据权利要求1或2所述的实现编解码的方法,其特征在于所述结构 信息包含消息的所有参数,其参数可以为简单编码类型,也可为结构编码类 型。
4、 根据权利要求1所述的实现编解码的方法,其特征在于所述结构及参数信息存储的内容至少包括结构中参数自身的信息变量类型,起始地址,变量名称,占用字节,变量数量,指向子结构的指针;协议规定的属性标签,赋值范围,协议的数据类型,结构编码或简单 编码,可选/必选,显式/隐式。
5、根据权利要求1所述的实现编解码的方法,其特征在于所述步骤(C) 进一步还包括所述调度模块从参数信息中获取的参数的起始地址,占用字节,变量名, 编码时就能在结构的内存中取得变量地址并在结构的变量参数信息中获得变 量的属性;编码时,调度模块根据参数的起始地址,大小,变量名等信息就能在结构 的内存中获取相应的数值,并连同属性一起传入简单类型编解码的编码模块 即可获得标准的协议码流;解码时,将参数的属性和协议码流传入简单类型编解码的解码模块,解析 出数值,再根据其起始地址和大小,变量名等信息,将数据填入结构中。
6、 根据权利要求1所述的实现编解码的方法,其特征在于所述步骤(D) 的编码过程进一步包括应用层对结构进行赋值,调用编码接口函数;编解码模块获取消息中结构 及参数信息,为编码过程进行消息的编码提供详细信息;根据结构及参数信 息获取结构中第一个参数的信息;根据参数的信息在结构的内存中获取参数 的值;根据获取参数的值判断参数填写是否正确;错误时进行出错处理,输 出错误信息;判断参数是简单类型还是结构类型;如果是结构类型,则进行 递归调用,进入结构类型的子类型,进行子类型的编码过程;若是简单类型, 则根据协议的编码规则进行简单类型的编码;拼接编码产生的码流;若结构 结束则返回编码的码流。
7、 根据权利要求1所述的实现编解码的方法,其特征在于所述步骤(D) 的解编码过程进一步包括应用层将接收的码流传入解码接口函数;编解码模块获取消息中结构及参 数信息;根据结构及参数信息获取结构中参数的属性;根据参数属性解析出 码流中包含的信息和值;判断参数为简单类型还是结构类型;如果是结构类 型则进行递归调用,进入结构类型的子类型,进行子类型的解码过程;若为 简单类型则获取参数在结构内存中的地址信息;向结构中赋值,将解出的码 流写入到结构中的相应地址中;直至码流结束,返回结构的内容。
全文摘要
本发明涉及一种在通讯网络中实现编解码的方法,包括(A)数据结构的定义根据分析工具的要求和协议的描述,定义出协议中消息的结构,编码时由应用层填写结构中的数据,而解码时由编解码模块填写结构中的数据;(B)结构信息的生成利用分析工具分析定义的结构,分析出结构及参数属性并记录到文件中,以供编解码模块调用;(C)编解码的调度获取参数的信息,根据获得的信息进行数据结构的拆分和数值填写以及将结构数据类型分解成简单数据类型进行编解码;(D)简单类型的编解码根据调度模块的调用进行简单数据类型的编解码。该方法仅对简单数据类型进行编解码,能够大幅降低程序开发维护的工作量以及难度。
文档编号H04L29/06GK101202736SQ20061010515
公开日2008年6月18日 申请日期2006年12月13日 优先权日2006年12月13日
发明者余宏钊, 段保平, 龙 赖 申请人:西安大唐电信有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1