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