專利名稱::一種類c結(jié)構(gòu)接口報(bào)文處理方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及接口報(bào)文處理,具體涉及一種類c結(jié)構(gòu)接口報(bào)文編解碼方法和模擬處理方法。
背景技術(shù):
:ITU-TM.3010將電信管理層模型劃分為網(wǎng)元層(NEL)、網(wǎng)元管理層(EML)、網(wǎng)絡(luò)管理層(NML)、業(yè)務(wù)管理層(SML),事務(wù)管理層(BML)。在同層之間或上下層之間都需要通信交互,因此也就存在著各種通信接口。比如SDH網(wǎng)絡(luò)管理系統(tǒng)中存在下面常見的接口,F(xiàn)接口GUI與Manager的接口,F(xiàn)接口采用Ethernet方式,對于Ethernet采用TCP/IP協(xié)議。Qx接口網(wǎng)元層的Agent與網(wǎng)元管理層的Manager的接口,Qx接口釆用Ethernet方式,釆用TCP/IP協(xié)議進(jìn)行通訊S接口網(wǎng)元層內(nèi)Agent與MCU的一種私有協(xié)議,S接口采用基于HDLC通訊機(jī)制進(jìn)行一點(diǎn)對多點(diǎn)的通訊。在網(wǎng)元層單板軟件中,一種典型應(yīng)用是,由于受內(nèi)存成本限制和效率的考慮,常用c語言來開發(fā)。因此在單板軟件之間或和其它上層管理軟件通信的接口協(xié)議,也常采用類c語言結(jié)構(gòu)描述。而Qx接口和S接口采用類c語言結(jié)構(gòu)描述,F(xiàn)接口采用ASN.1描述。這種類c語言描述的接口在其它領(lǐng)域也很常見。所有的接口都要有自然語言文字配合說明結(jié)構(gòu)中各字段的實(shí)際意義,由于c語言是程序設(shè)計(jì)語言而不象ASN.l是報(bào)文描述語言,所以在描述報(bào)文的時(shí)候還需要一些自然語言說明結(jié)構(gòu)中各字段之間的關(guān)系。類c語言描述的接口,是指用c語言的數(shù)據(jù)類型來描述軟件模塊間的接口報(bào)文。由于存在兩臺不同的主機(jī)之間進(jìn)行通信的要求,因此類c報(bào)文要求不能存在含指針表示數(shù)組的數(shù)據(jù)結(jié)構(gòu),這樣就要求一條接口報(bào)文放在一塊連續(xù)的數(shù)據(jù)區(qū)。一條接口報(bào)文可以采用樹形結(jié)構(gòu)表示。不同主機(jī)間通信采用網(wǎng)絡(luò)序的要求,同一主機(jī)的軟件模塊間可以釆用絡(luò)序或不需要轉(zhuǎn)化直接采用主機(jī)序。ci吾言有char、bool、short、int、float等基本類型,可以通過struct包括基本類型成員或其它結(jié)構(gòu)成員進(jìn)行數(shù)據(jù)類型擴(kuò)展。主機(jī)序如果在intel的機(jī)器,就是小端序(LITTLE—ENDIAN);如果是sun工作站,就是大端序(BIG—ENDIAN),也叫網(wǎng)絡(luò)序。如一個(gè)4字節(jié)整數(shù)0x0102,其對應(yīng)大端字節(jié)序列:00000102,而小端字節(jié)序是02010000。二者的次序是相反的,在報(bào)文處理中字節(jié)序?qū)φ麛?shù)和位域的處理有影響,對字符串等沒有影響。ASN.1(抽象文法標(biāo)記少見范,AbstractSyntaxNotation.1)是ITU定義的描述在網(wǎng)絡(luò)上傳輸信息格式(也就是接口報(bào)文碼流)的標(biāo)準(zhǔn)規(guī)范,為節(jié)點(diǎn)間的數(shù)據(jù)轉(zhuǎn)換提供標(biāo)準(zhǔn)格式。每個(gè)節(jié)點(diǎn)只關(guān)心從ASN.l翻譯過來或翻譯成ASN.l而不必知道數(shù)據(jù)存于網(wǎng)絡(luò)任何處的格式。它有兩部分第一部份(ISO8824/ITUX.208)描述信息內(nèi)的數(shù)據(jù)、數(shù)據(jù)類型及序列格式,也就是數(shù)據(jù)的語法;第二部分(ISO8825/ITUX.209)描述如何將各部分?jǐn)?shù)據(jù)組成消息,也就是數(shù)據(jù)的基本編碼規(guī)則,原來是作為X,409的一部分而開發(fā)的,后來才獨(dú)立地成為一個(gè)標(biāo)準(zhǔn)。第一代PKI(即公開密鑰體系PublicKeyInfrastructure)標(biāo)準(zhǔn)主要是基于ASN.l的,在SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)中它用于定義SNMP協(xié)議數(shù)據(jù)單元和對象的格式,被廣泛應(yīng)用于通信和計(jì)算機(jī)的其他領(lǐng)域。使用ASN.l報(bào)文格式通信也就成為電信網(wǎng)管系統(tǒng)最常見的通信方式。ASN.l報(bào)文具有如下特殊性質(zhì)1.報(bào)文呈樹狀結(jié)構(gòu),可以根據(jù)需要定義較多層次的報(bào)文嵌套。2.報(bào)文中某個(gè)節(jié)點(diǎn)的類型多種多樣,可能為一個(gè)簡單數(shù)據(jù)類型,比如INTEGER、GRAPHICSTRING,ENUM等等;也有可能為包含再下級節(jié)點(diǎn)的復(fù)合數(shù)據(jù)類型SET,SEQUENCE,SETOF,SEQUENCEOF。3.在SET,SEQUENCE結(jié)構(gòu)中,某個(gè)節(jié)點(diǎn)有可能不存在,因?yàn)閷?yīng)凈艮文節(jié)點(diǎn)允許設(shè)置為OPTIONAL,表示可有可無。4.在使用ASN.l文件時(shí),首先在ASN.l文件定義ASN.l結(jié)構(gòu),然后通過編譯器編譯成為中間程序語言結(jié)構(gòu),比如java,C+十語言。然后通過4吏用對應(yīng)的程序語言結(jié)構(gòu),達(dá)到通信的目的。5.ASN.l支持BER(基本編碼規(guī)則,BasicEncodingRules),DER(區(qū)分編碼規(guī)則,DistinguishedEncodingRules),VAL(值編碼規(guī)則,ASN.lvaluenotation)等編碼,可以將中間語言結(jié)構(gòu)實(shí)例編碼為碼流,但是在從碼流解碼為中間語言結(jié)構(gòu)實(shí)例時(shí)會有問題,首先要知道碼流對應(yīng)的結(jié)構(gòu),然后才能用該結(jié)構(gòu)的解碼方法解碼,如果該結(jié)構(gòu)中包括ANY類型(指不確定的類型),該類型數(shù)據(jù)還要通過其它成員字段確定其特定類型才能再進(jìn)一步解碼。關(guān)于報(bào)文在C/S類型軟件中一般常用的方法是1.建立客戶端與服務(wù)器端的連接;2.客戶端與服務(wù)器端進(jìn)行協(xié)議交互.a)報(bào)文發(fā)送方填寫報(bào)文頭和報(bào)文體,報(bào)文頭包括命令碼、報(bào)文體.報(bào)文體真實(shí)數(shù)據(jù)類型因命令碼不同而不同;b)報(bào)文發(fā)送方編碼報(bào)文為字節(jié)流,發(fā)送給報(bào)文接受方;c)報(bào)文接受方接受到報(bào)文字節(jié)流,解碼報(bào)文頭,然后根據(jù)其中的命令碼,用特定數(shù)據(jù)類型解碼報(bào)文體;d)報(bào)文接受方根據(jù)報(bào)文的內(nèi)容,作相應(yīng)的響應(yīng);3.交互結(jié)束,關(guān)閉連接。在針對報(bào)文的接口測試工具中經(jīng)常需要模擬各種接口的報(bào)文,模擬報(bào)文有兩種來源,一種是通過解釋性腳本語言創(chuàng)建,另一種是通過持久化數(shù)據(jù)創(chuàng)建報(bào)文結(jié)構(gòu)實(shí)例,進(jìn)一步還要求可以修改該實(shí)例。而在應(yīng)用程序中在有時(shí)候要求將報(bào)文持久化保存為文件或保存到數(shù)據(jù)庫,并且從持久化報(bào)文中再現(xiàn)報(bào)文。并且希望文件中的數(shù)據(jù)是可讀的,可以修改其中的數(shù)據(jù)。這樣就需要模擬F接口的ASN.l報(bào)文、Qx接口的類c描述報(bào)文、S接口的類c描述報(bào)文.現(xiàn)有的ASN.l編譯平臺,包括DSET和ESNACC都能根據(jù)ASN.l的結(jié)構(gòu)生成其描述信息。類c描述報(bào)文和ASN.l表述的報(bào)文,都展現(xiàn)的是一種節(jié)點(diǎn)間的樹形關(guān)系,并且ASN.l可以在語義上表示類c報(bào)文.如果類c描述報(bào)文和ASN.l的報(bào)文用不同的方式實(shí)現(xiàn)模擬,工作量太大。
發(fā)明內(nèi)容本發(fā)明需要解決的技術(shù)問題是如何提供一種類C結(jié)構(gòu)接口報(bào)文處理方法,能借助已有的ASN.l技術(shù)以及編譯平臺對類c報(bào)文的編碼、解碼或進(jìn)行報(bào)文模擬工作,既可以用在開發(fā)中,也可以用在基于接口報(bào)文的測試中,并且和ASN.l統(tǒng)一了處理流程,減少了開發(fā)工作量,降低類c報(bào)文制作的難度和報(bào)文制作的工作量。本發(fā)明的上述技術(shù)問題這樣解決,提供一種類c結(jié)構(gòu)接口報(bào)文模擬處理方法,采用類c結(jié)構(gòu)接口報(bào)文與被測對象交互,還包括以下步驟A)利用編譯平臺和編解碼規(guī)則實(shí)現(xiàn)交互的類c結(jié)構(gòu)接口報(bào)文和底層的ASN.l報(bào)文相互轉(zhuǎn)換;B)基于ASN.l功能模塊實(shí)現(xiàn)類c結(jié)構(gòu)接口報(bào)文的底層模擬。按照本發(fā)明提供的處理方法,所述編解碼規(guī)則包括類c語言數(shù)據(jù)類型和ASN.1數(shù)據(jù)類型的對應(yīng)關(guān)系。按照本發(fā)明提供的處理方法,所述編解碼規(guī)則包括c接口頭文件中的傀結(jié)構(gòu)。按照本發(fā)明提供的處理方法,所述編解碼規(guī)則包括對類c報(bào)文的語法規(guī)范。按照本發(fā)明提供的處理方法,所述編譯平臺是支持BER,PER編碼并能實(shí)現(xiàn)VAL格式數(shù)據(jù)和〔++結(jié)構(gòu)實(shí)例相互轉(zhuǎn)換的ASN.l編譯器。按照本發(fā)明提供的處理方法,所述被測對象和交互使用相同編碼規(guī)則。按照本發(fā)明提供的處理方法,所述編碼規(guī)則可以是目前規(guī)則BER或PER等規(guī)則;也可以是目前ASN.l不支持的編碼規(guī)則,所以我們在后面"具體實(shí)施方式"中引入了一種新規(guī)則。按照本發(fā)明提供的處理方法,所述功能模塊包括腳本操作、報(bào)文編輯、報(bào)文比較和報(bào)文存儲。本發(fā)明提供的一種類c結(jié)構(gòu)接口報(bào)文模擬處理方法,借助于接口描述語言ASN.l模擬類c語言結(jié)構(gòu)報(bào)文的方法,利用已有的ASN.l技術(shù)以及編譯平臺,將類c結(jié)構(gòu)接口頭文件轉(zhuǎn)化ASN.l文件,并且為ASN.l提供一種擴(kuò)展的編解碼規(guī)則。不需要從底層報(bào)文結(jié)構(gòu)的表示方法開始做類c報(bào)文的模擬工作,并且和ASN.l統(tǒng)一了處理流程,減少了開發(fā)工作量,降低類c才艮文制作的難度和報(bào)文制作的工作量,與現(xiàn)有技術(shù)比較具有以下特點(diǎn)1.使類c的結(jié)構(gòu)報(bào)文語法借助于接口描述語言ASN.l得到規(guī)范,降低了人為定義接口的隨意性,使得程序開發(fā)者在理解報(bào)文接口規(guī)范時(shí)歧義減少。2。用于開發(fā)中,標(biāo)準(zhǔn)化了接口語法,可以編解碼方法可以接口層靠編譯器生成,和應(yīng)用層無關(guān)。去除了開發(fā)人員報(bào)文編解碼的工作量。3.使得類c語言定義的報(bào)文模擬和ASN.l報(bào)文的處理統(tǒng)一。4.使得類c語言定義的報(bào)文在模擬的時(shí)候可以利用現(xiàn)有的關(guān)于ASN.l處理的成熟技術(shù)。5.采用轉(zhuǎn)化工具自動把c接口頭文件轉(zhuǎn)化為ASN.l文件,除了編解碼,其它功能可以直接采用ASN.l的功能模塊,如報(bào)文讀寫、報(bào)文編輯、報(bào)文比較、報(bào)文傳遞等。減輕了開發(fā)工作量,也降低了測試工具的培訓(xùn)維護(hù)工作量,同時(shí)也降低了測試人員的維護(hù)報(bào)文的工作量。6.方法本身是通用的,不依賴于特定的被測軟件和特定的ASN.l編譯器。下面結(jié)合附圖和具體實(shí)施例進(jìn)一步對本發(fā)明進(jìn)行詳細(xì)說明。圖1是c語言筒單類型到ASN.l類型的映射表;圖2是c報(bào)文的插件生成過程示意圖;圖3是利用報(bào)文插件處理報(bào)文模塊調(diào)用關(guān)系示意圖;圖4是ESNACCC++基本類結(jié)構(gòu)繼承體系示意圖。具體實(shí)施方式首先,說明本發(fā)明具體實(shí)現(xiàn)的整體技術(shù)方案1、接口規(guī)范,目的是實(shí)現(xiàn)類c報(bào)文的語法規(guī)范,減少自然語言定義的隨意性。1.1明確結(jié)構(gòu)中不定長數(shù)組編碼后相對該結(jié)構(gòu)的位置.一般有兩種可能的情況第一種是不定長數(shù)組的碼流放在父結(jié)構(gòu)中前一個(gè)字段后面,也就是其在結(jié)構(gòu)中的定義位置。第二種是不定長數(shù)組放在該數(shù)組在父結(jié)構(gòu)的尾部,此時(shí)為了定位方便,可以加入一些輔助結(jié)構(gòu),并且如果存在數(shù)組結(jié)構(gòu)中包含子數(shù)組,就要求這些數(shù)組結(jié)構(gòu)按某種方式排列,如前序遍歷方式。1.2選擇結(jié)構(gòu)的定義,結(jié)構(gòu)中存在字段b數(shù)據(jù)類型是由本結(jié)構(gòu)的字段a的數(shù)值決定,稱類似a的功能字段為主字段,稱類似b的功能字段為從字段,要求從字段放在其父結(jié)構(gòu)的末尾。而且在一個(gè)結(jié)構(gòu)中只有一個(gè),如果一個(gè)結(jié)構(gòu)中存在多個(gè)從字段的結(jié)構(gòu),那只要把那幾個(gè)從字段和它們各自的主字段放在子結(jié)構(gòu)中,再定義到它們的父結(jié)構(gòu)中,這依然和原來的結(jié)構(gòu)等價(jià),這僅僅是一種處理技巧而不是一種限制。1.3確定支持哪些筒單類型,這樣通過數(shù)組(分定長或不定長兩種),struct的定義就可以擴(kuò)展成為更復(fù)雜的結(jié)構(gòu)。如支持8位,16位,32位的有或無符號整數(shù),布爾等類型等。8位的整數(shù)和字符等價(jià),這樣也能表達(dá)字符串。2、建立映射關(guān)系,建立類c語言數(shù)據(jù)類型和ASN.l數(shù)據(jù)類型的對應(yīng)關(guān)系。實(shí)現(xiàn)簡單數(shù)據(jù)類型、數(shù)組、整數(shù)宏、復(fù)合數(shù)據(jù)類型到對應(yīng)關(guān)系。有了這種映射轉(zhuǎn)換關(guān)系,目的是可以通過這些規(guī)則自制工具把c接口頭文件轉(zhuǎn)化為ASN.l文件。2.1c語言簡單類型到ASN.l的類型進(jìn)行一定的對應(yīng)關(guān)系。2.2c語言數(shù)組映射ASN.l類型,不定長數(shù)組采用SEQUENCEOF對應(yīng);定長數(shù)組采用多個(gè)連續(xù)加數(shù)字后綴的字段,對于定長的INT8[SIZE]數(shù)組映射為OCTETST腿G(SIZE)。2.3整數(shù)宏可以映射ASN.l的ENUMERATED類型,并且對整數(shù)宏分組而給以組名,組名可以成為ASN.lENUMERATED的類型名稱。整數(shù)宏就是提供了對整數(shù)進(jìn)行選擇賦值的手段,宏不是模擬報(bào)文所必需的。2.4c語言的結(jié)構(gòu)采用ASN.l的SEQUENCE表述。接口中從字段可變類型采用ANY表述。3、完善c接口頭文件,目的是補(bǔ)充一些c語言結(jié)構(gòu),而這些結(jié)構(gòu)在接口定義中涉及的信息.根據(jù)1、2規(guī)范和映射關(guān)系,可以在接口頭文件增加傀儡一些結(jié)構(gòu),這些結(jié)構(gòu)是為了工具自動從c接口頭文件轉(zhuǎn)化ASN.l文件的需要而補(bǔ)充的,開發(fā)人員不使用。如c語言的不定數(shù)組用指針表示,整數(shù)宏組用注釋實(shí)現(xiàn)宏分組等,這樣轉(zhuǎn)化工具就可以將所有的c語言報(bào)文接口結(jié)構(gòu)轉(zhuǎn)換為ASN.l結(jié)構(gòu)。4、轉(zhuǎn)換模塊,目的是將c接口頭文件轉(zhuǎn)化為ASN.l文件。可以通過步驟1-2規(guī)則實(shí)現(xiàn)自制工具進(jìn)行轉(zhuǎn)換。5、插件制作模塊,將ASN文件編譯成插件,插件是具有一定接口的可執(zhí)行模塊,目的是實(shí)現(xiàn)可以靈活裝載或卸載的插件。具體可見專利一種ASN.l的報(bào)文構(gòu)造面向?qū)ο蠓椒?專利申請?zhí)?00610161964.X),這個(gè)步驟一般通過makefile完成。5.1對ASN.l報(bào)文編譯生成某種面向?qū)ο笳Z言的代碼。5.2將步驟5.1中的代碼進(jìn)一步生成具有特定接口的插件,此步驟可選。具體可見一種ASN.l的報(bào)文構(gòu)造面向?qū)ο蠓椒ā?、CER編碼模塊,實(shí)現(xiàn)ASN.l擴(kuò)展編碼規(guī)則CER。實(shí)現(xiàn)小端序和大端序兩種編碼方法,如果主機(jī)序是小端序,則要求整數(shù)類型對應(yīng)碼流符合INTEL主機(jī)內(nèi)存存儲格式,大端序要求整數(shù)類型采用和小端序相反的碼流順序,其它簡單類型碼流大小端序一致同計(jì)算機(jī)內(nèi)存存儲格式,數(shù)組采用第l條的規(guī)范編碼,而結(jié)構(gòu)中個(gè)其它字段的碼流依據(jù)其在結(jié)構(gòu)中的先后順序編碼。對于類型確定的結(jié)構(gòu)解碼采用相同的規(guī)則,而從字段根據(jù)主字段確定類型,再進(jìn)一步解碼。7、采用CER碼流和被測對象進(jìn)行交互。上述步驟1-3主要是準(zhǔn)備完整的c接口頭文件,為后續(xù)的處理做準(zhǔn)備,步驟4-5可以通過makefile方式自動實(shí)現(xiàn)。步驟6是編解碼規(guī)則的實(shí)現(xiàn),只要報(bào)文語法滿足l、2的要求,和具體報(bào)文無關(guān)。在程序開發(fā)中應(yīng)用可以直接用ASN.l作為接口定義語言,只要實(shí)現(xiàn)CER編解碼方法即可。由于c語言接口l報(bào)文在不同的軟件項(xiàng)目中使用,在規(guī)則和細(xì)節(jié)上可能要求有區(qū)別。這樣就可能實(shí)現(xiàn)ASN.l的類c擴(kuò)展規(guī)則有多種,但大同小異。第二步,進(jìn)一步描述該方案中的具體細(xì)節(jié)和關(guān)鍵(-)圖1描述了c語言基本類型到ASN.l類型的映射關(guān)系,包括了常用的各種整數(shù),布爾,無類型指針映射為ANY類型,一種步驟2.1的映射關(guān)系。在映射為ASN.l的類型加'S,前綴是為了防止和某些€++語言的類庫支持?jǐn)?shù)據(jù)類型名稱沖突。t)圖2描述了類C報(bào)文報(bào)文插件的生成過程,包括C接口頭文件的完善,到生成ASN.l文件,以及報(bào)文插件的編譯生成。步驟A.為了彌補(bǔ)c結(jié)構(gòu)定義中采用了自然語言,而導(dǎo)致一些接口信息在c接口結(jié)構(gòu)中缺失,可以采用一定的注釋格式彌補(bǔ),關(guān)于整數(shù)宏分組也采用注釋的辦法分組,提供組名。步驟B.彌補(bǔ)在接口規(guī)范文檔中定義了的信息,但是在c接口頭文件中沒有體現(xiàn)的信息,增加一些傀儡結(jié)構(gòu);或把同一個(gè)接口報(bào)文中分散的信息其中在一起,放在一個(gè)結(jié)構(gòu)中。經(jīng)常報(bào)文體做為報(bào)文頭末尾的一個(gè)ANY字段,而ANY類型字段,只能放一個(gè)結(jié)構(gòu),這就要求報(bào)文中的一些數(shù)據(jù)要集中在一個(gè)結(jié)構(gòu)中。步驟C.手工或轉(zhuǎn)化工具把c結(jié)構(gòu)頭文件轉(zhuǎn)化為ASN.l文件,主要是利用本發(fā)明實(shí)現(xiàn)的整體技術(shù)方案步驟1的規(guī)范和步驟2的規(guī)則。稱工具為h2asn。步驟D.利用現(xiàn)有的ASN.l編譯器生成C十+類結(jié)構(gòu),其中含有類結(jié)構(gòu)描述信息,這是編解碼規(guī)則的依據(jù)。本實(shí)施例中采用ESNACC做ASN.l的C十+編譯器。通過makefile直接生成含結(jié)構(gòu)描述信息的報(bào)文插件。曰圖3利用報(bào)文插件處理報(bào)文模塊調(diào)用關(guān)系,公共操作模塊封裝了對插件和各種編碼規(guī)則模塊的管理,供上層應(yīng)用功能調(diào)用。ASN.lC+十結(jié)構(gòu)和碼流格式之間的相互轉(zhuǎn)化,以及對碼流進(jìn)行的各種操作,腳本操作、報(bào)文編輯、報(bào)文比較、報(bào)文存儲的實(shí)現(xiàn)都要依賴插件中的結(jié)構(gòu)描述信息。步驟F.l€++類結(jié)構(gòu)實(shí)例采用各種編碼規(guī)則生成相應(yīng)的數(shù)據(jù)格式碼流。步驟F.2特定的數(shù)據(jù)格式碼流采用編碼規(guī)則可以解碼為的C+十類結(jié)構(gòu)實(shí)例。如果其中含有從字段,需要進(jìn)一步解碼。步驟G"i兌明可以通過不同的編碼少見則,和具有不同編碼MJ'j的^C測對象交互,指報(bào)文的模擬測試。步驟G.2通過BER編碼規(guī)則,就可以實(shí)現(xiàn)和使用BER規(guī)則的被測對象1的交互。步驟G.2通過CER編碼規(guī)則,就可以實(shí)現(xiàn)和類c結(jié)構(gòu)結(jié)構(gòu)凈艮文才莫擬和凈皮測對象2的交互。卿圖4ESNACC基本類結(jié)構(gòu)繼承體系。AsnType的頂層基類。ESNACC基本類繼承關(guān)系層次圖,ESNACC基本基類為AsnType,AsnType為抽象基類。在此之上繼承了一些簡單的類型來支持基本ASN.l數(shù)據(jù)類型如Asnlnt、AsnReal、AsnRelativeOid、AsnAny、AsnOcts、AsnBool、AsnNull、asnString,其中Asnlnt也由PERGgeneral派生,AsnEnum由Asnlnt派生,AsnOid由AsnRelativeOid派生;AsnList是實(shí)現(xiàn)其它Asn.1類的中間類型、AsnSetOf、AsnSeqOf由AsnList派生;使用了標(biāo)準(zhǔn)才莫板庫的std::string、std::list來進(jìn)一步支持SEQUENCEOF、SETOF等。一些應(yīng)用的字符串類型如VisibleString、GraphicString、Ia5String、PrintableString、NumericString是由基本字符串類型AsnString派生來的。其中GeneralizedTime、UTCTime由VisibleString派生。最后,結(jié)合具體實(shí)施例進(jìn)行具體說明該網(wǎng)管測試平臺的實(shí)例,詳細(xì)說明了報(bào)文構(gòu)造方法,本文采用ESNACCASN.l編譯平臺,實(shí)現(xiàn)CER的報(bào)文編解碼規(guī)則。在實(shí)施流程7中說明了在網(wǎng)管開發(fā)中的應(yīng)用。本發(fā)明可以適用于任何面向?qū)ο蟪绦蛘Z言實(shí)現(xiàn),本文主要結(jié)合€++討_論,也可以^使用其它面向?qū)ο蟮某绦蛘Z言,如JAVA語言實(shí)現(xiàn)。(一)測試才艮文來源本發(fā)明使用的報(bào)文來源于被測多個(gè)網(wǎng)管項(xiàng)目的子系統(tǒng)通信報(bào)文,網(wǎng)管中使用接口種類較多,每個(gè)網(wǎng)管由于版本不同,新版本的報(bào)文存在一定的增刪,要求測試平臺能夠模擬報(bào)文,提供各種報(bào)文操作功能。本文討論的類c接口報(bào)文有兩種,一種是基于不同主機(jī)間通訊的報(bào)文,一種是基于同一進(jìn)程內(nèi)不同模塊間的交互報(bào)文。前者要求是大端序,后者要求是主機(jī)序,主機(jī)序就有可能是小端序或大端序。(二)編譯平臺ESNACC是開放源碼的ASN.1編譯器,支持BER,PER編碼,在原來的基礎(chǔ)上已經(jīng)增加了VAL格式的數(shù)據(jù),可以實(shí)現(xiàn)VAL格式數(shù)據(jù)和C+十結(jié)構(gòu)實(shí)例之間的相互轉(zhuǎn)換。編譯器提供的ASN.l支持模塊ASN.l編譯器通常提供編譯器和底層支持模塊,編譯器將ASN.l文件編譯生成特定程序語言代碼,如C十+、Java。將ASN.l的結(jié)構(gòu)編譯成程序語言的類。底層支持模塊為生成的代碼執(zhí)行提供支持。如C十+中一般提供多個(gè)庫給可以給生成的代碼調(diào)用,其中包括ASN.l特定語言的基類和一些支持操作的功能。(三)接口報(bào)文處理流程在需要自動化模擬測試類c接口報(bào)文之前,先要規(guī)范接口的定義語法,在滿足接口的功能要求的同時(shí),語法不能有很強(qiáng)的隨意性;然后實(shí)現(xiàn)基于語法規(guī)范的CER編碼規(guī)則。在每個(gè)版本報(bào)文測試前,根據(jù)接口規(guī)范說明文檔完善c接口頭文件,采用轉(zhuǎn)換工具自動轉(zhuǎn)化c接口頭文件到ASN.l文件,之后做成報(bào)文插件,根據(jù)報(bào)文插件對模擬報(bào)文對報(bào)文進(jìn)行各種操作。1.要測試的數(shù)據(jù)類型簡單數(shù)據(jù)類型,結(jié)構(gòu),可變類型數(shù)據(jù),數(shù)組。前三種數(shù)據(jù)規(guī)則前面已經(jīng)說清楚了。就是數(shù)組的編碼可能有兩種情況,在本發(fā)明步驟1.1中對第一種數(shù)組情況。如typedefstruct{UINT32al;麗T32a2Num;A3—Struct*a31st;麗T16a德m;A5—Struct*a51st;麗T32a6;}AStruct;typedefstruct麗T16bl:■T16b2,蘭T32b3,}A3—Struct;typedefstructUINT32clUINT32c2UINT32c3}A5—Struct;在AStruct中有兩個(gè)不固定數(shù)組a31st、a51st,其中a2Num表示a31st中元素個(gè)數(shù),a4Num表示a51st中元素?cái)?shù)目,并且數(shù)目和數(shù)組所在的位置是相連的,表示元素?cái)?shù)目的整數(shù)所占位數(shù)可能各不一樣。a31st中的數(shù)據(jù)緊挨著a2Num之后,而a4Num,a51st,a6依次存放。第二種情況可能存在一些輔助結(jié)構(gòu),如本實(shí)施例中引入了下面的輔助結(jié)構(gòu)表示附加數(shù)據(jù)塊,主要目的是可以在c程序中不用指針表示數(shù)組。typedefstructUINT32uiOffset;麗T32uiTotalLength;UINT32uiCycleNum;}T—OFFSET—WITH—LEN;uiOffset:偏移量,指附加在結(jié)構(gòu)體后的數(shù)據(jù)塊相對其所在的結(jié)構(gòu)體開始處的偏移量;uiTotalLength:總長度,指附加數(shù)據(jù)塊的總長度。如果附加數(shù)據(jù)塊自身還包括子附加數(shù)據(jù)塊,則子附加數(shù)據(jù)塊必須緊隨其后,并且uiTotalLength也包含了所有子附加數(shù)據(jù)塊的長度;uiCycleNum表示當(dāng)附加數(shù)據(jù)塊是數(shù)組,其是數(shù)據(jù)結(jié)構(gòu)的實(shí)例個(gè)數(shù),否則其值為l表示其后只有一個(gè)結(jié)構(gòu)。具體使用輔助結(jié)構(gòu)的例子如下typedefstruct{U證32bl;T—OFFSET—WITH—LENb2;/*==ARRAY:A3—Struct*/UINT16b4Num;T—OFFSET—WITH—LENb5;/*==ARRAY:A5—Struct*/■T32b6;}BStruct;注釋"^ARRAY:A3—Struct*/表示其指定的數(shù)據(jù)塊是的A3—Struct的結(jié)構(gòu),這種注釋需要在c頭文件定義或完善階段實(shí)現(xiàn)。這種定義方式是方便h2asn自動分析,同時(shí)不影響開發(fā)人員的編譯代碼。2.關(guān)于整數(shù)宏的分組,在本實(shí)例中采用下面的注釋實(shí)現(xiàn),第一句表示宏組名為ASON—CMD—OPER—TYPE1的宏組開始,/*==MacroEnd;*/表示上一個(gè)宏組名結(jié)束。如果沒有某c頭文件內(nèi)宏沒有分組,就假設(shè)文件名帶某后綴作宏組名,其內(nèi)的宏同在一個(gè)宏組內(nèi)。/*==Macro:CMD—OPER—TYPE1;*/#defmeCMDADD—TYPE0x1#defmeCMDREMOVE—TYPE0x2#defmeCMD—MODIFY—TYPE0x3/*==MacroEnd;*/3.按照本發(fā)明所述步驟3根據(jù)接口規(guī)范文檔增加一些為轉(zhuǎn)換工具轉(zhuǎn)化服務(wù)的傀儡結(jié)構(gòu);4.利用圖2步驟C的轉(zhuǎn)化工具h(yuǎn)2asn,將c接口頭文件轉(zhuǎn)化為ASN.l文件。h2asn主要包括掃描、分析、輸出三個(gè)過程,掃描所有c接口頭文件,分析每個(gè)頭文件中的結(jié)構(gòu)及宏,本文件引用其它文件中哪些結(jié)構(gòu),按ASN.l的文件4各式輸出所有頭文件對應(yīng)的ASN.l文件。5.將ASN.l的報(bào)文編譯生成插件。6.按照本發(fā)明所述步驟1、2和實(shí)例1中的輔助結(jié)構(gòu)的編碼規(guī)則實(shí)現(xiàn)ASN.l的擴(kuò)展規(guī)則CER.對輔助結(jié)構(gòu)做專門處理,其它接口結(jié)構(gòu)采用按上述描述通用處理。把CER編解碼規(guī)則應(yīng)用到測試工具中模擬類c接口報(bào)文碼流,對纟皮測軟件進(jìn)行接口測試。7.在網(wǎng)管開發(fā)中,由于新網(wǎng)管要和老的網(wǎng)元設(shè)備通過Qx接口交互,網(wǎng)元設(shè)備采用的是類c報(bào)文,因此網(wǎng)管開發(fā)中直接釆用ASN.1作為Qx接口定義,采用擴(kuò)展的CER編碼規(guī)則直接進(jìn)行報(bào)文的編解碼。應(yīng)當(dāng)理解的是,對本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)本發(fā)明的技術(shù)方案的說明和具體實(shí)施方式做出各種可能的改變或替換,輔助接口結(jié)構(gòu)的數(shù)目和形式可以變化,注釋的形式可以不同,甚至對類c報(bào)文加上校驗(yàn)頭或其它輔助信息。權(quán)利要求1、一種類c結(jié)構(gòu)接口報(bào)文模擬處理方法,采用類c結(jié)構(gòu)接口報(bào)文與被測對象交互,其特征在于,還包括以下步驟A)利用編譯平臺和編解碼規(guī)則實(shí)現(xiàn)交互的類c結(jié)構(gòu)接口報(bào)文和底層的ASN.1報(bào)文相互轉(zhuǎn)換;B)基于ASN.1功能模塊實(shí)現(xiàn)類c結(jié)構(gòu)接口報(bào)文的底層模擬。2、根據(jù)權(quán)利要求1所述處理方法,其特征在于,所述編解碼規(guī)則包括類c語言數(shù)據(jù)類型和ASN.l數(shù)據(jù)類型的對應(yīng)關(guān)系。3、根據(jù)權(quán)利要求1所述處理方法,其特征在于,所述編解碼規(guī)則包括c接口頭文件中的傀結(jié)構(gòu)。4、根據(jù)權(quán)利要求1所述處理方法,其特征在于,所述編解碼規(guī)則包括對類c報(bào)文的語法規(guī)范。5、根據(jù)權(quán)利要求1所述處理方法,其特征在于,所述編譯平臺是支持8£1^£11編碼并能實(shí)現(xiàn)¥八1^格式數(shù)據(jù)和€++結(jié)構(gòu)實(shí)例相互轉(zhuǎn)換的八8仗1編譯器。6、根據(jù)權(quán)利要求1所述處理方法,其特征在于,所述被測對象和交互使用相同編碼規(guī)則。7、根據(jù)權(quán)利要求6所述處理方法,其特征在于,所述編碼規(guī)則是BER或PER規(guī)則。8、根據(jù)權(quán)利要求1所述處理方法,其特征在于,所述功能模塊包括腳本操作、報(bào)文編輯、報(bào)文比較和報(bào)文存儲。全文摘要本發(fā)明涉及一種類c結(jié)構(gòu)接口報(bào)文模擬處理方法,采用類c結(jié)構(gòu)接口報(bào)文與被測對象交互,還包括利用編譯平臺和編解碼規(guī)則實(shí)現(xiàn)交互的類c結(jié)構(gòu)接口報(bào)文和底層的ASN.1報(bào)文相互轉(zhuǎn)換;基于ASN.1功能模塊實(shí)現(xiàn)類c結(jié)構(gòu)接口報(bào)文的底層模擬。這種方法借助于接口描述語言ASN.1模擬類c語言結(jié)構(gòu)報(bào)文,不需要從底層報(bào)文結(jié)構(gòu)的表示方法開始做類c報(bào)文的模擬工作,和ASN.1統(tǒng)一了處理流程,減少了開發(fā)工作量,降低類c報(bào)文制作的難度和報(bào)文制作的工作量。文檔編號H04L12/24GK101222365SQ200810004718公開日2008年7月16日申請日期2008年1月23日優(yōu)先權(quán)日2008年1月23日發(fā)明者張新平申請人:中興通訊股份有限公司