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