CN101001160A - 一种编码方法和编码器 - Google Patents
一种编码方法和编码器 Download PDFInfo
- Publication number
- CN101001160A CN101001160A CN 200610170448 CN200610170448A CN101001160A CN 101001160 A CN101001160 A CN 101001160A CN 200610170448 CN200610170448 CN 200610170448 CN 200610170448 A CN200610170448 A CN 200610170448A CN 101001160 A CN101001160 A CN 101001160A
- Authority
- CN
- China
- Prior art keywords
- record
- node
- avp
- length
- father
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种编码方法,该方法包括:根据要编码的计费信息,确定对应的叶子节点属性值AVP;在数据库中构建包括叶子节点AVP的树型结构,并利用一组记录表示该树型结构;将数据库中表示树型结构的一组记录按先后顺序构成数组结构体;根据外部输入的消息头信息编码形成消息头,再根据数组结构体的每条记录编码形成消息体,并构成diameter消息后发送出去。应用上述方法后,一方面在对其中的记录进行编码时,只要一次扫描就可以完成编码,提高了编码速度,另一方面序列型数组结构体方便树型结构进行扩展,可以针对不同业务进行灵活的编码处理。本发明实施例还公开了一种编码器。
Description
技术领域
本发明涉及通信业务的计费技术,具体涉及一种编码方法和编码器。
背景技术
自网络诞生以来,认证、鉴权以及计费体制(AAA)就成为其运营的基础。网络中各类资源的使用,需要由认证、鉴权和计费进行管理。原有的主流AAA协议有RADIUS(Remote AuthenticationDial-in User Service)和TACACS+(Terminal Access Con-troller Access Control System Plus)两种,其中以RADIUS的应用为多。但随着网络技术的发展和应用需求的增长,Diameter协议已取代上述两种协议成为下一代的AAA协议标准。
直径(diameter)协议支持移动IP、NAS请求和移动代理的认证、鉴权和计费工作,协议的实现和RADIUS类似,也是采用属性值(AVP)来实现,另外其中详细规定了错误处理,failover机制,采用传输控制协议(TCP),支持分布式计费,克服了RADIUS的许多缺点,是最适合未来移动通信系统的AAA协议。
根据RFC3588协议规定,在diameter协议格式消息中,携带的与计费相关的信息全部保存在基本单位AVP中。每个AVP由AVPcode(AVP的唯一识别码),length(AVP的长度),value(AVP的值即计费信息、业务信息等)这三个部分组成,其中AVP有的是复合结构,有的是单一结构,如果是复合型结构的AVP,则这个AVP的value里面又包含有很多个AVP,如果是单一结构的AVP,则这个AVP的value包含有计费信息、业务信息等。图1是一个复合型结构的AVP示意图,它由很多单一结构的AVP构成。如图1所示,以其中阴影表示的根到叶子节点的路径组合为例,000、001和002均是根AVP,301是叶子节点AVP,001、101和202均是叶子节点301的父亲节点AVP(GROUP类型AVP),其中,202为叶子节点301的直接父亲节点,(001,101,202,301)构成一条根到叶子节点的AVP路径组合,001、(001,101)和(001,101,202)构成一条根到父亲节点的AVP路径组合,每一种路径组合称为一条记录。
根据diameter协议,计费完毕后将把计费后的结果信息编码成二进制码流树型结构传往外部网元。该过程称为编码操作。在进行diameter编码时,首先要针对计费后的结果信息建立对应的树型结构AVP,再将其编码为目标二进制码流。
传统的编码方式一般是用递归加链表索引的方式来动态的构造二进制diameter码流的层次关系和树型结构,在从前相对固定的计费方式中该方法得到的了广泛的应用。但随着运营商提供的业务日益丰富,计费信息的层次关系也更加复杂多样,因此为了能够处理各种不同的业务,现有技术要完成构造的树型AVP的这个目标,也就不可避免的需要不断的深化递归和嵌套链表,造成编码速度变慢,而且不方便进行灵活配置。比如对于某一种计费业务当前是一种树型结构、以后是另一种树型结构的情况,现有技术难以进行高效处理,即使通过深化递归以及链表能够做到比较灵活的处理,但也会使得编码速度变慢,性能消耗很大。
发明内容
有鉴于此,本发明实施例提供一种diameter消息的编码方法,能够提高diameter编码的性能。
本发明实施例还提供一种diameter消息的编码器,应用该编码器能够提高diameter编码的性能。
为实现上述目的,本发明实施例采用如下的技术方案:
一种编码方法,该方法包括:
a、根据要编码的计费信息,确定对应的叶子节点属性值AVP;
b、在数据库中构建包括叶子节点AVP的树型结构,并利用一组代表根到节点路径组合的记录表示该树型结构;
c、将数据库中表示树型结构的一组记录按先后顺序构成数组结构体,在该数组结构体中,每条记录包括该记录对应的AVP数组、AVP数组中最外层AVP节点对应的长度和值,并计算每个代表根到父亲节点路径组合的记录中的长度;
d、根据外部输入的消息头信息编码形成diameter消息头,再根据数组结构体的每条记录编码形成diamter消息体,并构成直diameter消息后发送出去。
一种diameter消息的编码器,该编码器包括:数据配置单元、数据库和编码单元,其中,
所述数据配置单元,用于根据要编码的计费信息,确定对应的叶子节点属性值AVP;在所述数据库中构建包括叶子节点AVP的树型结构,并利用一组代表根到节点路径组合的记录表示该树型结构;将所述数据库中表示树型结构的一组记录按先后顺序构成数组结构体,在该数组结构体中,每条记录包括该记录对应的AVP数组、AVP数组中最外层AVP节点对应的长度和值,并计算每个代表根到父亲节点路径组合的记录中的长度,并将构造的数组结构体发送给所述编码单元;
所述数据库,用于保存代表根到节点路径组合的记录;
所述编码单元,用于接收外部输入的消息头信息,并将其编码形成消息头,还用于接收所述数据配置单元发送的数组结构体形成消息体,并构成diameter消息后发送出去。
由上述技术方案可见,本发明实施例中,首先根据要编码的计费信息,确定对应的叶子节点AVP,然后在数据库中灵活配置各条记录,并将要编码的一组记录构成序列型数组结构体,以方便外部使用方扩展AVP树型结构的层次关系;进而根据数组结构体的每条记录编码形成diameter消息体,与消息头一同构成diameter消息后发送出去。由于树型结构是采用序列型数组结构体表示,一方面在对其中的记录进行编码时,只要一次扫描就可以完成编码,提高了编码速度,另一方面序列型数组结构体方便树型结构进行扩展和修改,可以针对不同业务进行灵活的编码处理。总之,应用本实施例中的方法对diameter消息进行编码,大大提高了编码性能。
附图说明
图1是复合型结构的AVP示意图。
图2为本发明实施例中提供的diameter消息编码方法的总体流程图。
图3为本发明实施例的diameter消息编码方法的具体流程图。
图4为TLV+HASH的序列型数组结构体的具体构成图。
图5为树型结构示意图。
图6为diameter消息编码器的具体结构图。
具体实施方式
为使本发明实施例的目的、技术手段和优点更加清楚明白,以下结合附图对本发明实施例作进一步详细说明。
本发明实施例的基本思想是:针对目前业务计费场景经常发生变化的情况,设计一种序列型的数组结构体来表示要编码的树型结构,以方便对树型结构的扩展和修改,同时,由于该数组结构体的特殊构造,使得在编码时能够通过一次扫描完成编码。
图2为本发明实施例中提供的diameter消息编码方法的总体流程图。如图2所示,该方法包括:
步骤201,根据要编码的计费信息,确定对应的叶子节点AVP。
步骤202,根据业务场景,在数据库中构建包括叶子节点AVP的树型结构,并利用一组代表根到节点路径组合的记录表示该树型结构。
步骤203,将数据库中表示树型结构的一组记录按先后顺序构成数组结构体,在该数组结构体中,每条记录包括该记录对应的AVP节点数组、AVP节点数组中最外层AVP节点对应的长度和值,并计算每条记录中的长度。
步骤204,根据外部输入的消息头信息编码形成diameter消息头,再根据数组结构体的每条记录编码形成diameter消息体,并构成diameter消息后发送出去。
通过上述步骤可见,本发明实施例中,首先对数据库中的数据配置进行了改变,并基于数据库中的数据配置,采用特殊算法,通过一次循环扫描完成编码操作。这样即将计费服务器中保存的相应计费信息编码成二进制的diameter码流消息发送给外部网元,进行进一步的统计和处理。
下面通过一个具体的实施例说明本发明实施例的具体实施方式。图3为本发明实施例的diameter消息编码方法的具体流程图。如图3所示,该方法包括:
步骤301:从数据源中选取需要被编码的计费信息。
在目前的某种计费系统中,利用TLV+HASH作为存储AVP的一种方式,TLV+HASH是一种便于计费的链表结构体,也是该计费系统中diameter消息解码后在内存中形成的缓存数据结构。具体的构成如图4所示。该计费系统内部标识计费元素的标签称为TAG。本实施例中,计费信息即对应了一组TAG标签。每个TAG对应长度和值。
本步骤中,假设目前经过CBS系统的计费运算分析,认为有TAG1,TAG2,TAG3,TAG4,TAG5,TAG6需要被编码出去。
步骤302:根据计费信息确定相应的叶子节点AVP。
本步骤中,在TLV+HASH获取需要编码的TAG与AVP的对应关系为
TAG1 AVP13
TAG2 AVP14
TAG3 AVP16
TAG4 AVP17
TAG5 AVP23
TAG6 AVP24
步骤303:根据这些叶子节点AVP,反向构建它们隶属的逐级父亲节点,并规定这些父亲节点的长度为0。
根据上面步骤302的TAG与AVP的对应关系,先根据TAG获取相应的长度和值,再在数据库中配置TAG对应的叶子节点AVP以及通过TAG获取的长度和值。
配置完这些TAG对应的叶子节点AVP后,再扩充和完善这些叶子节点AVP的层次关系,也即配置它们前驱的所有父亲节点AVP,组成完整的树型结构。其中,配置树型结构的过程可按照RFC3588协议进行配置。将该树型结构以一组记录的形式存储在数据库中,表1即为在数据库中保存的以记录形式存储的树型结构。具体地,将树型结构中每个根到节点的路径组合作为一条记录进行存储,每条记录包括一个AVPcode数组、AVP数组中最外层节点的长度和值。记录分为两类,一类是代表根到父亲节点的路径组合,另一类是代表根到叶子节点的路径组合。在表1中,(父)表示该记录代表根到父亲节点的路径组合,其余的记录代表根到叶子节点的路径组合。如表1所示,记录2包括AVP数组(11 12),还包括节点12的长度和值。记录2代表根到父亲节点12的路径组合,由于节点12是父亲节点,因此该记录的长度为0。
Avpcode数组 | length | value | |
记录1 | 11(父) | 0 | 0 |
记录2 | 11 12 (父) | 0 | 0 |
记录3 | 11 12 13 | Length3 | Value3 |
记录4 | 11 12 14 | Length4 | Value4 |
记录5 | 11 15(父) | 0 | 0 |
记录6 | 11 15 16 | Length6 | Value6 |
记录7 | 11 15 17 | Length7 | Value7 |
记录8 | 11 12 (父) | 0 | 0 |
记录9 | 11 12 23 | Length9 | Value9 |
记录10 | 11 12 24 | Length10 | Value10 |
表1
在进行父亲节点AVP的配置时,可以根据不同的业务场景自由配置。某些叶子节点AVP具有相同的父亲节点,因此它们可以紧密配置在一起,并且配置在紧随其相同父亲节点的后面。
以表1中叶子节点13,14为例予以说明:由于13,14都是隶属于同一个前驱父亲,因此它们被配置在了同一个树型结构里面,同时13,14这两个叶子节点AVP又有两个前驱父亲,分别是11和(11 12),因此叶子节点13,14将在数据库中被主动构造为如图5所示的树型结构。并且,在表1所示的数据库表中的存储位置上,13、14节点被紧密配置在一起,且配置在紧随其父亲节点11和12之后的位置上。
在上述配置的数据库中,每条记录还对应一个层号,表示该记录中AVP数组所包含的AVP个数。
经过步骤301-303完成了数据库中的数据配置,即依据不同的业务场景在数据库表中构造树型结构的AVP,并且可以根据需要,自由任意组合树型结构的AVP。接下来进行数组结构体的构造。
步骤304:明确编码前格式转化在数据库中的索引编号。
步骤305:根据数据库中的索引编号在数据库中找到相应的计费信息对应的记录集合。
在数据库中,索引编号对应一组记录,每个记录均包括了对应的AVP数组和TAG。
步骤306:将步骤305中选定记录集合中的相关信息按照记录的条数和记录的先后顺序采取循环的方式直接插入一个数组结构体中。
在本步骤中,依照记录的先后顺序依次处理每条记录,将查表格式转化为序列表示的数组结构体。具体的数组结构体关键字段的逻辑结构如下:
Struct
{
Avpcode,
Length,
value
}array[100]
在上述数组结构体中,所有的记录集合构成整个数组结构体。在本步骤的执行过程中,对于每条记录的处理方式相同。下面以其中一条记录的处理为例,说明具体的循环处理每一条记录的时候的处理方式。
步骤306a:将当前记录对应的AVP数组,直接插入数组结构体中与该记录相关的Avpcode字段中。
步骤306b:根据该记录中的tag,查询TLV+hash链表,获取相应的value,length,将该value和length直接挂到数组结构体中与该记录对应元素的相关字段中。
通过这一步的查表格式转化形成了如下的数组结构体,它的平铺展开如表2所示。
Avpcode数组 | length | value |
11(父) | 0 | 0 |
11 12 (父) | 0 | 0 |
11 12 13 | Length3 | Value3 |
11 12 14 | Length4 | Value4 |
11 15(父) | 0 | 0 |
11 15 16 | Length6 | Value6 |
11 15 17 | Length7 | Value7 |
11 12 (父) | 0 | 0 |
11 12 23 | Length9 | Value9 |
11 12 24 | Length10 | Value10 |
表2
在表2所示的数组结构体中,AVP数组中最外层节点为叶子节点的,其元素中的长度和值字段填写的内容是TLV+hash链表中直接获取的tag对应的长度和值,而AVP数组中最外层节点为父亲节点的,是为了体现叶子的归属层次,其元素中的长度和值字段填写的内容是0,表示这些记录是在数据库中虚拟构造出来的。
步骤307:计算数组结构体中父亲节点的长度。
由于步骤307只统计了叶子节点的长度,而父亲节点是表中配置的虚拟信息,没有长度,因此必须累计父亲节点的长度。在上述记录中,除对应AVP数组、TAG外,每条记录还对应一个层号,该层号表示该记录中AVP数组所包含的AVP个数。在统计父亲节点长度时,就需要使用记录对应的层号进行长度累加。
为了优化性能,本步骤中采取的是在一次循环中按照记录的先后顺序累计完所有父亲节点长度的策略。下面介绍累计父亲节点长度的详细过程,包括:
步骤307a,将所述一组记录中的第一条记录作为当前记录。
步骤307b,根据当前记录是否换层累加父亲节点的长度。
所谓记录换层是指,当前记录中对应AVP数组包含的AVP个数与上一条记录中对应AVP数组包含的AVP个数不同。
如表1中,记录5包括2个AVP,记录4包括3个AVP,因此记录5和记录4的关系,就称之为换层。
预先设置父亲节点长度数组,保存每个代表根到父亲节点路径组合的记录中的长度。
当记录没有换层时,(1)若当前记录代表的路径组合为根到父亲节点的路径组合,则执行以下操作:
判断当前记录以前是否有前驱的父亲节点,如果有则将当前记录的AVP数组中最外层avp节点的长度予以累加到之前所有遍历完的前驱父亲节点在父亲节点长度数组中相应的元素中。以上图中的记录2为例,在其之前存在前驱父亲节点11,那么此时,前驱父亲节点11的长度=父亲节点11的原长度+父亲节点(11 12)的长度。
(2):若当前记录代表的路径组合为根到叶子节点的路径组合,则将当前记录的AVP数组中最外层avp节点的长度累加到比当前记录层号小的记录在父亲节点长度数组中的相应元素中去,累加的同时需要保证avp的4字节对齐。以上图中的记录4为例,则在其之前,存在前驱的父亲节点11和12,那么,此时前驱父亲节点11的长度=父亲节点11的原长度+Lenth4,前驱父亲节点12的长度=父亲节点12的原长度+Lenth4。
当记录发生换层时,步骤307a中预先设置的父亲节点长度数组中各个元素的值,累加到数组结构体中相应记录的AVP数组中最外层AVP节点的长度中。并且在累加后,将父亲节点长度数组予以清空。并执行前述(1)或(2)的操作。
步骤307c,记录当前记录的层数到预设的层号数组中,为访问数组结构体中下一条记录做参考,结束对当前记录的处理。
依照上述步骤307a-307c对所有的记录进行处理后,通过以上累加长度,即完成了父亲节点的长度累加,原来的数组结构体变为表3所示。
Avpcode数组 | length | value |
11(父) | Length1 | 0 |
11 12 (父) | Length2 | 0 |
11 12 13 | Length3 | Value3 |
11 12 14 | Length4 | Value4 |
11 15(父) | Length5 | 0 |
11 15 16 | Length6 | Value6 |
11 15 17 | Length7 | Value7 |
11 12 (父) | Length8 | 0 |
11 12 23 | Length9 | Value9 |
11 12 24 | Length10 | Value10 |
表3
在表3中,Length 1=Length 2+Length 5+Length 8,Length 2=Length 3+Length 4,Length 5=Length 6+Length 7,Length 8=Length 9+Length 10。
通过上述转化和计算,刚才设置的没有长度信息的父亲节点就被设置了正确的长度信息。
至此,将要编码的数据转化为序列型的数组结构体TLV,而序列型的数组结构体TLV是可控的并且也提供了相关接口给外部使用方进行信息协商和交互,因此便于使用方通过这种机制,通过灵活配置来设置各项必须的或者可选的编码基础数据,通过灵活配置来设置各项编码前的校验和检测,通过灵活配置来设置各种容错机制,通过灵活配置来自由地设置前提预定的以及后期的扩展的二进制diameter码流的层次关系和树型结构。
接下来,要根据步骤2形成的数组结构体,转化形成diameter2进制码流格式的消息包。
步骤308:将根据协议要求构建的消息头信息进行处理,然后编码到数据包中去。
本步骤中,具体的处理操作包括:将这个消息头中表明是信任控制请求(CCR)类型的标志位改为信任控制应答(CCA)的标志位,具体可以参见RFC3588协议;然后,将整个消息的长度保存在消息头中。
步骤309:循环读取格式转化后的数组结构体,将其作为消息体编码到数据包中去。
本步骤中,消息体是由很多个avp组装构成的,具体来说,这些avp分为复合型和非复合型
其中,非复合类型avp的结构如下:
AVP={ avpcode length value}
复合类型的avp结构如下:
AVP={ avocode length{AVP,AVP,AVP。。。。}}
在步骤307后形成的数组结构体中,每一条记录对应一个avps数组,以及这个avps数组对应的value,length。如果这个avps数组中只有一个元素,就表示是非复合类型的AVP。
为了提高编码打包的效率,在步骤304-307中已经通过预先配置形成了表3所示的特定格式的数组结构体,该数组结构体是累加完父亲节点后的数组结构体。
利用表3所示的数组结构体,仅仅只需要循环一次即可完成最终的打包过程。这样的编码处理和最终打包的方式将极大提高编码打包的效率。
在每次循环处理的时候,将每个avps数组的最外层的那一个avp提取出来,并进行打包操作便可以形成diameter规定的码流组合形式。
具体地,对于上表中的记录1、2、3、4来说,其对应的avps数组的最外层avp分别为AVP11、AVP12、AVP13和AVP14。
上表中的所有记录形成的二进制码流如下所示:
11L(12L(13LV,14LV)15L(16LV,17LV)12(23LV,24LV))……
在具体的循环读取数组结构体中每一条记录进行消息体编码过程中需要注意以下几点:
(1)组装avp头时,把当前avps数组对应的value的长度保存在avp头中,并设置avp头的一些控制信息(avp头信息请参见RFC3588协议)
(2)组装avp体时,如果当前节点是叶子节点,则把对应的value编码到数据包;如果当前节点是父亲节点,就不存在value,因此在循环中直接跳过。
至此,本发明实施例中diameter消息的编码方法具体流程结束。本发明实施例还提供了一种diameter消息的编码器,可以用于实施上述方法。图6即为diameter消息编码器的具体结构图。如图6所示,该编码器600包括:数据配置单元601、数据库602和编码单元603。
在该编码器600中,数据配置单元601,用于根据要编码的计费信息,确定对应的叶子节点属性值AVP;根据业务场景,在数据库602中构建包括叶子节点AVP的树型结构,并利用一组代表根到节点路径组合的记录表示该树型结构;将数据库602中表示树型结构的一组记录按先后顺序构成数组结构体,在该数组结构体中,每条记录包括该记录对应的AVP数组、AVP数组中最外层AVP节点对应的长度和值,并计算每个代表根到父亲节点路径组合的记录中的长度,并将构造的数组结构体发送给编码单元603。
数据库602,用于保存代表根到节点路径组合的记录。
编码单元603,用于接收外部输入的消息头信息,并将其编码形成消息头,还用于接收数据配置单元601发送的数组结构体形成消息体,并构成diameter消息后发送出去。
由上述实施例可以看出,本发明实施例中提供的diameter编码方法和编码器能够实现各项参数的灵活配置,并通过高效的一次性扫描完成编码操作。
首先,在数据配置上,由于本发明通过序列型的数组结构体TLV来获取需要编码出去的数据源,而序列型的数组结构体TLV是可控的,并且也提供了相关接口给外部使用方进行信息协商和交互,因此便于使用方通过这种机制,通过灵活配置来设置各项必须的或者可选的编码基础数据,通过灵活配置来设置各项编码前的校验和检测,通过灵活配置来设置各种容错机制,通过灵活配置来自由地设置前提预定的以及后期的扩展的2进制diameter码流的层次关系和树型结构。
其次,在进行编码时,本发明实施例采取的编码策略是,先将需要编码的数据,全部录入到一个数组结构体中,再让这个数组结构体关联通过前期灵活配置动态构造形成的二进制diameter码流的层次关系和树型结构,但是这个时候由于动态构造和扩展的层次关系和树型结构是虚拟的,还有一些必须的参数如父亲节点AVP(GROUP类型AVP)没有被有效分析和设置,因此这里通过一次性扫描,完成这些必须参数的分析和设置,再直接编码成2进制码流,即可完成所有编码步骤,传统的编码方式一般是用递归加链表索引的方式来动态的构造2进制diameter码流的层次关系和树型结构,由于需要编码出去的参数是灵活多样的,传统的编码方式不得不通过增加递归的嵌套和扩充链表的索引关系来进行,因此效率比较低下。而这种编码方式则通过前期的灵活配置,获取了需要编码的基本参数,再通过一次性扫描,完成另一些必须参数的分析设置,就完成了所有编码工作,因此效率很高。
以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1、一种编码方法,其特征在于,该方法包括:
a、根据要编码的计费信息,确定对应的叶子节点属性值AVP;
b、在数据库中构建包括叶子节点AVP的树型结构,并利用一组代表根到节点路径组合的记录表示该树型结构;
c、将数据库中表示树型结构的一组记录按先后顺序构成数组结构体,在该数组结构体中,每条记录包括该记录对应的AVP数组、AVP数组中最外层AVP节点对应的长度和值,并计算每个代表根到父亲节点路径组合的记录中的长度;
d、根据外部输入的消息头信息编码形成diameter消息头,再根据数组结构体的每条记录编码形成diamter消息体,并构成直diameter消息后发送出去。
2、根据权利要求1所述的方法,其特征在于,当计费系统中利用一组计费元素表示计费信息时,所述确定对应的叶子节点属性值AVP包括:从数据源中选取需要被编码的计费信息对应的一组计费元素;根据该组计费元素确定相应的叶子节点AVP。
3、根据权利要求1所述的方法,其特征在于,步骤b中所述在数据库中构建包括叶子节点AVP的树型结构为:根据步骤a中确定的叶子节点AVP和业务场景,逐级构建所述叶子节点AVP的父亲节点。
4、根据权利要求1所述的方法,其特征在于,步骤b中所述利用一组代表根到节点路径组合的记录表示该树型结构为:将树型结构中每个根到节点的路径组合作为一条记录存储在数据库中。
5、根据权利要求1所述的方法,其特征在于,所述构成数组结构体为:
将每条记录作为数组结构体的元素,判断该记录是否代表根到叶子节点的路径组合,若是,则在数据库中查询该记录对应的叶子节点相应的长度和值填入所述数组结构体中该记录对应的长度和值字段中,将该记录对应的AVP数组填入所述数组结构体中该记录对应的AVP数组字段中;否则,在所述数组结构体中该记录对应的长度和值字段填入0,将该记录对应的AVP数组填入所述数组结构体中该记录对应的AVP数组字段中。
6、根据权利要求5所述的方法,其特征在于,
所述记录进一步对应一个表示记录对应的AVP数组中包含的AVP节点个数的层号;
步骤c中所述计算每个代表根到父亲节点路径组合的记录中的长度为:
c1、将所述一组记录中的第一条记录作为当前记录;
c2、根据当前记录的层号以及该记录代表的根到节点的路径组合,累加根到父亲节点路径组合的记录中的长度;
c3、将当前记录的层号保存到预设的层号数组中,并判断当前记录是否为最后一条记录,若是,则执行步骤d,否则将下一条记录作为当前记录返回步骤c1。
7、根据权利要求6所述的方法,其特征在于,在步骤c前预先设置父亲节点长度数组,保存每个代表根到父亲节点路径组合的记录中的长度;
所述步骤c2为:
c21、判断当前记录的层号与所述层号数组中保存的层号是否相同,若是,则执行步骤c22,否则执行步骤c24;
c22、判断当前记录是否代表根到父亲节点的路径组合,若是,则执行步骤c23,否则将当前记录的AVP数组中最外层AVP节点的长度累加到比当前记录层号小的记录在所述父亲节点长度数组中的相应元素中,结束本流程;
c23、判断当前记录以前是否有父亲节点,若是,则将当前记录的AVP数组中最外层AVP节点的长度累加到前面所有父亲节点所在记录在所述父亲节点长度数组中的相应元素中;否则,结束本流程;
c24、将父亲节点长度数组中各个元素的值累加到数组结构体中相应记录的长度中,清空所述父亲节点长度数组中的元素值,并返回步骤c22。
8、根据权利要求1所述的方法,其特征在于,步骤d中所述编码形成消息头包括:
将消息头中表明是信任控制请求CCR类型的标志位改为信任控制应答CCA类型的标志位;
将消息的长度保存在消息头中。
9、根据权利要求1所述的方法,其特征在于,所述编码形成diameter消息体包括:
提取所述数组结构体每条记录的AVP数组中最外层AVP节点及其对应的长度和值,并按照记录的先后顺序进行排列作为diameter消息体。
10、根据权利要求9所述的方法,其特征在于,当所述提取出来的AVP节点为叶子节点时,将该叶子节点代码及其对应的长度和值编码到diameter消息体中;
当所述提取出来的AVP节点为父亲节点时,将该叶子节点及其对应的长度编码到diameter消息体中。
11、一种diameter消息的编码器,其特征在于,该编码器包括:数据配置单元、数据库和编码单元,其中,
所述数据配置单元,用于根据要编码的计费信息,确定对应的叶子节点属性值AVP;在所述数据库中构建包括叶子节点AVP的树型结构,并利用一组代表根到节点路径组合的记录表示该树型结构;将所述数据库中表示树型结构的一组记录按先后顺序构成数组结构体,在该数组结构体中,每条记录包括该记录对应的AVP数组、AVP数组中最外层AVP节点对应的长度和值,并计算每个代表根到父亲节点路径组合的记录中的长度,并将构造的数组结构体发送给所述编码单元;
所述数据库,用于保存代表根到节点路径组合的记录;
所述编码单元,用于接收外部输入的消息头信息,并将其编码形成消息头,还用于接收所述数据配置单元发送的数组结构体形成消息体,并构成diameter消息后发送出去。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101704483A CN100456680C (zh) | 2006-12-30 | 2006-12-30 | 一种编码方法和编码器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101704483A CN100456680C (zh) | 2006-12-30 | 2006-12-30 | 一种编码方法和编码器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101001160A true CN101001160A (zh) | 2007-07-18 |
CN100456680C CN100456680C (zh) | 2009-01-28 |
Family
ID=38692981
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101704483A Expired - Fee Related CN100456680C (zh) | 2006-12-30 | 2006-12-30 | 一种编码方法和编码器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100456680C (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101282228B (zh) * | 2008-03-31 | 2010-11-10 | 华为技术有限公司 | 在线计费的方法、业务控制点、融合计费点和系统 |
WO2011015089A1 (zh) * | 2009-08-06 | 2011-02-10 | 中兴通讯股份有限公司 | 一种自适应编码/解码方法和装置 |
CN101321177B (zh) * | 2008-07-18 | 2011-06-22 | 中兴通讯股份有限公司 | 一种扁平化码流节点及报文的扁平化码流编解码方法 |
CN103813306A (zh) * | 2012-11-08 | 2014-05-21 | 中兴通讯股份有限公司 | 属性携带方法及装置 |
CN116720490A (zh) * | 2023-08-11 | 2023-09-08 | 北京久其金建科技有限公司 | 数据导入方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1496196A1 (de) * | 2003-07-08 | 2005-01-12 | Siemens Aktiengesellschaft | Dampfturbine |
CN100382551C (zh) * | 2003-09-08 | 2008-04-16 | 大唐移动通信设备有限公司 | 一种对通信系统消息进行编解码的方法 |
-
2006
- 2006-12-30 CN CNB2006101704483A patent/CN100456680C/zh not_active Expired - Fee Related
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101282228B (zh) * | 2008-03-31 | 2010-11-10 | 华为技术有限公司 | 在线计费的方法、业务控制点、融合计费点和系统 |
CN101321177B (zh) * | 2008-07-18 | 2011-06-22 | 中兴通讯股份有限公司 | 一种扁平化码流节点及报文的扁平化码流编解码方法 |
WO2011015089A1 (zh) * | 2009-08-06 | 2011-02-10 | 中兴通讯股份有限公司 | 一种自适应编码/解码方法和装置 |
CN101631126B (zh) * | 2009-08-06 | 2012-09-05 | 中兴通讯股份有限公司 | 一种自适应编码/解码方法和装置 |
CN103813306A (zh) * | 2012-11-08 | 2014-05-21 | 中兴通讯股份有限公司 | 属性携带方法及装置 |
CN116720490A (zh) * | 2023-08-11 | 2023-09-08 | 北京久其金建科技有限公司 | 数据导入方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN100456680C (zh) | 2009-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100471121C (zh) | 一种解码方法和解码器 | |
CN103561133B (zh) | 一种ip地址归属信息索引方法及快速查询方法 | |
CN100456680C (zh) | 一种编码方法和编码器 | |
CN104699718A (zh) | 用于快速引入业务数据的方法和装置 | |
CN102664967A (zh) | 跨平台的个人信息交互方法和系统及后台服务器 | |
CN104823428A (zh) | 存储系统中操作请求处理方法和装置 | |
CN111629081A (zh) | 互联网协议ip地址数据处理方法、装置及电子设备 | |
CN104243598A (zh) | 一种信息推荐方法及装置 | |
CN109271562A (zh) | 通行费用确定方法、路网节点关系模型构建方法及装置 | |
CN111737726A (zh) | 基于业务数据区块链的关系数据查询方法及装置 | |
CN101770367A (zh) | .net文件压缩方法和装置 | |
CN105404437B (zh) | 一种信息操作的方法及装置 | |
CN114025027B (zh) | 数据传输脚本的运行方法、装置、存储介质和电子装置 | |
TWI608435B (zh) | A method of using blockchain to realize tax calculation in transaction process | |
CN112241474B (zh) | 信息处理方法、装置和存储介质 | |
CN114064312A (zh) | 一种数据处理系统及模型训练方法 | |
CN107783728A (zh) | 数据存储方法、装置和设备 | |
CN104750815B (zh) | 一种基于HBase的Lob数据的存储方法及装置 | |
US8559929B2 (en) | Resolved mobile code content tracking | |
CN111488349A (zh) | 基于业务数据区块链的数据查询方法及装置 | |
CN111488353A (zh) | 业务数据区块链的智能合约实现方法及装置 | |
CN102469434B (zh) | 计费方法、位置信息分析装置及系统 | |
CN106372973A (zh) | 一种基于多层级关系的渠道商推广效果的统计方法及系统 | |
CN101770627A (zh) | 服务相对信任度评价方法和装置 | |
CN106326470A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090128 Termination date: 20121230 |