專利名稱:一種碼流的解碼方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及直徑(DIAMETER)協(xié)議,尤其涉及一種碼流的解碼方法及系統(tǒng)。
背景技術(shù):
計(jì)費(fèi)系統(tǒng)和策略控制規(guī)則系統(tǒng)是業(yè)務(wù)產(chǎn)品的重要組成部分,目前與計(jì)費(fèi)和策略控制規(guī)則系統(tǒng)交互普遍采用DIAMETER協(xié)議。在業(yè)務(wù)應(yīng)用中,DIAMETER協(xié)議的解碼效率直接影響業(yè)務(wù)產(chǎn)品性能。目前傳統(tǒng)的對(duì)DIAMETER協(xié)議碼流解碼的方式,一般是將二進(jìn)制碼流轉(zhuǎn)換為最終需要的數(shù)據(jù)結(jié)構(gòu),大多為樹型的層次結(jié)構(gòu),最后根據(jù)轉(zhuǎn)換得到的數(shù)據(jù)結(jié)構(gòu)獲取DIAMETER協(xié)議碼流中的信息。
目前是將二進(jìn)制碼流轉(zhuǎn)換為樹型結(jié)構(gòu),而樹形結(jié)構(gòu)的查找比較緩慢。在復(fù)雜多變的業(yè)務(wù)環(huán)境和不同的計(jì)費(fèi)模式下,不能高效快速地從數(shù)據(jù)結(jié)構(gòu)中獲取解碼結(jié)果。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是提供一種碼流的解碼方法及裝置,能夠快速解析DIAMETER協(xié)議數(shù)據(jù)碼流,供上層應(yīng)用調(diào)用。為解決上述技術(shù)問(wèn)題,本發(fā)明的一種碼流的解碼方法,包括接收數(shù)據(jù)碼流,解析得到所述數(shù)據(jù)碼流中的屬性值對(duì)(AVP),為所述AVP構(gòu)造哈希鍵值;對(duì)所述AVP進(jìn)行解碼,將解碼結(jié)果保存到所述哈希表中;對(duì)所述AVP進(jìn)行位置編碼,得到位置編碼信息,將所述位置編碼信息保存到所述哈希表中。進(jìn)一步地,所述為所述AVP構(gòu)造哈希鍵值的步驟包括 獲取所述AVP的碼(CODE)和制造商標(biāo)識(shí)(VENDOR ID),將所述CODE和VENDOR ID作為所述AVP的鑰匙(KEY)信息進(jìn)行保存;判斷所述AVP是否為組類型,如果是,則將所述AVP的KEY信息作為所述哈希鍵值。進(jìn)一步地,如果判斷所述AVP不是組類型,則將所述AVP的KEY信息和該AVP的上一層AVP的哈希鍵值進(jìn)行組合,作為所述AVP的哈希鍵值。進(jìn)一步地,所述對(duì)所述AVP進(jìn)行位置編碼,得到位置編碼信息的步驟包括在所述AVP為組類型時(shí),將所述AVP的位置信息作為所述AVP的位置編碼信息,所述位置信息是所述AVP在同層AVP中的序號(hào)。進(jìn)一步地,在所述AVP不是組類型時(shí),將所述AVP的位置信息與所述AVP的上一層AVP的位置編碼信息進(jìn)行組合,作為所述AVP的位置編碼信息。進(jìn)一步地,所述將編碼結(jié)果保存到所述哈希表中和所述將所述位置編碼信息保存到所述哈希表中的步驟包括
創(chuàng)建保存解碼結(jié)果的解碼鏈表和保存位置編碼信息的位置鏈表,將所述編碼結(jié)果保存在所述解碼鏈表上,將所述位置編碼信息保存在所述位置鏈表上,將所述解碼鏈表和位置鏈表插入到所述哈希表中。進(jìn)一步地,還包括在為所述AVP構(gòu)造哈希鍵值后,在所述哈希表中查找是否存在相同的哈希鍵值,如果不存在,且所述AVP不是組類型,則進(jìn)行所述解碼和位置編碼的操作;如果存在,則獲取所述哈希表中的元素,對(duì)所述AVP進(jìn)行解碼和位置編碼,將解碼結(jié)果和位置編碼信息分別保存在所述解碼鏈表和位置鏈表中。進(jìn)一步地,一種碼流的解碼裝置,包括碼流解析單元、哈希鍵值構(gòu)造單元、解碼單元和位置編碼單元,其中
所述碼流解析單元,用于接收數(shù)據(jù)碼流,解析得到所述數(shù)據(jù)碼流中的屬性值對(duì)(AVP);所述哈希鍵值構(gòu)造單元,用于為所述AVP構(gòu)造哈希鍵值;所述解碼單元,用于對(duì)所述AVP的值進(jìn)行解碼,將解碼結(jié)果保存到所述哈希表中;所述位置編碼單元,用于對(duì)所述AVP進(jìn)行位置編碼,得到位置編碼信息,將所述位置編碼信息保存到所述哈希表中。進(jìn)一步地,所述哈希鍵值構(gòu)造單元是用于獲取所述AVP的碼(CODE)和制造商標(biāo)識(shí)(VENDOR ID),將所述CODE和VENDOR ID作為所述AVP的鑰匙(KEY)信息進(jìn)行保存;判斷所述AVP是否為組類型,如果是,則將所述AVP的KEY信息作為所述哈希鍵值;如果不是,則將所述AVP的KEY信息和該AVP的上一層AVP的哈希鍵值進(jìn)行組合,作為所述AVP的哈希鍵值。進(jìn)一步地,所述位置編碼單元是用于在所述AVP為組類型時(shí),將所述AVP的位置信息作為所述AVP的位置編碼信息,所述位置信息是所述AVP在同層AVP中的序號(hào);在所述AVP不是組類型時(shí),將所述AVP的位置信息與所述AVP的上一層AVP的位置編碼信息進(jìn)行組合,作為所述AVP的位置編碼信息。綜上所述,采用本發(fā)明可以快速的解析DIAMETER數(shù)據(jù)碼流,并且通過(guò)編碼信息唯一地區(qū)分每個(gè)AVP值,為上層應(yīng)用的使用提供了便利。
圖I是本發(fā)明實(shí)施方式的碼流解碼系統(tǒng)的架構(gòu)圖;圖2是本發(fā)明實(shí)施方式的碼流解碼方法的流程圖;圖3是DIAMETER碼流內(nèi)部結(jié)構(gòu)的示意圖;圖4為本發(fā)明實(shí)施方式的碼流解碼裝置的結(jié)構(gòu)圖。
具體實(shí)施例方式本實(shí)施方式提出了一種碼流的解碼方法,對(duì)DIAMETER協(xié)議碼流實(shí)現(xiàn)高效解碼,采用哈希表存儲(chǔ)AVP (Attribute Value Pair,屬性值對(duì))的值,根據(jù)碼流的樹形結(jié)構(gòu)為每個(gè)AVP編碼,確保每個(gè)AVP都有唯一的編碼,并將父節(jié)點(diǎn)信息保存在AVP的編碼中,從而克服了哈希表存儲(chǔ)結(jié)構(gòu)無(wú)法表現(xiàn)出DIAMETER協(xié)議樹形結(jié)構(gòu)的缺點(diǎn),達(dá)到高效解碼的目的。
下面對(duì)本實(shí)施方式進(jìn)行詳細(xì)說(shuō)明。參考圖I和圖2,本實(shí)施方式的對(duì)DIAMETER協(xié)議碼流的解碼步驟,包括步驟201 :接收計(jì)費(fèi)系統(tǒng)和策略控制規(guī)則系統(tǒng)的DIAMETER協(xié)議數(shù)據(jù)碼流,對(duì)DIAMETER協(xié)議數(shù)據(jù)碼流進(jìn)行解析;如圖3所示為DIMAETER數(shù)據(jù)碼流的結(jié)構(gòu),ROOT節(jié)點(diǎn)為第O層,ROOT節(jié)點(diǎn)的子節(jié)點(diǎn)為第I層,ROOT節(jié)點(diǎn)的子節(jié)點(diǎn)的子節(jié)點(diǎn)為第2層,依次類推。步驟202 :判斷解碼是否完成,如果未完成,則執(zhí)行步驟203 ;如果解碼完成,則結(jié)束流程,將解碼結(jié)果發(fā)送給上層系統(tǒng);步驟203 :遍歷DIAMETER數(shù)據(jù)碼流,獲取碼流中的AVP ; 每一個(gè)AVP具有各自的類型、值、CODE (碼)和VENDOR ID (制造商標(biāo)識(shí))等,AVP 的值根據(jù)不同的計(jì)費(fèi)模式和不同的計(jì)費(fèi)場(chǎng)景有所不同,例如,CC-Request-Type這個(gè)AVP,在初始信用請(qǐng)求/應(yīng)答消息的碼流中值為INITIAL_REQUEST,在更新信用控制請(qǐng)求/應(yīng)答消息的碼流中,值為UPDATE_REQUEST,在終止信用控制請(qǐng)求/應(yīng)答消息的碼流中,值為TERMINATI0N_REQUEST。步驟204 :將AVP的CODE (碼)和VENDOR ID (制造商標(biāo)識(shí))組成KEY (鑰匙)信息,作為AVP的標(biāo)識(shí)信息進(jìn)行保存;步驟205 :判斷當(dāng)前AVP的類型是不是已知的類型,如果是已知的類型,則執(zhí)行步驟206 ;不是,則當(dāng)成未知數(shù)據(jù)類型處理,直接執(zhí)行步驟207 ;步驟206 :從基礎(chǔ)哈希表中獲取數(shù)據(jù)類型,并保存AVP的類型信息,執(zhí)行步驟207 ;在基礎(chǔ)哈希表中保存有已知的數(shù)據(jù)類型,可以將AVP的類型與基礎(chǔ)哈希表中的數(shù)據(jù)類型進(jìn)行比較,從而獲知AVP的類型是不是已知的數(shù)據(jù)類型,如果是已知的數(shù)據(jù)類型可以進(jìn)一步獲知當(dāng)前AVP的類型。步驟207 :為AVP構(gòu)造哈希鍵值,并在解碼哈希表中查找是否存在相同的哈希鍵值,若不存在,執(zhí)行步驟208 ;若存在,則執(zhí)行步驟209 ;哈希鍵值作為AVP的唯一標(biāo)識(shí)。步驟208 :在AVP不是GROUP類型時(shí),創(chuàng)建保存解碼結(jié)果的鏈表和位置編碼信息的鏈表,根據(jù)數(shù)據(jù)類型對(duì)AVP進(jìn)行解碼,并對(duì)AVP進(jìn)行位置編碼,將解碼結(jié)果和位置編碼信息分別保存在前面創(chuàng)建的兩個(gè)鏈表上,分別作為解碼鏈表和位置鏈表,插入到哈希表中;在AVP是GROUP (組)類型時(shí),執(zhí)行步驟202。編碼信息用于區(qū)分DIAMETER碼流中存在的多個(gè)相同的AVP,確保每個(gè)AVP都有唯一的位置信息,根據(jù)編碼信息可以確定一個(gè)AVP屬于哪個(gè)GROUP類型的AVP。步驟209 :獲取解碼哈希表中的元素,在AVP不是GROUP(組)類型時(shí),根據(jù)數(shù)據(jù)類型對(duì)AVP進(jìn)行解碼,將AVP的解碼結(jié)果保存在解碼鏈表上,對(duì)AVP進(jìn)行位置編碼,將位置編碼信息保存在該哈希鍵值對(duì)應(yīng)的位置鏈表上;在AVP是GROUP (組)類型時(shí),執(zhí)行步驟202。哈希表中的元素相當(dāng)于數(shù)據(jù)區(qū),包括AVP屬性,保存AVP解碼信息的鏈表,保存AVP位置編碼信息的鏈表。如圖3所示,因?yàn)锳VP是一層一層的包含,GROUP類型的AVP下包含子AVP,因此,GROUP類型的AVP本身不需要解析,而是解析GROUP類型的AVP下的子AVP,故第一個(gè)解析的是最底層的GROUP類型的第一個(gè)子節(jié)點(diǎn),在圖3的例子中,首先解析的是節(jié)點(diǎn)AVP4,因此可以采用堆棧結(jié)構(gòu)保存AVP的哈希鍵值信息,而對(duì)于編碼信息,采用一個(gè)a[10]的數(shù)組,根據(jù)堆棧信息的改變,依次修改數(shù)組a的信息。下面對(duì)為AVP構(gòu)造哈希鍵值的步驟進(jìn)行說(shuō)明。根據(jù)當(dāng)前AVP的KEY信息以及所屬GROUP類型的AVP的KEY信息組成當(dāng)前AVP的哈希鍵值。哈希鍵值具體組合如下假設(shè)當(dāng)前AVP位于第i層,KEY信息為KEY[i],KEY[i]是一個(gè)64位的無(wú)符號(hào)整型,KEY[i]高32位保存VENDOR ID,低32位保存CODE,哈希鍵值為HASHKEY[i]由AVP的KEY信息以及所屬GROUP類型的AVP的哈希鍵值HASHKEY[i-Ι]組成。描述如下HASHKEY[i] = KEY[i], i = I ;
HASHKEY[i] = HASHKEY[i_l]+KEY[i],i > I ;其中,HASHKEY[i-1]是第i層節(jié)點(diǎn)的父節(jié)點(diǎn)(第i_l層)的哈希鍵值信息。這里‘ + ’號(hào)表示將HASHKEY[i-Ι]和KEY[i]當(dāng)成字符串組合起來(lái)。KEY[i]是8個(gè)字節(jié)的字符串,HASHKEY [i-Ι]是8* (i-Ι)個(gè)字節(jié)的字符串,HASHKEY[i]是8*i個(gè)字節(jié)的字符串。下面對(duì)為AVP進(jìn)行位置編碼的步驟進(jìn)行說(shuō)明。 對(duì)AVP進(jìn)行位置編碼,構(gòu)造AVP的編碼信息。AVP的編碼信息由父節(jié)點(diǎn)AVP的編碼信息和在父節(jié)點(diǎn)下的位置信息組成,位置信息是指當(dāng)前AVP在同層AVP節(jié)點(diǎn)中從左到右依次編號(hào)的序號(hào),第一個(gè)節(jié)點(diǎn)為1,然后依次編號(hào)下去。對(duì)于第I層的第j棵子樹節(jié)點(diǎn),其編碼信息為j。對(duì)于第i層(i > I)的AVP節(jié)點(diǎn),假設(shè)該AVP是第i_l層某個(gè)AVP的第j個(gè)子節(jié)A^Sencodeu]表示其編碼信息,parentencode[j]表示其父節(jié)點(diǎn)的編碼信息。具體描述如下ENCODE [j] = j,其中j是第i層第j個(gè)子樹節(jié)點(diǎn),i = I ;ENCODE [j] = PARENTENC0DE[j]+j,其中 j 是第 i_l 層某個(gè) AVP 的第 j 個(gè)子節(jié)點(diǎn),即第i層第j個(gè)節(jié)點(diǎn),i > I。圖4為本實(shí)施方式的碼流的解碼裝置,包括碼流解析單元、哈希鍵值構(gòu)造單元、解碼單元和位置編碼單元,其中碼流解析單元,用于接收數(shù)據(jù)碼流,解析得到數(shù)據(jù)碼流中的屬性值對(duì)(AVP);哈希鍵值構(gòu)造單元,用于為AVP構(gòu)造哈希鍵值;解碼單元,用于對(duì)AVP的值進(jìn)行解碼,將解碼結(jié)果保存到哈希表中;位置編碼單元,用于對(duì)AVP進(jìn)行位置編碼,得到位置編碼信息,將位置編碼信息保存到哈希表中。哈希鍵值構(gòu)造單元是用于獲取AVP的碼(CODE)和制造商標(biāo)識(shí)(VENDOR ID),將CODE和VENDOR ID作為AVP的鑰匙(KEY)信息進(jìn)行保存;判斷AVP是否為組類型,如果是,則將AVP的KEY信息作為哈希鍵值;如果不是,則將AVP的KEY信息和該AVP的上一層AVP的哈希鍵值進(jìn)行組合,作為AVP的哈希鍵值。位置編碼單元是用于在AVP為組類型時(shí),將AVP的位置信息作為AVP的位置編碼信息,位置信息是AVP在同層AVP中的序號(hào);在AVP不是組類型時(shí),將AVP的位置信息與AVP的上一層AVP的位置編碼信息進(jìn)行組合,作為AVP的位置編碼信息。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊、各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們的多個(gè)模塊或者步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上所述僅為本發(fā)明的實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種碼流的解碼方法,包括 接收數(shù)據(jù)碼流,解析得到所述數(shù)據(jù)碼流中的屬性值對(duì)(AVP),為所述AVP構(gòu)造哈希鍵值; 對(duì)所述AVP進(jìn)行解碼,將解碼結(jié)果保存到所述哈希表中; 對(duì)所述AVP進(jìn)行位置編碼,得到位置編碼信息,將所述位置編碼信息保存到所述哈希表中。
2.如權(quán)利要求I所述的方法,其特征在于,所述為所述AVP構(gòu)造哈希鍵值的步驟包括 獲取所述AVP的碼(CODE)和制造商標(biāo)識(shí)(VENDOR ID),將所述CODE和VENDOR ID作為所述AVP的鑰匙(KEY)信息進(jìn)行保存; 判斷所述AVP是否為組類型,如果是,則將所述AVP的KEY信息作為所述哈希鍵值。
3.如權(quán)利要求2所述的方法,其特征在于 如果判斷所述AVP不是組類型,則將所述AVP的KEY信息和該AVP的上一層AVP的哈希鍵值進(jìn)行組合,作為所述AVP的哈希鍵值。
4.如權(quán)利要求3所述的方法,其特征在于,所述對(duì)所述AVP進(jìn)行位置編碼,得到位置編碼信息的步驟包括 在所述AVP為組類型時(shí),將所述AVP的位置信息作為所述AVP的位置編碼信息,所述位置信息是所述AVP在同層AVP中的序號(hào)。
5.如權(quán)利要求4所述的方法,其特征在于 在所述AVP不是組類型時(shí),將所述AVP的位置信息與所述AVP的上一層AVP的位置編碼信息進(jìn)行組合,作為所述AVP的位置編碼信息。
6.如權(quán)利要求I所述的方法,其特征在于,所述將編碼結(jié)果保存到所述哈希表中和所述將所述位置編碼信息保存到所述哈希表中的步驟包括 創(chuàng)建保存解碼結(jié)果的解碼鏈表和保存位置編碼信息的位置鏈表,將所述編碼結(jié)果保存在所述解碼鏈表上,將所述位置編碼信息保存在所述位置鏈表上,將所述解碼鏈表和位置鏈表插入到所述哈希表中。
7.如權(quán)利要求6所述的方法,其特征在于,還包括 在為所述AVP構(gòu)造哈希鍵值后,在所述哈希表中查找是否存在相同的哈希鍵值,如果不存在,且所述AVP不是組類型,則進(jìn)行所述解碼和位置編碼的操作;如果存在,則獲取所述哈希表中的元素,對(duì)所述AVP進(jìn)行解碼和位置編碼,將解碼結(jié)果和位置編碼信息分別保存在所述解碼鏈表和位置鏈表中。
8.一種碼流的解碼裝置,包括碼流解析單元、哈希鍵值構(gòu)造單元、解碼單元和位置編碼單元,其中 所述碼流解析單元,用于接收數(shù)據(jù)碼流,解析得到所述數(shù)據(jù)碼流中的屬性值對(duì)(AVP); 所述哈希鍵值構(gòu)造單元,用于為所述AVP構(gòu)造哈希鍵值; 所述解碼單元,用于對(duì)所述AVP的值進(jìn)行解碼,將解碼結(jié)果保存到所述哈希表中; 所述位置編碼單元,用于對(duì)所述AVP進(jìn)行位置編碼,得到位置編碼信息,將所述位置編碼信息保存到所述哈希表中。
9.如權(quán)利要求8所述的裝置,其特征在于 所述哈希鍵值構(gòu)造單元是用于獲取所述AVP的碼(CODE)和制造商標(biāo)識(shí)(VENDOR ID),將所述CODE和VENDOR ID作為所述AVP的鑰匙(KEY)信息進(jìn)行保存; 判斷所述AVP是否為組類型,如果是,則將所述AVP的KEY信息作為所述哈希鍵值;如果不是,則將所述AVP的KEY信息和該AVP的上一層AVP的哈希鍵值進(jìn)行組合,作為所述AVP的哈希鍵值。
10.如權(quán)利要求8所述的裝置,其特征在于 所述位置編碼單元是用于在所述AVP為組類型時(shí),將所述AVP的位置信息作為所述AVP的位置編碼信息,所述位置信息是所述AVP在同層AVP中的序號(hào);在所述AVP不是組類型時(shí),將所述AVP的位置信息與所述AVP的上一層AVP的位置編碼信息進(jìn)行組合,作為所述AVP的位置編碼信息。
全文摘要
本發(fā)明公開了一種碼流的解碼方法及裝置,包括接收數(shù)據(jù)碼流,解析得到所述數(shù)據(jù)碼流中的屬性值對(duì)(AVP),為AVP構(gòu)造哈希鍵值;對(duì)AVP進(jìn)行解碼,將解碼結(jié)果保存到哈希表中;對(duì)AVP進(jìn)行位置編碼,得到位置編碼信息,將位置編碼信息保存到哈希表中。采用本發(fā)明可以快速的解析DIAMETER數(shù)據(jù)碼流,并且通過(guò)編碼信息唯一地區(qū)分每個(gè)AVP值,為上層應(yīng)用的使用提供了便利。
文檔編號(hào)H04L29/06GK102904862SQ201110213608
公開日2013年1月30日 申請(qǐng)日期2011年7月28日 優(yōu)先權(quán)日2011年7月28日
發(fā)明者白麗娟 申請(qǐng)人:中興通訊股份有限公司