一種基于ttcn3的編解碼通信方法
【專利摘要】本發(fā)明公開(kāi)了一種基于TTCN3的編解碼通信方法,包括:設(shè)置通信接口、編碼發(fā)送流程和解碼接收流程,具體地:設(shè)置通信接口:定義目標(biāo)語(yǔ)言可識(shí)別的數(shù)據(jù)結(jié)構(gòu)類型,將TTCN3指針類型的結(jié)構(gòu)體轉(zhuǎn)化為目標(biāo)語(yǔ)言可識(shí)別的結(jié)構(gòu)體;編碼發(fā)送流程:調(diào)用消息編碼函數(shù)將TTCN3格式碼流轉(zhuǎn)換成目標(biāo)語(yǔ)言格式碼流,并將目標(biāo)語(yǔ)言格式碼流通過(guò)send函數(shù)發(fā)送給目標(biāo)語(yǔ)言實(shí)體;解碼接收流程:接收目標(biāo)語(yǔ)言實(shí)體發(fā)送的消息并按消息標(biāo)識(shí)壓到對(duì)應(yīng)的消息隊(duì)列中,從消息隊(duì)列中讀取接收的碼流并調(diào)用解碼函數(shù)將碼流壓到解碼函數(shù)中解碼。如果解碼后的碼流與TTCN3期望的消息碼流一致則解碼成功,否則解碼失敗。本發(fā)明減少了工作量,使編解碼功能實(shí)現(xiàn)更簡(jiǎn)潔方便。
【專利說(shuō)明】—種基于TTCN3的編解碼通信方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于TTCN3的編解碼通信方法,屬于軟件工程【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]目前,通信軟件技術(shù)蓬勃發(fā)展,國(guó)際標(biāo)準(zhǔn)日趨完善,TTCN3 (Tree and TabularCombined Notat1n)成為國(guó)際標(biāo)準(zhǔn)中協(xié)議一致性測(cè)試框架的一部分,該語(yǔ)言力求適應(yīng)測(cè)試需求的不斷變化,為像ODP,CORBA, TINA, DCE等新的軟件架構(gòu),以及下一代網(wǎng)絡(luò)協(xié)議提供新的測(cè)試概念、測(cè)試架構(gòu)和功能強(qiáng)大的測(cè)試規(guī)范。基于TTCN3的測(cè)試系統(tǒng)有如下優(yōu)點(diǎn):支持外部自定義函數(shù)、支持定時(shí)器啟動(dòng)、提供了一種可編程的測(cè)試結(jié)構(gòu)以及開(kāi)發(fā)方便、簡(jiǎn)潔、同時(shí)具有良好的可維護(hù)性。TTCN3的這些優(yōu)點(diǎn)與特性,使其使用越來(lái)越廣泛,從實(shí)際應(yīng)用角度出發(fā),將其轉(zhuǎn)化為一個(gè)現(xiàn)實(shí)可用的系統(tǒng)是一項(xiàng)重要的工作。
【發(fā)明內(nèi)容】
[0003](一 )要解決的技術(shù)問(wèn)題
[0004]本發(fā)明要解決的技術(shù)問(wèn)題是:如何提供TTCN3與C實(shí)體通信的實(shí)現(xiàn)方法。
[0005]( 二 )技術(shù)方案
[0006]為解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種基于TTCN3的編解碼通信方法,包括:設(shè)置通信接口、編碼發(fā)送流程和解碼接收流程,具體如下:
[0007]設(shè)置通信接口:
[0008]定義目標(biāo)語(yǔ)言可識(shí)別的數(shù)據(jù)結(jié)構(gòu)類型,將TTCN3指針類型的結(jié)構(gòu)體轉(zhuǎn)化為目標(biāo)語(yǔ)言識(shí)別的結(jié)構(gòu)體;
[0009]編碼發(fā)送流程:
[0010]調(diào)用消息編碼函數(shù)將TTCN3格式碼流轉(zhuǎn)換成目標(biāo)語(yǔ)言格式碼流;
[0011]將目標(biāo)語(yǔ)言格式碼流通過(guò)send函數(shù)發(fā)動(dòng)給目標(biāo)語(yǔ)言實(shí)體;
[0012]解碼接收流程:
[0013]接收目標(biāo)語(yǔ)言實(shí)體發(fā)送的消息并按消息標(biāo)識(shí)壓到對(duì)應(yīng)的消息隊(duì)列中;
[0014]從消息隊(duì)列中讀取接收的碼流并調(diào)用解碼函數(shù)將碼流壓到解碼函數(shù)中解碼;
[0015]如果解碼后的碼流與TTCN3所期望消息的碼流一致則解碼成功,否則解碼失敗。
[0016]其中較優(yōu)地,所述調(diào)用消息編碼函數(shù)將TTCN3格式碼流轉(zhuǎn)換成目標(biāo)語(yǔ)言格式碼流的步驟進(jìn)一步包括:
[0017]通過(guò)子成員TTCN3結(jié)構(gòu)名字來(lái)判斷此子成員是否是空口消息,如果是空口消息則進(jìn)行ASN.1編碼,否則按數(shù)據(jù)類型進(jìn)行遞歸編碼。
[0018]其中較優(yōu)地,所述按數(shù)據(jù)類型進(jìn)行遞歸編碼的步驟進(jìn)一步包括:
[0019]TTCN3的碼流中獲取當(dāng)前待編碼成員的類型,按照當(dāng)前編碼成員類型編碼;
[0020]如果是基本類型,按照基本類型將其賦值給定義的目標(biāo)語(yǔ)言結(jié)構(gòu)體;
[0021]如果是un1n類型,先獲取成員的序列號(hào),將序列號(hào)值賦給自定義結(jié)構(gòu)體的成員序列號(hào)指示位,指示當(dāng)前un1n結(jié)構(gòu)體哪個(gè)成員存在,其次對(duì)被選中的成員進(jìn)行按類型遞歸編碼,直至所有結(jié)點(diǎn)成員均為基本類型;
[0022]如果是record類型,先獲取成員的個(gè)數(shù),按成員個(gè)數(shù)對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型;
[0023]如果是set類型,先獲取成員的個(gè)數(shù),按成員個(gè)數(shù)對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型。
[0024]其中較優(yōu)地,所述un1n類型遞歸編碼的步驟進(jìn)一步包括:
[0025]獲取un1n的字節(jié)長(zhǎng)度;
[0026]對(duì)un1n進(jìn)行前端對(duì)齊;
[0027]然后獲取TTCN3此類型中選取子成員的序列號(hào),并將序列號(hào)值賦給自定義結(jié)構(gòu)體的成員序列號(hào)指示位,說(shuō)明當(dāng)前選取的子成員存在,其他子成員均不存在;
[0028]對(duì)選取的子成員進(jìn)行按類型遞歸,直至結(jié)點(diǎn)成員為基本類型;
[0029]對(duì)基本類型進(jìn)行賦值;
[0030]進(jìn)行末端對(duì)齊。
[0031]其中較優(yōu)地,所述record類型遞歸編碼的步驟進(jìn)一步包括:
[0032]獲取成員個(gè)數(shù),對(duì)record進(jìn)行前端對(duì)齊;
[0033]按成員個(gè)數(shù)對(duì)每個(gè)子成員IE進(jìn)行遞歸編碼;
[0034]判斷子成員是否存在;
[0035]如果子成員存在,則對(duì)此子成員進(jìn)行遞歸編碼,直至結(jié)點(diǎn)成員為基本類型,且將值賦值給目標(biāo)結(jié)構(gòu)體;
[0036]如果子成員不存在,則將當(dāng)前子成員所占大小用O補(bǔ)齊;
[0037]最后進(jìn)行末端對(duì)齊。
[0038]其中較優(yōu)地,所述調(diào)用解碼函數(shù)將碼流壓到解碼函數(shù)中解碼的步驟進(jìn)一步包括:
[0039]通過(guò)成員TTCN3結(jié)構(gòu)名字來(lái)判斷此子成員是否是空口消息,如果是空口消息則進(jìn)行ASN.1解碼,否則進(jìn)行按類型的遞歸解碼。
[0040]其中較優(yōu)地,所述進(jìn)行按類型的遞歸解碼的步驟進(jìn)一步包括:
[0041]從TTCN3的碼流中獲取當(dāng)前待解碼成員的類型;
[0042]如果是基本類型,將目標(biāo)碼流的對(duì)應(yīng)值設(shè)置到TTCN3中相對(duì)應(yīng)的位置;
[0043]如果是un1n類型,從目標(biāo)碼流當(dāng)前位置取出指示當(dāng)前成員序列號(hào),并將指示當(dāng)前成員序列號(hào)設(shè)置到TTCN3中,對(duì)被解碼的成員進(jìn)行按類型遞歸編碼,直至所有結(jié)點(diǎn)成員均為基本類型,并將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中;
[0044]若為record類型,獲一級(jí)子成員的數(shù)量,對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型,并將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中;
[0045]若為set類型,先獲一級(jí)子成員的數(shù)量,對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型,并將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中。
[0046]其中較優(yōu)地,所述un1n類型歸遞解碼的步驟進(jìn)一步包括:
[0047]從目標(biāo)語(yǔ)言碼流當(dāng)前位置取出指示當(dāng)前成員序列號(hào),并將指示當(dāng)前成員序列號(hào)設(shè)置到TTCN3當(dāng)前目標(biāo)碼流中,
[0048]根據(jù)TTCN被解碼的成員的類型遞歸編碼,直至所有結(jié)點(diǎn)成員均為基本類型;
[0049]將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中。
[0050]其中較優(yōu)地,所述record類型歸遞解碼的步驟進(jìn)一步包括:
[0051]首先從TTCN中獲取成員個(gè)數(shù);
[0052]根據(jù)成員個(gè)數(shù)對(duì)每一個(gè)子成員進(jìn)行遞歸解碼;
[0053]判斷當(dāng)前成員是否存在;
[0054]如果當(dāng)前成員不存在,將TTCN3中代表不存在的值置入TTCN3中;
[0055]如果當(dāng)前成員存在則對(duì)當(dāng)前成員進(jìn)行遞歸解碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型,并將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中。
[0056]其中較優(yōu)地,所述目標(biāo)語(yǔ)言是C語(yǔ)言。
[0057](三)有益效果
[0058]本發(fā)明提供的基于TTCN3的編解碼通信方法,實(shí)現(xiàn)了 TTCN3與C語(yǔ)言實(shí)體的通信,使TTCN3這種特有的測(cè)試語(yǔ)言可以和C結(jié)合起來(lái),完成現(xiàn)實(shí)可用的系統(tǒng)。
【專利附圖】
【附圖說(shuō)明】
[0059]圖1為本發(fā)明技術(shù)方案所提供的接收發(fā)送碼流流程示意圖;
[0060]圖2為本發(fā)明技術(shù)方案所提供的編碼流程示意圖;
[0061]圖3為本發(fā)明技術(shù)方案所提供的un1n類型編碼流程示意圖;
[0062]圖4為本發(fā)明技術(shù)方案所提供的record類型編碼流程示意圖;
[0063]圖5為本發(fā)明技術(shù)方案所提供的解碼流程示意圖;
[0064]圖6為本發(fā)明技術(shù)方案所提供的un1n類型解碼流程示意示意圖;
[0065]圖7為本發(fā)明技術(shù)方案所提供的record類型解碼流程示意圖。
【具體實(shí)施方式】
[0066]下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的【具體實(shí)施方式】作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說(shuō)明本發(fā)明,但不用來(lái)限制本發(fā)明的范圍。
[0067]TTCN3是一種獨(dú)立的測(cè)試語(yǔ)言,有其獨(dú)特的使用方法和結(jié)構(gòu)體,怎樣將TTCN3與C實(shí)體聯(lián)通起來(lái),實(shí)現(xiàn)與C語(yǔ)言的正常通信,完成整個(gè)現(xiàn)實(shí)系統(tǒng)就是本發(fā)明的意義所在,本發(fā)明提供了 TTCN3編解碼及接口定義。一方面提供與TTCN3能夠進(jìn)行通信的C接口,為信息碼流提供載體;另一方面為碼流提供編解碼,使TTCN3的t3rt_valUe指針類型的結(jié)構(gòu)體能夠通過(guò)編解碼轉(zhuǎn)換成自定義的結(jié)構(gòu)體,被C語(yǔ)言識(shí)別,完成正常通信。
[0068]如圖1所示,本發(fā)明提供一種基于TTCN3的編解碼通信方法,包括:設(shè)置通信接口、編碼發(fā)送流程和解碼接收流程,具體如下:設(shè)置通信接口:設(shè)置通信接口:定義目標(biāo)語(yǔ)言可識(shí)別的數(shù)據(jù)結(jié)構(gòu)類型,將TTCN3指針類型的結(jié)構(gòu)體轉(zhuǎn)化為目標(biāo)語(yǔ)言識(shí)別的結(jié)構(gòu)體;編碼發(fā)送流程:調(diào)用消息編碼函數(shù)將TTCN3格式碼流轉(zhuǎn)換成目標(biāo)語(yǔ)言格式碼流;將目標(biāo)語(yǔ)言格式碼流通過(guò)send函數(shù)發(fā)動(dòng)給目標(biāo)語(yǔ)言實(shí)體;解碼接收流程:接收目標(biāo)語(yǔ)言實(shí)體發(fā)送的消息并按消息標(biāo)識(shí)壓到對(duì)應(yīng)的消息隊(duì)列中;從消息隊(duì)列中讀取接收的碼流并調(diào)用解碼函數(shù)將碼流壓到解碼函數(shù)中解碼;如果解碼后的碼流與TTCN3所期望消息的碼流一致則解碼成功,否則解碼失敗。
[0069]本發(fā)明提供的基于TTCN3的編解碼通信方法主要包括設(shè)置通信接口、編碼發(fā)送流程和解碼接收流程三部分,下面對(duì)本發(fā)明展開(kāi)詳細(xì)的說(shuō)明。
[0070]首先,介紹設(shè)置通信接口部分。
[0071 ] 在本發(fā)明中,將TTCN3的指針類型的結(jié)構(gòu)體轉(zhuǎn)化為C語(yǔ)言可以識(shí)別的結(jié)構(gòu)體,本發(fā)明在接口中為TTCN3的每一種數(shù)據(jù)類型定義一種對(duì)應(yīng)的C可以識(shí)別的數(shù)據(jù)結(jié)構(gòu)類型。
[0072]A.TTCN3中的“0P”信息指示IE,為一個(gè)字節(jié),用來(lái)指示該IE是否為可選(opt1nal)類型,I代表存在,O代表不存在。本發(fā)明定義為char型,一個(gè)字節(jié),I代表存在,O代表不存在。
[0073]B.TTCN3中的“Un1n”類型,一個(gè)Un1n包括多個(gè)子成員IE,每次只能對(duì)一個(gè)子成員進(jìn)行賦值。由此本發(fā)明定義一個(gè)子成員序列號(hào)指示位來(lái)指示此結(jié)構(gòu)體中使用哪一個(gè)子成員。
[0074]C.TTCN3中的“Record”類型,一個(gè)Record包括多個(gè)子成員IE,每次可以對(duì)多個(gè)子成員進(jìn)行賦值,且子成員可以是OP類型即可存在也可不存在。由此本發(fā)明為每一個(gè)OP類型的子成員前面定義一個(gè)OP指示參數(shù),來(lái)指示當(dāng)前子成員結(jié)構(gòu)體是否存在。
[0075]D.TTCN3中的“Set”類型,是一種集合類型,一個(gè)Set包括多個(gè)子成員IE,每次可以對(duì)多個(gè)子成員進(jìn)行賦值,且子成員可以是OP類型即可存在可不存在,由此本發(fā)明為每一個(gè)OP類型的子成員前面定義一個(gè)OP指示參數(shù),來(lái)指示當(dāng)前子成員結(jié)構(gòu)體是否存在,用法與record類型一致。
[0076]E.TTCN3 中的 string 類型,包括 bitstring、ocetstring、hetst;ring 三種類型,本發(fā)明將用string長(zhǎng)度和char型實(shí)際string數(shù)據(jù)來(lái)定義此TTCN3數(shù)據(jù)類型。
[0077]F.TTCN3 中的基本類型,包括“integer”、“boolean”、“enumerated”,本發(fā)明將其定義為 int、boolean 和 enumerated 類型。
[0078]其次,介紹編碼發(fā)送流程和解碼接收流程。
[0079]如圖2所示,基于TTCN3的編解碼通信方法接收發(fā)送碼流流程包括兩大主線程,接收和發(fā)送。下面以TTCN3與C語(yǔ)言相互通信為例對(duì)本發(fā)明展開(kāi)詳細(xì)說(shuō)明。如圖1所示,左側(cè)是發(fā)送線程,TTCN3運(yùn)行到Port, send語(yǔ)句即需要向外發(fā)送消息。向外發(fā)送消息時(shí)自動(dòng)調(diào)用在初始化時(shí)啟動(dòng)的此消息的編碼函數(shù),通過(guò)編碼函數(shù)將TTCN3格式的碼流轉(zhuǎn)換成自定義C語(yǔ)言可識(shí)別的結(jié)構(gòu)體格式的碼流。在將碼流通過(guò)send函數(shù)發(fā)送給C實(shí)體,完成L3與C實(shí)體的發(fā)送功能。右側(cè)是接收線程,通過(guò)receive線程收到C實(shí)體發(fā)送過(guò)來(lái)的消息后,根據(jù)消息的標(biāo)識(shí)ID,將不同的消息壓到對(duì)應(yīng)TTCN3的port 口的消息隊(duì)列中。當(dāng)TTCN3流程運(yùn)行到Port, receive語(yǔ)句即需要接收消息時(shí),會(huì)從此port 口的消息隊(duì)列中讀取接收到的碼流,并自動(dòng)調(diào)用初始化時(shí)啟動(dòng)的解碼函數(shù)。將消息隊(duì)列接收到的碼流壓到解碼函數(shù)中,進(jìn)行解碼,如果解碼后的碼流就是TTCN3中需要的消息內(nèi)容,則解碼成功,否則失敗。
[0080]編碼發(fā)送流程是將TTCN3的t3rt_valUe結(jié)構(gòu)類型,通過(guò)編碼轉(zhuǎn)化成上面所述結(jié)構(gòu)體,能夠在C語(yǔ)言下進(jìn)行通信傳輸。如圖2所示,對(duì)TTCN3結(jié)構(gòu)體進(jìn)行編碼時(shí),TTCN3調(diào)用編碼函數(shù),將TTCN3結(jié)構(gòu)類型的碼流輸入編碼函數(shù),通過(guò)編碼函數(shù)后輸出C語(yǔ)言可識(shí)別的結(jié)構(gòu)類型的碼流。在編碼函數(shù)中,通過(guò)子成員TTCN3結(jié)構(gòu)名字來(lái)判斷此子成員是否是空口消息,如果是空口消息則進(jìn)行ASN.1編碼,否則按數(shù)據(jù)類型進(jìn)行遞歸編碼。在對(duì)消碼流進(jìn)行遞歸編碼時(shí),由于C語(yǔ)言結(jié)構(gòu)體在內(nèi)存中存放有如下要求:1.每個(gè)成員的起始地址%每個(gè)成員的自身對(duì)齊值等于O。否則,補(bǔ)空字節(jié)直至表達(dá)式成立;2.結(jié)構(gòu)體的長(zhǎng)度必須為結(jié)體自身對(duì)齊值的整數(shù)倍,否則就補(bǔ)空字節(jié)。所以在對(duì)TTCN3結(jié)構(gòu)體進(jìn)行編碼時(shí),要對(duì)每一個(gè)成員進(jìn)行前端和后端對(duì)齊,將子結(jié)構(gòu)體中長(zhǎng)度最大的作為結(jié)構(gòu)體的長(zhǎng)度。
[0081]按類型進(jìn)行遞歸編碼,從TTCN3的碼流中獲取當(dāng)前待編碼成員的類型,如果當(dāng)前待編碼成員的類型是基本類型,就按照基本類型在內(nèi)存中的存放方式將其賦值給定義的C結(jié)構(gòu)體,依次將基本類型的實(shí)際值編入碼流。
[0082]如圖3所示,如果當(dāng)前待編碼成員的類型是un1n類型,先獲取指示當(dāng)前使用哪個(gè)子成員的序列號(hào)指示位,將指示位的值賦給自定義結(jié)構(gòu)體的成員序列號(hào)指示位,指示當(dāng)前un1n結(jié)構(gòu)體哪個(gè)成員存在,其次對(duì)被選中的成員進(jìn)行按類型遞歸編碼,直至所有結(jié)點(diǎn)成員均為基本類型。具體如下:首先獲取un1n的字節(jié)長(zhǎng)度,以字節(jié)最大的子成員的長(zhǎng)度作為整個(gè)un1n類型的字節(jié)長(zhǎng)度;其次對(duì)un1n進(jìn)行前端對(duì)齊;然后獲取TTCN3此類型中選取子成員的序列號(hào),并將此值賦值給自定義接口中的序列號(hào)指示位,說(shuō)明當(dāng)前選取的子成員存在,其他子成員均不存在;第四步對(duì)選取的子成員進(jìn)行按類型遞歸,直至結(jié)點(diǎn)成員為基本類型;第五步對(duì)基本類型進(jìn)行賦值;最后進(jìn)行末端對(duì)齊。
[0083]在TTCN3中record類型的消息可以同時(shí)存在多個(gè)一級(jí)子成員,且有的成員是opt1nal類型即可選的。如圖4所示如果當(dāng)前待編碼成員的類型是record類型,先獲取成員的count值即有多少個(gè)一級(jí)子成員,根據(jù)count值依次對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型。具體如下:首先從TTCN中獲取record類型的子成員IE個(gè)數(shù)(count);其次對(duì)record進(jìn)行前端對(duì)齊;然后按count值,對(duì)每個(gè)子成員IE進(jìn)行遞歸編碼,對(duì)每個(gè)成員IE進(jìn)行遞歸編碼時(shí),首先要判斷此子成員IE是否存在即判斷OP值。從TTCN3中獲取當(dāng)前成員是否為opt1nal類型,若為opt1nal類型,則要將opt1nal值賦值給C結(jié)構(gòu)對(duì)應(yīng)IE的char型OP指示IE,用來(lái)告知C實(shí)體當(dāng)前子結(jié)構(gòu)體是否存在。若opt1nal值為I說(shuō)明存在,則對(duì)此子成員IE進(jìn)行遞歸編碼,直至結(jié)點(diǎn)成員為基本類型,且將值賦值給C結(jié)構(gòu)體。。若opt1nal值為O說(shuō)明不存在,則將當(dāng)前子成員IE所占大小用O補(bǔ)齊;最后進(jìn)行末端對(duì)齊。
[0084]如果當(dāng)前待編碼成員的類型是set類型,set類型與record類型編碼方式完全一致。先獲取成員的count值即有多少個(gè)一級(jí)子成員,根據(jù)count值對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型。具體如下:首先獲取set類型的子成員IE個(gè)數(shù);其次對(duì)set進(jìn)行前端對(duì)齊;然后對(duì)每個(gè)子成員IE進(jìn)行遞歸編碼,對(duì)每個(gè)成員IE進(jìn)行遞歸編碼時(shí),首先要判斷此子成員IE是否存在即判斷OP值,若存在則對(duì)此子成員IE進(jìn)行遞歸編碼,直至結(jié)點(diǎn)成員為基本類型,若不存在則將當(dāng)前子成員IE所占大小用O補(bǔ)齊;最后進(jìn)行末端對(duì)齊。
[0085]如果當(dāng)前待編碼成員的類型是String類型,首先獲取string類型的長(zhǎng)度;其次對(duì)string進(jìn)行前端對(duì)齊;然后將string長(zhǎng)度編入自定義string結(jié)構(gòu)中的長(zhǎng)度指示位;第四步將實(shí)際的string內(nèi)容編入自定義結(jié)構(gòu)體中,由于TTCN3中的string是以ASCII的形式存在的,要先將ASCII碼轉(zhuǎn)化為對(duì)應(yīng)string類型才可以將string編入碼流之中;最后對(duì)String進(jìn)行末端對(duì)齊。
[0086]解碼接收流程是將由C語(yǔ)言可以傳輸?shù)慕Y(jié)構(gòu)體轉(zhuǎn)變成TTCN3的t3rt_value類型的結(jié)構(gòu)體,使C實(shí)體的消息能夠被TTCN3正確接收,完成數(shù)據(jù)的傳輸。解碼是編碼的逆過(guò)程,其實(shí)現(xiàn)也是編碼的反向。本發(fā)明提供的解碼方式是根據(jù)TTCN3結(jié)構(gòu)體進(jìn)行匹配的一種解碼方式,只有當(dāng)接收到的C碼流與TTCN3正在接收的結(jié)構(gòu)體保持一致時(shí),解碼才會(huì)成功。如圖5所示,對(duì)TTCN3結(jié)構(gòu)體進(jìn)行解碼時(shí),將從C實(shí)體接收到的碼流轉(zhuǎn)變成TTCN3可以識(shí)別的結(jié)構(gòu)類型碼流,并將解碼后碼流與TTCN3消息一一對(duì)比匹配,如果碼流與TTCN3消息全部匹配則解碼成功。在編碼函數(shù)中,通過(guò)成員TTCN3結(jié)構(gòu)名字來(lái)判斷此子成員是否是空口消息,如果是空口消息則進(jìn)行ASN.1解碼,否則進(jìn)行按類型的遞歸解碼。在對(duì)消息進(jìn)行遞解碼碼時(shí),由于C語(yǔ)言結(jié)構(gòu)體在內(nèi)存中并不是連續(xù)的,是有按對(duì)齊值補(bǔ)O的情況的,而TTCN3的消息碼流是連續(xù)的,所以在對(duì)從C結(jié)構(gòu)體傳到TTCN3的碼流進(jìn)行編碼時(shí),要對(duì)每一個(gè)成員的前端和后端對(duì)齊值進(jìn)行判斷,跳過(guò)對(duì)齊值補(bǔ)O位。下面對(duì)其解碼過(guò)程展開(kāi)詳細(xì)說(shuō)明。
[0087]按類型進(jìn)行遞歸解碼,首先從TTCN3的碼流中獲取當(dāng)前待解碼成員的類型,按不同解碼成員類型進(jìn)行遞歸解碼。
[0088]如果當(dāng)前待解碼成員的類型是基本類型,就按照基本類型將C碼流的對(duì)應(yīng)值設(shè)置到TTCN3中相對(duì)應(yīng)的位置即可。
[0089]如圖6所示,如果當(dāng)前待解碼成員的類型是un1n類型,首先從C碼流當(dāng)前位置取出char型成員指示index值,并將值設(shè)置set到TTCN3當(dāng)前目標(biāo)碼流un1n_index中,告知TTCN3un1n當(dāng)前是un1n結(jié)構(gòu)體中的哪個(gè)成員正在進(jìn)行解碼,其次根據(jù)TTCN被解碼的成員的類型類型遞歸編碼,直至所有結(jié)點(diǎn)成員均為基本類型,并將C結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中的對(duì)應(yīng)IE中。
[0090]如圖7所示,如果當(dāng)前待解碼成員的類型是record類型,首先從TTCN中獲取成員的個(gè)數(shù)(count值)即有多少個(gè)一級(jí)子成員,根據(jù)count值對(duì)每一個(gè)子成員進(jìn)行遞歸編碼。首先從C結(jié)構(gòu)碼流中獲取OP指示值從TTCN3中獲知當(dāng)前成員是否為OP類型。當(dāng)OP值為O值,若為0,則當(dāng)前成員不存在,將TTCN3中代表不存在的值omit置入TTCN3的對(duì)應(yīng)IE中。若不為0,則對(duì)當(dāng)前成員進(jìn)行遞歸解碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型,并將C結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中的對(duì)應(yīng)IE中。
[0091]如果當(dāng)前待解碼成員的類型是Set類型,set類型與record類型編碼方式完全一致。首先從待解碼的碼流中獲取成員個(gè)數(shù)count ;其次對(duì)每一個(gè)成員進(jìn)行解碼,對(duì)成員進(jìn)行解碼時(shí),首先要從TTCN3中獲知當(dāng)前成員是否為OP類型,如果為OP類型要從待解碼碼流中取出一個(gè)char來(lái)獲取OP值,當(dāng)OP值不為O時(shí),則對(duì)成員進(jìn)行遞歸解碼,直至所有結(jié)點(diǎn)成為為基本類型,當(dāng)OP值為O值,將omit設(shè)置到TTCN3的目標(biāo)碼流中。
[0092]如果當(dāng)前待解碼成員的類型是String類型,首先從待解碼的碼流中獲取string的長(zhǎng)度;其次將string的實(shí)際值轉(zhuǎn)換為ASCII碼設(shè)置到到TTCN3的目標(biāo)碼流中;最后將解碼初始位置跳過(guò)整個(gè)string類型。
[0093]綜上所述,本發(fā)明所記載的技術(shù)方案采用按TTCN3數(shù)據(jù)類型遞歸編解碼的方式,實(shí)現(xiàn)了 TTCN3與C語(yǔ)言實(shí)體的通信,使TTCN3這種特有的測(cè)試語(yǔ)言可以和C結(jié)合起來(lái),編解碼減少了編解碼的代碼工作量,使編解碼功能的實(shí)現(xiàn)更加簡(jiǎn)潔方便。
[0094]以上實(shí)施方式僅用于說(shuō)明本發(fā)明,而并非對(duì)本發(fā)明的限制,有關(guān)【技術(shù)領(lǐng)域】的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護(hù)范圍應(yīng)由權(quán)利要求限定。
【權(quán)利要求】
1.一種基于TTCN3的編解碼通信方法,其特征在于包括: 設(shè)置通信接口、編碼發(fā)送流程和解碼接收流程,具體如下: 設(shè)置通信接口: 定義目標(biāo)語(yǔ)言可識(shí)別的數(shù)據(jù)結(jié)構(gòu)類型,將TTCN3指針類型的結(jié)構(gòu)體轉(zhuǎn)化為目標(biāo)語(yǔ)言識(shí)別的結(jié)構(gòu)體; 編碼發(fā)送流程: 調(diào)用消息編碼函數(shù)將TTCN3格式碼流轉(zhuǎn)換成目標(biāo)語(yǔ)言格式碼流; 將目標(biāo)語(yǔ)言格式碼流通過(guò)send函數(shù)發(fā)動(dòng)給目標(biāo)語(yǔ)言實(shí)體; 解碼接收流程: 接收目標(biāo)語(yǔ)言實(shí)體發(fā)送的消息并按消息標(biāo)識(shí)壓到對(duì)應(yīng)的消息隊(duì)列中; 從消息隊(duì)列中讀取接收的碼流并調(diào)用解碼函數(shù)將碼流壓到解碼函數(shù)中解碼; 如果解碼后的碼流與TTCN3所期望消息的碼流一致則解碼成功,否則解碼失敗。
2.如權(quán)利要求1所述的編解碼通信方法,其特征在于,所述調(diào)用消息編碼函數(shù)將TTCN3格式碼流轉(zhuǎn)換成目標(biāo)語(yǔ)言格式碼流的步驟進(jìn)一步包括: 通過(guò)子成員TTCN3結(jié)構(gòu)名字來(lái)判斷此子成員是否是空口消息,如果是空口消息則進(jìn)行ASN.1編碼,否則按數(shù)據(jù)類型進(jìn)行遞歸編碼。
3.如權(quán)利要求3所述的編解碼通信方法,其特征在于,所述按數(shù)據(jù)類型進(jìn)行遞歸編碼的步驟進(jìn)一步包括: TTCN3的碼流中獲取當(dāng)前待編碼成員的類型,按照當(dāng)前編碼成員類型編碼; 如果是基本類型,按照基本類型將其賦值給定義的目標(biāo)語(yǔ)言結(jié)構(gòu)體; 如果是un1n類型,先獲取成員的序列號(hào),將序列號(hào)值賦給自定義結(jié)構(gòu)體的成員序列號(hào)指示位,指示當(dāng)前un1n結(jié)構(gòu)體哪個(gè)成員存在,其次對(duì)被選中的成員進(jìn)行按類型遞歸編碼,直至所有結(jié)點(diǎn)成員均為基本類型; 如果是record類型,先獲取成員的個(gè)數(shù),按成員個(gè)數(shù)對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型; 如果是set類型,先獲取成員的個(gè)數(shù),按成員個(gè)數(shù)對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型。
4.如權(quán)利要求3所述的編解碼通信方法,其特征在于,所述un1n類型遞歸編碼的步驟進(jìn)一步包括: 獲取un1n的字節(jié)長(zhǎng)度; 對(duì)un1n進(jìn)行前端對(duì)齊; 然后獲取TTCN3此類型中選取子成員的序列號(hào),并將序列號(hào)值賦給自定義結(jié)構(gòu)體的成員序列號(hào)指示位,說(shuō)明當(dāng)前選取的子成員存在,其他子成員均不存在; 對(duì)選取的子成員進(jìn)行按類型遞歸,直至結(jié)點(diǎn)成員為基本類型; 對(duì)基本類型進(jìn)行賦值; 進(jìn)行末端對(duì)齊。
5.如權(quán)利要求3所述的編解碼通信方法,其特征在于,所述record類型遞歸編碼的步驟進(jìn)一步包括: 獲取成員個(gè)數(shù),對(duì)record進(jìn)行前端對(duì)齊;按成員個(gè)數(shù)對(duì)每個(gè)子成員IE進(jìn)行遞歸編碼; 判斷子成員是否存在; 如果子成員存在,則對(duì)此子成員進(jìn)行遞歸編碼,直至結(jié)點(diǎn)成員為基本類型,且將值賦值給目標(biāo)結(jié)構(gòu)體; 如果子成員不存在,則將當(dāng)前子成員所占大小用O補(bǔ)齊; 最后進(jìn)行末端對(duì)齊。
6.如權(quán)利要求1所述的編解碼通信方法,其特征在于,所述調(diào)用解碼函數(shù)將碼流壓到解碼函數(shù)中解碼的步驟進(jìn)一步包括: 通過(guò)成員TTCN3結(jié)構(gòu)名字來(lái)判斷此子成員是否是空口消息,如果是空口消息則進(jìn)行ASN.1解碼,否則進(jìn)行按類型的遞歸解碼。
7.如權(quán)利要求6所述的編解碼通信方法,其特征在于,所述進(jìn)行按類型的遞歸解碼的步驟進(jìn)一步包括: 從TTCN3的碼流中獲取當(dāng)前待解碼成員的類型; 如果是基本類型,將目標(biāo)碼流的對(duì)應(yīng)值設(shè)置到TTCN3中相對(duì)應(yīng)的位置; 如果是un1n類型 ,從目標(biāo)碼流當(dāng)前位置取出指示當(dāng)前成員序列號(hào),并將指示當(dāng)前成員序列號(hào)設(shè)置到TTCN3中,對(duì)被解碼的成員進(jìn)行按類型遞歸編碼,直至所有結(jié)點(diǎn)成員均為基本類型,并將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中; 若為record類型,獲一級(jí)子成員的數(shù)量,對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型,并將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中; 若為set類型,先獲一級(jí)子成員的數(shù)量,對(duì)每一個(gè)子成員進(jìn)行遞歸編碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型,并將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中。
8.如權(quán)利要求7所述的編解碼通信方法,其特征在于,所述un1n類型歸遞解碼的步驟進(jìn)一步包括: 從目標(biāo)語(yǔ)言碼流當(dāng)前位置取出指示當(dāng)前成員序列號(hào),并將指示當(dāng)前成員序列號(hào)設(shè)置到TTCN3當(dāng)前目標(biāo)碼流中, 根據(jù)TTCN被解碼的成員的類型遞歸編碼,直至所有結(jié)點(diǎn)成員均為基本類型; 將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中。
9.如權(quán)利要求7所述的編解碼通信方法,其特征在于,所述record類型歸遞解碼的步驟進(jìn)一步包括: 首先從TTCN中獲取成員個(gè)數(shù); 根據(jù)成員個(gè)數(shù)對(duì)每一個(gè)子成員進(jìn)行遞歸解碼; 判斷當(dāng)前成員是否存在; 如果當(dāng)前成員不存在,將TTCN3中代表不存在的值置入TTCN3中; 如果當(dāng)前成員存在則對(duì)當(dāng)前成員進(jìn)行遞歸解碼,直至每個(gè)結(jié)點(diǎn)成員均為基本類型,并將目標(biāo)語(yǔ)言結(jié)構(gòu)中基本類型的實(shí)際值設(shè)置到TTCN3中。
10.如權(quán)利要求1-9任意一項(xiàng)所述的編解碼通信方法,其特征在于,所述目標(biāo)語(yǔ)言是C;五古P口口 ο
【文檔編號(hào)】H04L1/00GK104052575SQ201410220138
【公開(kāi)日】2014年9月17日 申請(qǐng)日期:2014年5月22日 優(yōu)先權(quán)日:2014年5月22日
【發(fā)明者】王立娜, 范志成 申請(qǐng)人:北京星河亮點(diǎn)技術(shù)股份有限公司