首页> 中国专利> ASN.1编解码函数自动生成中的数据类型选择方法

ASN.1编解码函数自动生成中的数据类型选择方法

摘要

本发明提供了一种ASN.1编解码函数自动生成中的数据类型选择方法,其包括:分析ASN.1中的抽象数据类型;以及对可编译数据类型进行归一化处理,并将抽象数据类型转换为对应的可编译数据类型。从而,使计算机生成ASN.1消息数据单元的编解码代码变得更加简便,并且对于规范ASN.1抽象数据类型向可编译数据类型的规范转换有重要的意义。

著录项

  • 公开/公告号CN101159743A

    专利类型发明专利

  • 公开/公告日2008-04-09

    原文格式PDF

  • 申请/专利权人 中兴通讯股份有限公司;

    申请/专利号CN200710167308.5

  • 发明设计人 李兴华;聂浅;

    申请日2007-10-22

  • 分类号H04L29/06;H04L29/02;

  • 代理机构北京康信知识产权代理有限责任公司;

  • 代理人尚志峰

  • 地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦

  • 入库时间 2023-12-17 19:58:27

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2010-06-23

    授权

    授权

  • 2008-06-04

    实质审查的生效

    实质审查的生效

  • 2008-04-09

    公开

    公开

说明书

技术领域

本发明涉及通信领域,更具体地,涉及一种对通信协议文件中基于ASN.1(抽象语法标记,Abstract Sybtax Notation One)的消息数据单元进行编解码函数自动生成时,对各种ASN.1抽象数据类型进行数据类型选择的方法。

背景技术

在现代通信领域,随着通信功能的日益强大,很多网络协议已成为一个非常庞大和复杂的软件系统,这个系统中有着许多基于不同编解码规则的编解码过程,比如层3消息编解码以及基于ASN.1定义的消息数据单元的编解码等。这些编解码过程是整个协议软件系统的重要组成部分,并起着极其重要的作用。

目前对于基于ASN.1定义的消息数据单元的编解码代码的实现,可以采用编写自动代码生成工具,并用它自动产生编解码代码的办法。目前的方法有人工分析ASN.1抽象数据类型,并改写成编译器可识别的文件形式再用于自动代码生成工具分析并产生编解码代码;虽然灵活性大,但显然此种方式工作量大,并且人工操作也会带入许多不必要的错误。当采用自动扫描ASN.1文件自动生成编解码函数的方法使用后,就需要制定一个基本的规则来规范ASN.1抽象数据类型向可编译文件转变时数据类型的选择方法。

发明内容

考虑到上述问题而做出本发明,为此,本发明的主要目的在于,提供一种ASN.1编解码函数自动生成中的数据类型选择方法,其包括:

分析ASN.1中的抽象数据类型;以及

对可编译数据类型进行归一化处理,并将抽象数据类型转换为对应的可编译数据类型。

抽象数据类型可包括布尔型、整数型、枚举型、位串型、字节串型、空型、顺序型、顺序型组、和选择型。

抽象数据类型可通过用于基本编码过程的非负二进制整数编码、补码的二进制编码、受限整数的编码、通常小非负整数编码、半受限整数编码、不受限整数编码、和长度编码中的一种或多种进行编码。

可以将抽象数据类型转换为可编译数据类型中的长整型、结构体型、共用型、布尔型、枚举型、以及自定义的UINT8、UINT16、UINT32、INT8、INT16、和INT32等数据类型中的一种,其中,UINT8表示8位无符号整型,UINT16表示16位无符号整型,UINT32表示32位无符号整型,INT8表示8位有符号整型,INT16表示16位有符号整型,以及INT32表示32位有符号整型,以及其中,UINT8、UINT16、UINT32、INT8、INT16、和INT32是为了屏蔽编译器支持过多同意不同名的数据类型所作的归一化处理。

当抽象数据类型是整数时,判断抽象数据是否受限,如果抽象数据是不受限整数则由长整型表示抽象数据,如果抽象数据是受限整数则根据编码所需位数和是否有符号进行表示。

如果抽象数据类型为无符号的整数,且当编码所需位数小于等于8位时由UINT8表示抽象数据类型,当编码所需位数小于等于16位时由UINT16表示抽象数据类型,以及当编码所需位数大于16位时由UINT32表示抽象数据类型。

如果抽象数据类型为有符号的整数,则当编码所需位数小于等于8位时由INT8表示抽象数据类型,当编码所需位数小于等于16位时由INT16表示抽象数据类型,以及当编码所需位数大于16位时由INT32表示抽象数据类型。

如果抽象数据类型为布尔型,则由布尔型的可编译数据类型表示抽象数据类型;如果抽象数据类型为枚举型,则由枚举型的可编译数据类型表示抽象数据类型;如果抽象数据类型为顺序型,则由结构体型的可编译数据类型表示抽象数据类型;以及如果抽象数据类型为选择型,则由共用型的可编译数据类型表示抽象数据类型。

如果抽象数据类型为位串型,则由结构体型的可编译数据类型表示抽象数据类型,其中,结构体中包括一个UNIT8数组和一个表示UNIT8数组大小的变量。

如果抽象数据类型为字节串类型,则由结构体型的可编译数据类型表示抽象数据类型,其中,结构体中包括一个UNIT8数组和一个表示UNIT8数组大小的变量。

如果抽象数据类型为顺序类型组,则由结构体型的可编译数据类型表示抽象数据类型,其中,结构体中包括一个结构体型数组和一个表示数组大小的变量。

通过上述技术方案,实现了ASN.1编解码代码自动生成必不可少的重要一步,可以使计算机生成ASN.1消息数据单元的编解码代码变得更加简便,并且对于规范ASN.1抽象数据类型向可编译数据类型的规范转换有重要的意义。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1示出了根据本发明的ASN.1编解码函数自动生成中的数据类型选择方法的流程图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

参照图1,提供了一种ASN.1编解码函数自动生成中的数据类型选择方法,其包括:

分析ASN.1中的抽象数据类型;以及

对可编译数据类型进行归一化处理,并将抽象数据类型转换为对应的可编译数据类型。

抽象数据类型可包括布尔型、整数型、枚举型、位串型、字节串型、空型、顺序型、顺序型组、和选择型。

抽象数据类型可通过用于基本编码过程的非负二进制整数编码、补码的二进制编码、受限整数的编码、通常小非负整数编码、半受限整数编码、不受限整数编码、和长度编码中的一种或多种进行编码。

可以将抽象数据类型转换为可编译数据类型中的长整型、结构体型、共用型、布尔型、枚举型、以及自定义的UINT8、UINT16、UINT32、INT8、INT16、和INT32等数据类型中的一种,其中,UINT8表示8位无符号整型,UINT16表示16位无符号整型,UINT32表示32位无符号整型,INT8表示8位有符号整型,INT16表示16位有符号整型,以及INT32表示32位有符号整型,以及其中,UINT8、UINT16、UINT32、INT8、INT16、和INT32是为了屏蔽编译器支持过多同意不同名的数据类型所作的归一化处理。

当抽象数据类型是整数时,判断抽象数据是否受限,如果抽象数据是不受限整数则由长整型表示抽象数据,如果抽象数据是受限整数则根据编码所需位数和是否有符号进行表示。

如果抽象数据类型为无符号的整数,则当编码所需位数小于等于8位时由UINT8表示抽象数据类型,当编码所需位数小于等于16位时由UINT16表示抽象数据类型,以及当编码所需位数大于16位时由UINT32表示抽象数据类型。

如果抽象数据类型为有符号的整数,则当编码所需位数小于等于8位时由INT8表示抽象数据类型,当编码所需位数小于等于16位时由INT16表示抽象数据类型,以及当编码所需位数大于16位时由INT32表示抽象数据类型。

如果抽象数据类型为布尔型,则由布尔型的可编译数据类型表示抽象数据类型;如果抽象数据类型为枚举型,则由枚举型的可编译数据类型表示抽象数据类型;如果抽象数据类型为顺序型,则由结构体型的可编译数据类型表示抽象数据类型;以及如果抽象数据类型为选择型,则由共用型的可编译数据类型表示抽象数据类型。

如果抽象数据类型为位串型,则由结构体型的可编译数据类型表示抽象数据类型,其中,结构体中包括一个UNIT8数组和一个表示UNIT8数组大小的变量。

如果抽象数据类型为字节串类型,则由结构体型的可编译数据类型表示抽象数据类型,其中,结构体中包括一个UNIT8数组和一个表示UNIT8数组大小的变量。

如果抽象数据类型为顺序类型组,则由结构体型的可编译数据类型表示抽象数据类型,其中,结构体中包括一个结构体型数组和一个表示数组大小的变量。

下面将更详细的描述本发明。

分析ASN.1抽象数据类型一般会使用到的主要有boolean(布尔类型),integer(整数类型),enumerated(枚举类型),bitstring(位串类型),octetstring(字节串类型),null(空类型),sequence(顺序类型),sequence-of(顺序类型组),choice(选择类型);这些抽象数据类型会使用更基本的编码过程进行编码,这些基本的编码过程主要有Encoding as a non-negative-binary-integer(非负二进制整数编码),Encoding as a 2’s-complement-binary-Integer(补码的二进制编码),Encoding of a constrained whole number(受限整数的编码),Encodingof a normally small non-negative whole number(通常小非负整数编码)。Encoding of a semi-constrained whole number(半受限整数编码),Encoding of an unconstrained whole number(不受限整数编码),General rules for encoding a length determinant(长度编码的一般规则)。

因为一般编译器所支持的数据类型太多容易使代码中数据类型显得凌乱而不易管理,因此需要我们对将要使用的可编译的数据类型做归一化处理,定义UINT8,UINT16,UINT32,INT8,INT16,INT32共6种数据类型,另外再选用LONG,struct,union,bool,enum等可编译数据类型用来转换ASN.1中定义的各种抽象数据类型。

UINT8,UINT16,UINT32三种是无符号类型,可以用于表示无符号受限整数,这三种类型分别占一、二、四个字节。根据ASN.1抽象数据类型中关于受限整数的编码过程可以计算出编码所需要的bit数,当bit数小于等于8时可以使用UINT8表示;当bit数小于等于16时可以使用UINT16表示;其它情况可以使用UINT32表示。

INT8,INT16,INT32三种是有符号类型,可以用于表示有符号的受限整数类型,这三种类型分别占一、二、四个字节。根据ASN.1抽象数据类型中关于受限整数的编码过程可以计算出编码所需要的bit数,当bit数小于等于8时可以使用INT8表示;当bit数小于等于16时可以使用INT16表示;其它情况可以使用INT32表示。

当ASN.1抽象数据类型是不受限时,使用LONG表示,LONG可以根据系统的不同bit数可以有所不同。

常量,根据常量的值是否有符号和值的大小可以确定采用上面提到类型表示。

boolean(布尔类型),按照编译器能识别的布尔类型定义即可。

integer(整数类型),根据ASN.1定义中是否有符号和受限的情况按照上面说明的方式选择表示类型即可。

enumerated(枚举类型),按照编译器能识别的枚举类型定义即可。

bitstring(位串类型),当bitstring的上、下限不相等时表示成一个结构体(struct)的形式,结构体中一项是UINT8数组,另一项是表示UINT8数组大小的变量,UINT8数组的大小是bitstring的bit数除以8的商,如果商不是整数就取整后加1;当上、下限相等时可以直接使用一个UINT8数组表示(也可不放在结构体中),数组大小是bitstring的bit数除以8的商,如果商不是整数就取整后加1。

octetstring(字节串类型),当octetstring的上、下限不相等时表示成一个结构体(struct)的形式,结构体中一项是UINT8数组,另一项是表示UINT8数组大小的变量,UINT8数组的大小等于上限值;当上、下限相等时可以直接使用使用一个UINT8数组表示(也可不放在结构体中),数组大小等于上限值。

null(空类型),在可编译类型中没有可以对应的类型。

sequence(顺序类型),按照编译器能识别的struct类型定义即可。

sequence-of(顺序类型组),根据其含义是结构的数组,表示成一个结构体的形式,结构体中一项是一个结构体的数组,另一项是表示数组大小的变量。

choice(选择类型),定义成union形式即可。

第三.根据上面定义的规则,我们在扫描ASN.1定义的消息数据单元的文件时,就可以按照以上规则方便的产生编译器可识别的各种消息单元结构以及结构内部的各种数据类型。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号