專利名稱:一種在通訊網(wǎng)絡中實現(xiàn)編解碼的方法
技術領域:
-
本發(fā)明涉及數(shù)據(jù)通信技術領域,特別是涉及一種網(wǎng)絡通訊系統(tǒng)中實現(xiàn)信 息傳遞時的編解碼的方法。
背景技術:
-
ASN. 1 (Abstract Syntax Notation One抽象語法標記)是一種獨立于機 器的描述語言,用于描述在網(wǎng)絡上傳遞的消息,特別是廣泛應用于移動網(wǎng)絡 通訊系統(tǒng)中的各種協(xié)議的傳輸。例如RANAP (Radio Access Network Application Part無線接入網(wǎng)絡應用部分)協(xié)議、MAP (Mobile A卯lication Part移動應用部分)協(xié)議、H.248協(xié)議等。ASN. 1的編碼方式能夠快速并可靠 的傳輸可擴展信息一一這是無線帶寬的一個優(yōu)勢。由于從1982年以后ASN. 1 已經(jīng)成為一個國際標準,所以它的編碼規(guī)則是成熟的并且它有長期的可靠性 和互用性的跟蹤記錄。ASN.l的數(shù)據(jù)類型包括1、簡單數(shù)據(jù)類型是ASN.l 中規(guī)定的不包含子結構的數(shù)據(jù)類型,例如Integer, Boolean, Bit String (比 特串類型)等;2、結構數(shù)據(jù)類型是ASN. 1中規(guī)定的包含子結構的數(shù)據(jù)類型, 例如Sequence (序列類型),Set (集合類型),Choice (選擇類型)等。
然而,ASN. 1編解碼是一個很費時費工的工作,目前多數(shù)的ASN. l編解碼 方式是針對協(xié)議的,需要對于不同的協(xié)議以及不同的消息內(nèi)容編寫不同的編 解碼程序,當協(xié)議發(fā)生改變時,編解碼程序也必須進行相應的修改,不同版 本協(xié)議的編解碼程序也存在較大的區(qū)別,這些都增加了編寫編解碼程序員的 工作量以及程序出錯的幾率。
已公開中國專利申請用于抽象語法表示法高層應用的編解碼方法(公開 號1635763A,申請?zhí)?00310104144.3)也提供了一種通用的編解碼方法, 編碼過程如下根據(jù)高層應用協(xié)議基于ASN. 1的數(shù)據(jù)類型和關系,構建編碼 格式串,利用格式串生成相應空值的二叉樹結構,然后根據(jù)需要參照應用的操作編碼定義向結構中插值,最后遍歷二叉樹生成二進制信息流數(shù)據(jù);解碼 過程如下根據(jù)編碼格式串生成收到ASN.l編碼信息的二叉樹數(shù)據(jù)結構,然 后根據(jù)二叉樹的遍歷的反向過程解碼,并把數(shù)據(jù)賦給數(shù)據(jù)結構中,業(yè)務邏輯 再通過二叉樹的節(jié)點査詢來取得數(shù)據(jù)信息。但該方法的信息編碼格式串的定 義方法未加說明及應用層使用數(shù)據(jù)時需要查詢二叉樹才能獲取數(shù)據(jù),致使應 用層使用復雜,不方便。
發(fā)明內(nèi)容
本發(fā)明的目的就是利用詞法語法分析工具,提供一種針對結構的統(tǒng)一編解 碼方法,解決上述現(xiàn)有技術中存在的技術問題。本發(fā)明的方法適用于所有通 訊網(wǎng)絡中需要進行編解碼的協(xié)議。
為了達到上述目的,本發(fā)明提供以下技術方案 一種在通訊網(wǎng)絡中實現(xiàn)編解碼的方法,包括以下步驟
A、 數(shù)據(jù)結構的定義根據(jù)分析工具的要求和協(xié)議的描述,定義出協(xié)議中 消息的結構,編碼時由應用層填寫結構中的數(shù)據(jù),而解碼時由編解碼模塊填 寫結構中的數(shù)據(jù);
B、 結構信息的生成利用分析工具分析定義的結構,分析出消息中結構及 參數(shù)的屬性并記錄到文件中,以供編解碼模塊調(diào)用;
C、 編解碼的調(diào)度獲取參數(shù)的信息,根據(jù)獲得的信息進行數(shù)據(jù)結構的拆 分和數(shù)值填寫以及將結構數(shù)據(jù)類型分解成簡單數(shù)據(jù)類型進行編解碼;
D、 簡單類型的編解碼根據(jù)調(diào)度模塊的調(diào)用進行簡單數(shù)據(jù)類型的編解碼。 本發(fā)明與現(xiàn)有技術相比具有以下特點
本方法根據(jù)協(xié)議語法,針對不同的協(xié)議,定義應用層使用的頭文件(即協(xié) 議中消息的結構)。用分析工具來讀取頭文件,生成編解碼需要的結構及參數(shù) 信息。編解碼模塊根據(jù)這些信息以及通過信息獲取的結構中參數(shù)地址和值進 行編解碼,編解碼模塊僅針對協(xié)議中的基本數(shù)據(jù)類型進行編解碼,大幅降低 程序開發(fā)維護的工作量以及難度。
程序員只需針對不同協(xié)議定義不同的數(shù)據(jù)結構,不必編寫針對不同協(xié)議的 不同編解碼程序,所以本發(fā)明能夠簡單,快捷實現(xiàn)協(xié)議的編解碼。
在編碼方式不改變的情況下,當協(xié)議發(fā)生改變或協(xié)議升級版本時,無需重 新編寫編解碼的程序,只需修改根據(jù)協(xié)議定義的數(shù)據(jù)結構的頭文件,使得它 更加靈活和具有擴展性。
根據(jù)協(xié)議定義的數(shù)據(jù)結構的頭文件是按照協(xié)議來定義的,并根據(jù)協(xié)議的語 法注釋數(shù)據(jù)的屬性,使得頭文件更具可讀性。
統(tǒng)一的編解碼接口,編解碼模塊對外只提供兩個接口函數(shù)(編碼函數(shù)和解 碼函數(shù)),使得應用層不必關心編解碼的內(nèi)部實現(xiàn)機制。為程序的開發(fā),升級 提供了方便。
應用層使用數(shù)據(jù)時,只需從結構中獲取數(shù)據(jù)或向結構中賦值,簡化了應用 層的使用。
圖1是詞法語法分析工具的原理圖2是ASN. 1編解碼的工作原理圖3是ASN. 1數(shù)據(jù)類型定義示意圖4是消息的結構信息存儲方式示意圖5是消息的結構信息存儲內(nèi)容示意圖6是編解碼調(diào)度示意圖7是編碼的流程圖8是解碼的流程圖。
具體實施例方式
以下結合附圖詳細說明本發(fā)明的具體實施方式
。本實施例中使用的協(xié)議語
法為ASN. 1。
圖1為詞法語法分析工具的原理圖,包含了正則表達式的詞法語法規(guī)則作 為其輸入的程序,并且為每一個詞法表達式被匹配時定義一種動作。用于通知語法規(guī)則,當語法規(guī)則被匹配時,根據(jù)定義的動作產(chǎn)生所需的數(shù)據(jù)。編譯 器根據(jù)詞法語法規(guī)則生成分析工具。
分析工具指定根據(jù)協(xié)議定義的頭文件作為它的輸入,并根據(jù)語法規(guī)則的分析過程,記錄結構屬性和ASN.l屬性,并產(chǎn)生特定格式的輸出文件,即以 樹形格式(圖4)存儲分析出的結構的參數(shù)屬性和ASN.l屬性(圖5)。
圖2是ASN. 1編解碼的工作流程圖。
步驟201:數(shù)據(jù)結構的定義,根據(jù)協(xié)議的ASN. 1語法定義結構頭文件(即數(shù) 據(jù)結構)。
步驟202:結構信息的生成,用分析工具分析結構頭文件,產(chǎn)生結構信息 數(shù)據(jù)。
步驟203:編解碼的調(diào)度,應用層向編解碼模塊傳入待編碼結構或ASN.l 碼流的數(shù)據(jù),編解碼的調(diào)度模塊通過結構信息獲得結構中的參數(shù)和參數(shù)的 ASN. 1屬性并將結構類型拆分成簡單類型。
步驟204:簡單類型的編解碼,根據(jù)ASN. 1簡單數(shù)據(jù)類型的編碼方式進行編 解碼。
圖3展示了 ASN. 1數(shù)據(jù)類型同編程語言數(shù)據(jù)類型的對應關系,其中
Sequence, Set, Choice類型對應為包含表示子參數(shù)是否被填寫的標志位 (一個參數(shù)占一個Bit)和子參數(shù)的結構;
SequenceOf , SetOf類型對應為包含表示選用的數(shù)組個數(shù)的標志位(數(shù)組 的最大維數(shù))和子參數(shù)數(shù)組的結構;
OCTET STRING, NUMBER STRING, PRINT STRING. .等字符串類型對應為包含使用字節(jié)數(shù)和字符串值的結構;
BIT STRING字符串類型對應為包含使用字節(jié)數(shù),未使用比特數(shù)和字符串值 的結構;
除上述的ASN. 1數(shù)據(jù)類型以外的其他的ASN. 1數(shù)據(jù)類型(如Integer)對應 為編程語言相應的數(shù)據(jù)類型(如整型)。
圖4展示了結構信息存儲的方式,以一種樹形結構的方式存儲結構信息, 根節(jié)點作為消息的主結構。包含消息的所有參數(shù),其參數(shù)可以為簡單編碼類 型,也可為結構編碼類型。結構編碼類型應包含指向它的子結構的指針。
圖5展示了結構信息存儲的內(nèi)容
a. 變量類型,起始地址,變量名稱,占用字節(jié),變量數(shù)量,指向子結構 的指針等結構中參數(shù)自身的信息。
b. ASN. l標簽,賦值范圍,ASN. l類型,結構編碼或簡單編碼,可選/必 選,顯式/隱式等ASN.l規(guī)定的屬性。
圖6是編解碼調(diào)度示意圖,展示了編解碼調(diào)度模塊如何將結構進行拆分以 及結構內(nèi)容的填寫調(diào)度模塊從參數(shù)信息中獲取的參數(shù)的起始地址等于 0,占用字節(jié)為4,變量名為A1,編碼時就能在結構的內(nèi)存中取得A1地址并 在結構的Al參數(shù)信息中獲得Al的ASN. 1屬性。
編碼時,調(diào)度模塊根據(jù)參數(shù)的起始地址,大小,變量名等信息就能在結構 的內(nèi)存中獲取相應的值100,并連同ASN. 1屬性一起傳入簡單類型編解碼的編 碼模塊即可獲得標準的ASN. 1碼流。
解碼時,將參數(shù)的ASN. 1屬性和ASN. 1碼流傳入簡單類型編解碼的解碼模 塊,解出數(shù)據(jù)值100,再根據(jù)其起始地址和大小,變量名等信息,將數(shù)據(jù)填入 結構中。
圖7是編碼的流程圖,編碼過程包括以下步驟
步驟701:應用層對結構進行賦值,調(diào)用編碼接口函數(shù)(主要輸入?yún)?shù)包 括消息操作碼,協(xié)議中消息結構的指針)進行編碼過程;
步驟702:編解碼模塊獲取消息結構信息,為編碼過程進行消息的編碼提 供參數(shù)的詳細信息;
步驟703:根據(jù)消息結構信息獲取結構中第一個參數(shù)的信息;
步驟704:根據(jù)參數(shù)的信息在結構的內(nèi)存中獲取參數(shù)的值;
步驟705:根據(jù)獲取參數(shù)的值判斷參數(shù)填寫是否正確(包括參數(shù)是否填寫,范圍是否正確等);
步驟706:錯誤時進行出錯處理,輸出錯誤信息; 步驟707:判斷參數(shù)是簡單類型還是結構類型;
步驟708:如果是結構類型,則進行遞歸調(diào)用,進入結構類型的子類型, 返回步驟703,進行子類型的編碼過程;
步驟709:若是簡單類型,則根據(jù)ASN. 1的編碼規(guī)則進行簡單類型的編碼; 步驟710:拼接編碼產(chǎn)生的碼流;
步驟711:判斷結構是否結束(即是否是最后一個參數(shù));
步驟712:若結構未結束則獲取下一個參數(shù),返回步驟703,進行下一個參數(shù)的編碼,直至結構結束。若結構結束則返回編碼的碼流。
圖8是解碼的流程圖。解編碼過程包括以下步驟 步驟801:應用層將ASN. l碼流傳入解碼接口函數(shù); 步驟802:編解碼模塊獲取消息結構信息; 步驟803:根據(jù)消息結構信息獲取結構中參數(shù)的ASN. 1屬性; 步驟804:根據(jù)參數(shù)屬性解析出碼流中包含的信息和值; 步驟805:判斷參數(shù)為簡單類型還是結構類型;
步驟806:如果是結構類型則進行遞歸調(diào)用,進入結構類型的子類型,返 回步驟803,進行子類型的解碼過程;
步驟807:若為簡單類型則獲取參數(shù)在結構內(nèi)存中的地址信息。 步驟808:向結構中賦值,將解出的碼流寫入到結構中的相應地址中; 步驟809:判斷碼流是否為碼流結尾;
步驟810:若沒有結束則進行下一個參數(shù)的解碼,返回步驟803,直至碼流結束。然后,返回結構的內(nèi)容。
以上公開的僅為本發(fā)明的一個具體實施例,但是本發(fā)明并非局限于此,任 何本領域的技術人員能思之的變化,都應落在本發(fā)明的保護范圍內(nèi)。
權利要求
1、一種在通訊網(wǎng)絡中實現(xiàn)編解碼的方法,其特征在于包括以下步驟(A)、數(shù)據(jù)結構的定義根據(jù)分析工具的要求和協(xié)議的描述,定義出協(xié)議中消息的結構,編碼時由應用層填寫結構中的數(shù)據(jù),而解碼時由編解碼模塊填寫結構中的數(shù)據(jù);(B)、結構信息的生成利用分析工具分析定義的結構,分析出結構及參數(shù)信息并記錄到文件中,以供編解碼模塊調(diào)用;(C)、編解碼的調(diào)度獲取結構及參數(shù)信息,根據(jù)獲得的信息進行數(shù)據(jù)結構的拆分和數(shù)值填寫以及將結構數(shù)據(jù)類型分解成簡單數(shù)據(jù)類型進行編解碼;(D)、簡單類型的編解碼根據(jù)調(diào)度模塊的調(diào)用進行簡單數(shù)據(jù)類型的編解碼。
2、 根據(jù)權利要求1所述實現(xiàn)編解碼的方法,其特征在于所述結構及參數(shù) 信息是以一種樹形結構的方式存儲,根節(jié)點作為消息的主結構。
3、 根據(jù)權利要求1或2所述的實現(xiàn)編解碼的方法,其特征在于所述結構 信息包含消息的所有參數(shù),其參數(shù)可以為簡單編碼類型,也可為結構編碼類 型。
4、 根據(jù)權利要求1所述的實現(xiàn)編解碼的方法,其特征在于所述結構及參數(shù)信息存儲的內(nèi)容至少包括結構中參數(shù)自身的信息變量類型,起始地址,變量名稱,占用字節(jié),變量數(shù)量,指向子結構的指針;協(xié)議規(guī)定的屬性標簽,賦值范圍,協(xié)議的數(shù)據(jù)類型,結構編碼或簡單 編碼,可選/必選,顯式/隱式。
5、根據(jù)權利要求1所述的實現(xiàn)編解碼的方法,其特征在于所述步驟(C) 進一步還包括所述調(diào)度模塊從參數(shù)信息中獲取的參數(shù)的起始地址,占用字節(jié),變量名, 編碼時就能在結構的內(nèi)存中取得變量地址并在結構的變量參數(shù)信息中獲得變 量的屬性;編碼時,調(diào)度模塊根據(jù)參數(shù)的起始地址,大小,變量名等信息就能在結構 的內(nèi)存中獲取相應的數(shù)值,并連同屬性一起傳入簡單類型編解碼的編碼模塊 即可獲得標準的協(xié)議碼流;解碼時,將參數(shù)的屬性和協(xié)議碼流傳入簡單類型編解碼的解碼模塊,解析 出數(shù)值,再根據(jù)其起始地址和大小,變量名等信息,將數(shù)據(jù)填入結構中。
6、 根據(jù)權利要求1所述的實現(xiàn)編解碼的方法,其特征在于所述步驟(D) 的編碼過程進一步包括應用層對結構進行賦值,調(diào)用編碼接口函數(shù);編解碼模塊獲取消息中結構 及參數(shù)信息,為編碼過程進行消息的編碼提供詳細信息;根據(jù)結構及參數(shù)信 息獲取結構中第一個參數(shù)的信息;根據(jù)參數(shù)的信息在結構的內(nèi)存中獲取參數(shù) 的值;根據(jù)獲取參數(shù)的值判斷參數(shù)填寫是否正確;錯誤時進行出錯處理,輸 出錯誤信息;判斷參數(shù)是簡單類型還是結構類型;如果是結構類型,則進行 遞歸調(diào)用,進入結構類型的子類型,進行子類型的編碼過程;若是簡單類型, 則根據(jù)協(xié)議的編碼規(guī)則進行簡單類型的編碼;拼接編碼產(chǎn)生的碼流;若結構 結束則返回編碼的碼流。
7、 根據(jù)權利要求1所述的實現(xiàn)編解碼的方法,其特征在于所述步驟(D) 的解編碼過程進一步包括應用層將接收的碼流傳入解碼接口函數(shù);編解碼模塊獲取消息中結構及參 數(shù)信息;根據(jù)結構及參數(shù)信息獲取結構中參數(shù)的屬性;根據(jù)參數(shù)屬性解析出 碼流中包含的信息和值;判斷參數(shù)為簡單類型還是結構類型;如果是結構類 型則進行遞歸調(diào)用,進入結構類型的子類型,進行子類型的解碼過程;若為 簡單類型則獲取參數(shù)在結構內(nèi)存中的地址信息;向結構中賦值,將解出的碼 流寫入到結構中的相應地址中;直至碼流結束,返回結構的內(nèi)容。
全文摘要
本發(fā)明涉及一種在通訊網(wǎng)絡中實現(xiàn)編解碼的方法,包括(A)數(shù)據(jù)結構的定義根據(jù)分析工具的要求和協(xié)議的描述,定義出協(xié)議中消息的結構,編碼時由應用層填寫結構中的數(shù)據(jù),而解碼時由編解碼模塊填寫結構中的數(shù)據(jù);(B)結構信息的生成利用分析工具分析定義的結構,分析出結構及參數(shù)屬性并記錄到文件中,以供編解碼模塊調(diào)用;(C)編解碼的調(diào)度獲取參數(shù)的信息,根據(jù)獲得的信息進行數(shù)據(jù)結構的拆分和數(shù)值填寫以及將結構數(shù)據(jù)類型分解成簡單數(shù)據(jù)類型進行編解碼;(D)簡單類型的編解碼根據(jù)調(diào)度模塊的調(diào)用進行簡單數(shù)據(jù)類型的編解碼。該方法僅對簡單數(shù)據(jù)類型進行編解碼,能夠大幅降低程序開發(fā)維護的工作量以及難度。
文檔編號H04L29/06GK101202736SQ20061010515
公開日2008年6月18日 申請日期2006年12月13日 優(yōu)先權日2006年12月13日
發(fā)明者余宏釗, 段保平, 龍 賴 申請人:西安大唐電信有限公司