專利名稱:基于asn.1定義的pdu編解碼代碼自動生成的實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種自動生成通信協(xié)議中協(xié)議數(shù)據(jù)單元的編解碼代碼的方法。
背景技術(shù):
在現(xiàn)代通信領(lǐng)域,隨著通信功能的日益強大,很多網(wǎng)絡(luò)協(xié)議已成為一個非常龐大和復雜的軟件系統(tǒng),這個系統(tǒng)中有著許多基于不同編解碼規(guī)則的編解碼過程,比如層3消息編解碼以及基于ASN.1(Abstract Sybtax NotationOne)定義的PDU編解碼等。這些編解碼過程是整個協(xié)議軟件系統(tǒng)的重要組成部分,并起著極其重要的作用。
在兩個協(xié)議實體交換PDU(協(xié)議數(shù)據(jù)單元)時,采用ASN.1抽象語法定義每一個PDU,然后用ASN.1編碼規(guī)則對PDU進行編碼。ASN.1的定義和編碼規(guī)則分別在ISO 8824和8825中作了規(guī)定。
ASN.1有嚴格的BNF定義,具有簡潔、精確和無二義性的特點。它有兩種用途一是用于如電子郵件等應(yīng)用語法;二是用作定義特定協(xié)議實體PDU結(jié)構(gòu)的一種手段。
ASN.1類似于高級程序設(shè)計語言的數(shù)據(jù)描述部分,它提供若干語言構(gòu)件用以定義類型和值。類型和值是任何數(shù)據(jù)都具有的兩個重要的屬性,類型對應(yīng)結(jié)構(gòu),值對應(yīng)內(nèi)容。如果給定一種類型,則該類型的一個值就稱為該類型的一個具體實例。但是與其他程序設(shè)計語言不同的是,ASN.1的類型不需要由機器實現(xiàn),例如ASN.1中的整型INTEGER允許使用所有的整數(shù)作為其值,這樣一種類型在實際機器中是不可能表示的。
ASN.1的基本構(gòu)件是模塊,一種抽象數(shù)據(jù)類型可以用ASN.1定義成一個模塊,這個模塊描述了抽象數(shù)據(jù)類型的抽象語法。模塊可以用名字來引用,模塊名也是它定義的抽象語法的名字。當應(yīng)用實體把協(xié)議數(shù)據(jù)單元交給表示服務(wù)時,同時要說明這個協(xié)議數(shù)據(jù)單元的抽象語法名。
目前對于基于ASN.1定義PDU編解碼代碼的實現(xiàn)一般有兩種方法第一種方法是所有代碼完全人工實現(xiàn)。由于此類PDU集定義的龐大和復雜性決定了代碼量通常多達數(shù)萬行,人工實現(xiàn)工作量異常巨大。
第二種方法是通過基于ASN.1語法的編譯器的商業(yè)軟件工具自動生成PDU編解碼代碼。
如圖1所示,為基于ASN.1語法的代碼自動生成的商業(yè)軟件工具自動生成PDU編解碼代碼的方法流程圖,包括以下步驟(步驟101)使用ASN.1抽象語法對通信協(xié)議文件中PDU進行結(jié)構(gòu)描述;(步驟102)使用ASN.1編譯器編譯;(步驟103)生成PDU編解碼代碼。
此方法雖然大大減少了工作量;但還有以下缺點(1)生成的代碼與系統(tǒng)其它部分在編程規(guī)范等方面不相容,大大降低了整個軟件的完整性和規(guī)范性。
(2)數(shù)據(jù)類型定義不靈活,增大了各種數(shù)據(jù)類型對內(nèi)存的占用。
(3)只能使用ASN.1抽象語法描述消息結(jié)構(gòu),不能使用自定義消息頭文件。
(4)增加了商業(yè)成本。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于提供了一種基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,可以避免生成代碼在編程規(guī)范方面不相容和數(shù)據(jù)類型定義不靈活而增大對內(nèi)存占用的問題,編程工作量相對較小,成本較低。
為解決上述技術(shù)問題,本發(fā)明提供了一種基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,其具體步驟為(1)確定在自定義的頭文件中使用的數(shù)據(jù)類型的定義規(guī)則與標注規(guī)則,并根據(jù)該定義規(guī)則與標注規(guī)則生成頭文件;
(2)根據(jù)所述數(shù)據(jù)類型的定義規(guī)則與標注規(guī)則,編碼生成頭文件分析工具,以及代碼產(chǎn)生工具;(3)使用所述頭文件分析工具來掃描各頭文件,解析出各頭文件中定義的數(shù)據(jù)結(jié)構(gòu)名及結(jié)構(gòu)之間的關(guān)系;(4)使用所述代碼產(chǎn)生工具,根據(jù)從頭文件中解析出的結(jié)構(gòu)名及結(jié)構(gòu)之間的關(guān)系,自動產(chǎn)生PDU結(jié)構(gòu)編解碼的代碼。
所述方法還可以包括以下步驟(5)將所述自動產(chǎn)生的PDU結(jié)構(gòu)編解碼的代碼,與ASN.1基本類型編解碼的代碼以及對應(yīng)的頭文件整合到一起,形成完整的PDU結(jié)構(gòu)編解碼代碼。
使用本發(fā)明,由于允許使用自定義的頭文件,因此不需使用ASN.1抽象語法。而利用自定義的編程規(guī)范產(chǎn)生的代碼,避免了基于ASN.1語法的編譯器商業(yè)軟件工具生成代碼在編程規(guī)范等方面不相容的問題。而且,針對自定義的頭文件而生成的頭文件分析工具和代碼產(chǎn)生工具,使得避免了人工實現(xiàn)代碼的巨大工作量,編程工作量相對小、成本低。
圖1為基于ASN.1語法的代碼自動生成的商業(yè)軟件工具自動生成PDU編解碼代碼的方法流程圖;圖2為本發(fā)明實施例所述的基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法流程圖。
具體實施例方式
如圖2所示,為本發(fā)明實施例所述的基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法流程圖,其具體步驟為步驟201生成自定義頭文件。
本發(fā)明的特點之一就是可以允許用戶使用自定義的頭文件。自定義頭文件不僅可以符合編程規(guī)范,而且可以對各種數(shù)據(jù)類型進行靈活定義,以盡量減少各種數(shù)據(jù)類型對內(nèi)存的占用。
而要做到對各個不同的頭文件進行統(tǒng)一化的解析,則需要規(guī)范頭文件中的結(jié)構(gòu)定義規(guī)則。也就是說,需要按照統(tǒng)一的結(jié)構(gòu)定義規(guī)則來生成自定義頭文件。因此,本發(fā)明在生成自定義頭文件前,必須首先確定在頭文件中使用的數(shù)據(jù)類型的定義規(guī)則與標注規(guī)則。
在確定數(shù)據(jù)類型的定義規(guī)則與標注規(guī)則時,可以首先對通信協(xié)議文件中所有PDU結(jié)構(gòu)類型進行分析,記錄所有結(jié)構(gòu)的聲明類型,然后把記錄的聲明類型進行分類,就得到所有使用到的ASN.1的抽象數(shù)據(jù)類型。如Integer,bitstring,octetstring,Enum,bool,Null,sequence,choice,sequenceof等。從而確定需要加標注的范圍。
通過上一步的分析知道,不同的抽象數(shù)據(jù)類型在自定義的頭文件中可能是同一種數(shù)據(jù)類型,如sequence和choice,在自定義頭文件中都可以被定義為struct數(shù)據(jù)類型,為了掃描分析頭文件時得到正確的結(jié)果,對這些需要加以區(qū)分的類型在頭文件中加入特別標注;另外,對于有的抽象數(shù)據(jù)類型在自定義頭文件定義的數(shù)據(jù)類型中無法完全表示其全部信息的,也要在頭文件中加入特別標注。如Integer抽象數(shù)據(jù)類型需要加入是否是受限類型,以及上限、下限的數(shù)值等。
對于兩種情況都存在的抽象數(shù)據(jù)類型,就要同時加入兩種標注。
對于上述的兩種情況以下展開具體說明1.對于在自定義頭文件中被定義成同一種數(shù)據(jù)類型從而無法區(qū)分的情況。Sequence類型、Sequence-Of類型、Choice類型、Bitstring類型、Octetstring類型在自定義頭文件中都被定義為struct類型,因此需要在每一個struct類型定義后加入標注以說明,在Sequence類型的struct聲明后面加上標注“$SN”,在Sequence-Of類型的struct聲明后面加上標注“$SO”,在Choice類型的struct聲明后面加上標注“$CH”,在Bitstring類型的struct聲明后面加上標注“$BT”,在Octetstring類型的struct聲明后面加上標注“$OT”。
2.對于在自定義頭文件中定義的數(shù)據(jù)類型中無法完全表示其全部信息的情況。Sequence-Of類型、Bitstring類型、Octetstring類型、Integer類型等。因為存在受限情況等信息需要說明,因此需要加入特別標注。Sequence-Of類型的聲明后面加上“$上限數(shù)值$下限數(shù)值”(如$2048$1),Bitstring類型、Octetstring類型、Integer類型也是如此。
3.對于兩種情況都存在的抽象數(shù)據(jù)類型,如Sequence-Of類型、Bitstring類型、Octetstring類型等需要依次加入兩種情況的標注。例如Sequence-Of類型的struct聲明后面加上依次加上“$SO$上限數(shù)值$下限數(shù)值”;Bitstring類型、Octetstring類型也是如此。
應(yīng)當說明的是,本發(fā)明僅僅是需要首先確定頭文件中使用的數(shù)據(jù)類型的定義規(guī)則與標注規(guī)則,但并不限制使用何種具體的定義規(guī)則與標注規(guī)則,也不要求制定這種規(guī)則的方法,上述情況也僅是舉例說明規(guī)則的形式而已,實際上,還可以使用其他定義形式。也就是說,在這一步驟中,本發(fā)明僅是需要知道這個規(guī)則是什么即可,并根據(jù)該規(guī)則就可以生成頭文件,這利用現(xiàn)有技術(shù)手段即可實現(xiàn)。而至于該規(guī)則的定義過程并非本發(fā)明的重點。
步驟202編碼生成頭文件分析工具及對應(yīng)的代碼產(chǎn)生工具。
由于在步驟201中已經(jīng)知道了頭文件是按照什么規(guī)則進行數(shù)據(jù)類型的聲明以及各種標注的含義了,因此,可以方便的實現(xiàn)對頭文件分析工具的生成。該分析工具不僅可以分析頭文件數(shù)據(jù)結(jié)構(gòu),還可以分析加入的標注以得到正確的結(jié)果。
頭文件分析工具與代碼產(chǎn)生工具的對應(yīng)關(guān)系,其實就原理來說,就是頭文件分析出頭文件中的數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系,并把結(jié)構(gòu)之間的關(guān)系告知代碼產(chǎn)生工具,讓代碼產(chǎn)生工具根據(jù)結(jié)構(gòu)之間的關(guān)系產(chǎn)生函數(shù)。函數(shù)之間的關(guān)系和結(jié)構(gòu)之間的關(guān)系是完全一致的。
比如,結(jié)構(gòu)之間的關(guān)系是嵌套的,對應(yīng)的函數(shù)之間的關(guān)系也是嵌套的;如結(jié)構(gòu)之間的關(guān)系是平行的,對應(yīng)的函數(shù)之間的關(guān)系也是平行的。頭文件分析工具與代碼產(chǎn)生工具中間并沒有其它特別的轉(zhuǎn)換。
也就是說,頭文件分析工具與代碼產(chǎn)生工具這兩者之間的數(shù)據(jù)如何轉(zhuǎn)換和對應(yīng)的實現(xiàn)方法有很多,這屬于具體的軟件編程采用的方法不同,但不影響本發(fā)明的思想方法。
步驟203使用所述頭文件分析工具來掃描各頭文件,解析出各頭文件中定義的數(shù)據(jù)結(jié)構(gòu)名及結(jié)構(gòu)之間的關(guān)系;步驟204使用所述代碼產(chǎn)生工具,根據(jù)從頭文件中解析出的數(shù)據(jù)結(jié)構(gòu)名及結(jié)構(gòu)之間的關(guān)系,自動產(chǎn)生PDU結(jié)構(gòu)編解碼的代碼。其中,代碼所使用的函數(shù)名和結(jié)構(gòu)名均取自頭文件。
步驟205將產(chǎn)生的PDU結(jié)構(gòu)編解碼的代碼與ASN.1基本類型編解碼的代碼以及自定義頭文件加以整合,得到完整的PDU結(jié)構(gòu)編解碼代碼。
權(quán)利要求
1.一種基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,其特征在于,包括以下步驟(1)確定在自定義的頭文件中使用的數(shù)據(jù)類型的定義規(guī)則與標注規(guī)則,并根據(jù)該定義規(guī)則與標注規(guī)則生成頭文件;(2)根據(jù)所述數(shù)據(jù)類型的定義規(guī)則與標注規(guī)則,編碼生成頭文件分析工具,以及對應(yīng)的代碼產(chǎn)生工具;(3)使用所述頭文件分析工具來掃描各頭文件,解析出各頭文件中定義的數(shù)據(jù)結(jié)構(gòu)名及結(jié)構(gòu)之間的關(guān)系;(4)使用所述代碼產(chǎn)生工具,根據(jù)從頭文件中解析出的數(shù)據(jù)結(jié)構(gòu)名及結(jié)構(gòu)之間的關(guān)系,自動產(chǎn)生PDU結(jié)構(gòu)編解碼的代碼。
2.根據(jù)權(quán)利要求1所述基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,其特征在于,所述方法還包括以下步驟(5)將所述自動產(chǎn)生的PDU結(jié)構(gòu)編解碼的代碼,與ASN.1基本類型編解碼的代碼以及對應(yīng)的頭文件整合到一起,形成完整的PDU結(jié)構(gòu)編解碼代碼。
3.根據(jù)權(quán)利要求1所述的基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,其特征在于,所述步驟(1)中,確定頭文件中使用的數(shù)據(jù)類型的定義規(guī)則的原則是使各種數(shù)據(jù)類型對內(nèi)存的占用最小。
4.根據(jù)權(quán)利要求1所述基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,其特征在于,所述步驟(1)中,確定在自定義的頭文件中使用的數(shù)據(jù)類型的標注規(guī)則的步驟包括對在自定義PDU結(jié)構(gòu)頭文件中被定義成同一種數(shù)據(jù)類型從而無法區(qū)分的ASN.1抽象數(shù)據(jù)類型加入標注來進行區(qū)分。
5.根據(jù)權(quán)利要求1所述基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,其特征在于,所述步驟(1)中,確定在自定義的頭文件中使用的數(shù)據(jù)類型的標注規(guī)則的步驟包括對在自定義PDU結(jié)構(gòu)頭文件中定義的數(shù)據(jù)類型無法完全表示其全部信息的ASN.1抽象數(shù)據(jù)類型加入標注來補充聲明。
6.根據(jù)權(quán)利要求1所述基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,其特征在于,所述步驟(1)中,確定在自定義的頭文件中使用的數(shù)據(jù)類型的標注規(guī)則的步驟包括對在自定義PDU結(jié)構(gòu)頭文件中被定義成同一種數(shù)據(jù)類型從而無法區(qū)分、并且在自定義PDU結(jié)構(gòu)頭文件中定義的數(shù)據(jù)類型無法完全表示其全部信息的ASN.1抽象數(shù)據(jù)類型,依次加入兩種標注來進行區(qū)分并補充聲明。
7.根據(jù)權(quán)利要求1所述基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,其特征在于,所述步驟(1)中,確定在自定義的頭文件中使用的數(shù)據(jù)類型的標注規(guī)則的步驟包括確定加入標注的位置位于數(shù)據(jù)類型的聲明后面。
8.根據(jù)權(quán)利要求1所述基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,其特征在于,步驟(3)中所述頭文件分析工具掃描頭文件的步驟,包括掃描頭文件的數(shù)據(jù)類型以及加入的標注。
全文摘要
本發(fā)明提供了一種基于ASN.1定義的PDU編解碼代碼自動生成的實現(xiàn)方法,首先確定在自定義的頭文件中使用的數(shù)據(jù)類型的定義規(guī)則與標注規(guī)則,并根據(jù)該定義規(guī)則與標注規(guī)則生成頭文件;再根據(jù)所述數(shù)據(jù)類型的定義規(guī)則與標注規(guī)則,編碼生成頭文件分析工具,以及對應(yīng)的代碼產(chǎn)生工具;使用所述頭文件分析工具來掃描各頭文件,解析出各頭文件中定義的數(shù)據(jù)結(jié)構(gòu)名及結(jié)構(gòu)之間的關(guān)系;然后使用所述代碼產(chǎn)生工具,根據(jù)從頭文件中解析出的數(shù)據(jù)結(jié)構(gòu)名及結(jié)構(gòu)之間的關(guān)系,自動產(chǎn)生PDU結(jié)構(gòu)編解碼的代碼。本發(fā)明避免了生成代碼在編程規(guī)范等方面不相容的問題,而且編程工作量相對較小、成本較低。
文檔編號H04L29/06GK1992715SQ20051013566
公開日2007年7月4日 申請日期2005年12月31日 優(yōu)先權(quán)日2005年12月31日
發(fā)明者聶淺, 李興華, 江鴻 申請人:中興通訊股份有限公司