欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

通信系統(tǒng)消息的編解碼方法及編、解碼器的制作方法

文檔序號:7969875閱讀:372來源:國知局
專利名稱:通信系統(tǒng)消息的編解碼方法及編、解碼器的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及通信領(lǐng)域中的編解碼技術(shù),尤其涉及一種通信系統(tǒng)消息的編解碼方法及編碼器和解碼器。
背景技術(shù)
通信系統(tǒng)中的消息一般以文檔形式進(jìn)行描述和定義,通過計算機(jī)將其轉(zhuǎn)換為計算機(jī)能夠處理的格式,從而實現(xiàn)對消息的編解碼。在編碼過程中,計算機(jī)將通信系統(tǒng)消息轉(zhuǎn)換為通信系統(tǒng)設(shè)備能夠處理的比特流;在解碼過程中,計算機(jī)將消息比特流解碼為人們能夠識別的消息描述。
通信系統(tǒng)消息中包含若干信息單元(Information Element,IE),用于攜帶不同類型的信息。IE具有不同的屬性,如可選、必選或可重復(fù)出現(xiàn);IE之間還存在邏輯關(guān)系,如一個信息單元包含多個信息單元,前者作為組,后者作為該組的成員??梢哉f通信系統(tǒng)消息是由多個IE組合嵌套形成的。有些消息,如Diameter消息,IE數(shù)量較多、IE間的邏輯性較強(qiáng),因此對編解碼的效率要求也隨之較高。
Diameter協(xié)議的最初提出是作為Radius協(xié)議的改進(jìn)或者替代,它的引入是作為支持基于IP技術(shù)的AAA框架的AAA協(xié)議,其主要有如下功能認(rèn)證(Authentication)用戶在使用網(wǎng)絡(luò)系統(tǒng)中的資源時對用戶身份的確認(rèn);授權(quán)(Authorization)網(wǎng)絡(luò)系統(tǒng)授權(quán)用戶以特定的方式使用其資源;計費(Accounting)網(wǎng)絡(luò)系統(tǒng)收集、記錄用戶對網(wǎng)絡(luò)資源的使用,以便向用戶收取資源使用費用,或者用于審計等目的。
參見圖1,為Diameter的消息格式示意圖。
Diameter消息由消息頭和消息體組成,圖1給出了消息頭格式。Diameter消息的頭部包括20個字節(jié),頭4個字節(jié)是8bit的版本信息(Version)和24bit的消息長度(Message Lenth,包括消息頭長度)。隨后的4個字節(jié)是8bit的消息標(biāo)志位和24bit的命令代碼(Command-Code)。應(yīng)用標(biāo)識(Application-Code)、逐跳標(biāo)識(Hop-by-Hop Identifier)和端到端標(biāo)識(End-to-End Identifier)都有4個字節(jié),其中應(yīng)用標(biāo)識用以指示消息適用的應(yīng)用,逐跳標(biāo)識用于判斷請求與應(yīng)答的對應(yīng)關(guān)系,而端到端標(biāo)識主要用于重復(fù)消息的檢查。
消息頭部后的全部字節(jié)就是消息體的具體內(nèi)容,以屬性值對(AVP,Attribute-Value-Pair)的形式逐個頭尾銜接。AVP的格式也是由頭部和數(shù)據(jù)組成。
參見圖2,為DiameterAVP格式示意圖。
如圖2所示,AVP的頭結(jié)構(gòu)為頭4個字節(jié)是AVP代碼(AVP Code),隨后的4個字節(jié)由8bit的AVP標(biāo)志和24bit的AVP長度(AVP Length,包括AVP頭部長度)構(gòu)成,AVP標(biāo)志用于通知接收端如何處理這個屬性。
頭部后的字節(jié)就是數(shù)據(jù)內(nèi)容。不同的AVP可能具有不同的數(shù)據(jù)類型,如UTF8string、Unsigned32、Unsigned64、Enumerated,以及Group等。
AVP中各部分的含義如下AVP CodeAVP的類別,例如Original-Host AVP的Code值為264;V標(biāo)識本AVP頭之中是否出現(xiàn)Vendor-ID字段;M標(biāo)識本AVP是否屬于必需AVP,就一個特定的Diameter命令而言,有一些AVP是必須出現(xiàn)的,例如Original-Host AVP和Original-Realm AVP在任何Diameter消息之中都是必須出現(xiàn)的,Session-ID AVP在Diameter的計費應(yīng)用命令字之中必須出現(xiàn);P標(biāo)識本AVP的數(shù)據(jù)部分是否經(jīng)過了加密;AVP Length本AVP包含數(shù)據(jù)部分的長度,任何AVP的數(shù)據(jù)部分長度都必須為4的整數(shù)倍,不夠的以“\0”填充;Vendor-ID可選,標(biāo)識生成本AVP值的設(shè)備的供應(yīng)商;Data記錄具體的數(shù)據(jù)值,具體數(shù)據(jù)的類型是由AVP Code決定的。
表1為一個Diameter消息內(nèi)容的實例表1

由上表可知,AVP具有以下特點
1、AVP的邏輯性強(qiáng),各AVP具有不同的數(shù)據(jù)類型,還具有必需/可選屬性、是否可重復(fù)出現(xiàn)屬性,GROUP類型的AVP還包含子AVP等;2、AVP的必需/可選屬性、可重復(fù)出現(xiàn)屬性使得AVP的排列順序和Diameter消息的總長度是不確定的;3、一般應(yīng)用中Diameter消息中需要攜帶數(shù)量較多的AVP,如在3GPP TS32.260 V6.2.0中為IMS定義的CCR(Credit Control Request)的AVP數(shù)量達(dá)一百多個;4、實際應(yīng)用還需要根據(jù)業(yè)務(wù)需要去自定義AVP。
由于以上的原因使得Diameter消息體中對AVP編解碼及其煩瑣,并且誤碼率高。Diameter消息體中AVP編碼的傳統(tǒng)做法是針對消息定義中的每個AVP按一個一個字節(jié)填寫消息體;Diameter消息體中AVP解碼的傳統(tǒng)做法是按消息體中字節(jié)順序遍歷所有AVP代碼,獲得需要的AVP時,再按字節(jié)獲取孤立的AVP的值。由于Diameter消息體中AVP的數(shù)量和順序的不確定的特點,現(xiàn)有技術(shù)中不能用傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)定義Diameter消息體。
這也就導(dǎo)致了在現(xiàn)有技術(shù)中存在以下不足應(yīng)用不能按數(shù)據(jù)結(jié)構(gòu)的形式操作Diameter消息體,需要根據(jù)每個AVP的邏輯進(jìn)行處理生成Diameter消息體,這中間過程煩瑣,且按字節(jié)填寫消息體導(dǎo)致誤碼率高;同時還因存在按業(yè)務(wù)需要自定義AVP,這使得對消息體的維護(hù)很不容易,需要在消息定義中增刪改AVP時修改量大。

發(fā)明內(nèi)容
本發(fā)明提供一種通信系統(tǒng)消息編解碼的方法,用以解決現(xiàn)有技術(shù)中存在的在處理結(jié)構(gòu)復(fù)雜的通信系統(tǒng)消息時過程煩瑣、誤碼率高、維護(hù)難度大的問題。
本發(fā)明另提供一種通信系統(tǒng)消息的編碼器,用以解決現(xiàn)有技術(shù)中存在的在編碼結(jié)構(gòu)復(fù)雜的通信系統(tǒng)消息時過程煩瑣、誤碼率高、維護(hù)難度大的問題。
本發(fā)明還提供一種通信系統(tǒng)消息的解碼器,用以解決現(xiàn)有技術(shù)中存在的在解碼結(jié)構(gòu)復(fù)雜的通信系統(tǒng)消息時過程煩瑣、誤碼率高、不易維護(hù)的問題。
本發(fā)明實施例的方法包括步驟按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該結(jié)構(gòu)的成員;并根據(jù)所述信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型;當(dāng)編碼所述通信系統(tǒng)消息時,按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型輸入數(shù)據(jù)結(jié)構(gòu)成員的編碼數(shù)據(jù),并逐一對所述數(shù)據(jù)結(jié)構(gòu)成員進(jìn)行編碼,得到所述通信系統(tǒng)消息的消息流數(shù)據(jù);當(dāng)解碼所述通信系統(tǒng)消息時,按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型讀取所述通信系統(tǒng)消息流數(shù)據(jù),并逐一對讀取到的所述數(shù)據(jù)結(jié)構(gòu)成員進(jìn)行解碼,得到所述通信系統(tǒng)消息的解碼數(shù)據(jù)。
根據(jù)本發(fā)明的上述方法,所述根據(jù)信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型,包括將非組類型的信息元素定義為基本數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)成員,將組類型的信息元素定義為數(shù)據(jù)結(jié)構(gòu),其組成員作為該數(shù)據(jù)結(jié)構(gòu)的成員;并若所述通信系統(tǒng)消息中的信息元素的屬性為可重復(fù),則定義對應(yīng)的數(shù)據(jù)結(jié)構(gòu)成員的類型為列表。
上述方法中,所述按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型輸入數(shù)據(jù)結(jié)構(gòu)成員的編碼數(shù)據(jù),包括所述數(shù)據(jù)結(jié)構(gòu)為所述通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)時,若該數(shù)據(jù)結(jié)構(gòu)的成員類型為基本數(shù)據(jù)類型,則將對應(yīng)的信息元素的編碼數(shù)據(jù)記錄到該數(shù)據(jù)結(jié)構(gòu)成員中;若所述數(shù)據(jù)結(jié)構(gòu)為組類型信息元素所對應(yīng)的數(shù)據(jù)結(jié)構(gòu),則將其組成員信息元素的編碼數(shù)據(jù)記錄到該數(shù)據(jù)結(jié)構(gòu)的成員中;并若數(shù)據(jù)結(jié)構(gòu)成員的類型為列表,則將該數(shù)據(jù)結(jié)構(gòu)成員每次的編碼數(shù)據(jù)作為列表項記錄到該列表中;所述按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型讀取所述通信系統(tǒng)消息流數(shù)據(jù),包括所述數(shù)據(jù)結(jié)構(gòu)為所述通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)時,若該數(shù)據(jù)結(jié)構(gòu)成員類型為基本數(shù)據(jù)類型,則將對應(yīng)的信息元素的消息流數(shù)據(jù)記錄到該數(shù)據(jù)結(jié)構(gòu)成員中;若所述數(shù)據(jù)結(jié)構(gòu)為組類型信息元素所對應(yīng)的數(shù)據(jù)結(jié)構(gòu),則將其組成員信息元素的消息流數(shù)據(jù)記錄到該數(shù)據(jù)結(jié)構(gòu)的成員中;并若數(shù)據(jù)結(jié)構(gòu)成員的類型為列表,則將該數(shù)據(jù)結(jié)構(gòu)成員每次出現(xiàn)的消息流數(shù)據(jù)作為列表項記錄到該列表中。
所述列表的大小依據(jù)所述數(shù)據(jù)結(jié)構(gòu)成員的重復(fù)出現(xiàn)的次數(shù)而變化。
根據(jù)本發(fā)明的上述方法,還進(jìn)一步包括步驟若所述信息元素的屬性為必選,當(dāng)編碼所述通信系統(tǒng)消息時,若對應(yīng)的數(shù)據(jù)結(jié)構(gòu)成員不存在,則返回錯誤信息;當(dāng)解碼所述通信系統(tǒng)消息時,若未獲取到對應(yīng)的消息流數(shù)據(jù),則返回錯誤信息。
根據(jù)本發(fā)明的上述方法,還進(jìn)一步包括步驟根據(jù)所述通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成編解碼接口;當(dāng)編碼所述通信系統(tǒng)消息時,調(diào)用所述編碼接口進(jìn)行編碼;當(dāng)解碼所述通信系統(tǒng)消息時,調(diào)用所述解碼接口進(jìn)行解碼。
上述方法中,所述根據(jù)所述通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成編解碼接口,包括分別為所述通信系統(tǒng)消息對應(yīng)的數(shù)據(jù)結(jié)構(gòu),以及所有組類型信息元素所對應(yīng)的數(shù)據(jù)結(jié)構(gòu)生成編解碼接口,并根據(jù)所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系生成所述編解碼接口的調(diào)用關(guān)系,并為所有數(shù)據(jù)結(jié)構(gòu)中的基本數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)成員指定編解碼接口。
上述方法中,根據(jù)對應(yīng)的信息元素的數(shù)據(jù)類型,為所述基本數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)成員指定相應(yīng)數(shù)據(jù)類型的編解碼接口。
根據(jù)本發(fā)明的上述方法,在按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu)之前,還進(jìn)一步包括步驟
配置所述通信系統(tǒng)消息的定義文件,所述文件中描述所述通信系統(tǒng)消息中的所有信息元素及其屬性和邏輯關(guān)系;在按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu)步驟中,按照所述定義文件將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu)。
所述通信系統(tǒng)消息的定義文件中用符號或格式,標(biāo)識所述信息元素的屬性和關(guān)系。
當(dāng)通信系統(tǒng)消息的結(jié)構(gòu)變化時,重新配置所述通信系統(tǒng)消息的定義文件。
本發(fā)明實施例提供的通信系統(tǒng)消息的編碼器,包括結(jié)構(gòu)定義模塊,用于按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該數(shù)據(jù)結(jié)構(gòu)的成員;并根據(jù)所述信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型;編碼模塊,用于按照所述結(jié)構(gòu)定義模塊定義的數(shù)據(jù)結(jié)構(gòu)和其成員類型輸入成員的編碼數(shù)據(jù),并逐一對所述成員進(jìn)行編碼,得到所述通信系統(tǒng)消息的編碼代碼。
上述編碼器還包括編碼接口生成模塊,用于根據(jù)所述結(jié)構(gòu)定義模塊定義的通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成編碼接口;當(dāng)編碼所述通信系統(tǒng)消息時,所述編碼模塊用于調(diào)用所述編碼接口生成模塊生成的編碼接口進(jìn)行編碼。
上述編碼器還包括文件定義模塊,用于配置所述通信系統(tǒng)消息的定義文件,所述文件中描述所述通信系統(tǒng)消息中的所有信息元素及其屬性和邏輯關(guān)系;所述結(jié)構(gòu)定義模塊用于按照所述文件定義模塊中配置的定義文件對所述通信系統(tǒng)消息進(jìn)行結(jié)構(gòu)定義。
本發(fā)明實施例提供的通信系統(tǒng)消息的解碼器包括結(jié)構(gòu)定義模塊,用于按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該數(shù)據(jù)結(jié)構(gòu)的成員;并根據(jù)所述信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型;解碼模塊,用于按照所述結(jié)構(gòu)定義模塊定義的數(shù)據(jù)結(jié)構(gòu)和其成員類型讀取所述通信系統(tǒng)消息流數(shù)據(jù),并逐一對讀取到的所述成員進(jìn)行解碼,得到所述通信系統(tǒng)消息的解碼數(shù)據(jù)。
上述解碼器還包括解碼接口生成模塊,用于根據(jù)所述結(jié)構(gòu)定義模塊定義的通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成解碼接口;當(dāng)解碼所述通信系統(tǒng)消息時,所述解碼模塊用于調(diào)用所述解碼接口模塊生成的解碼接口進(jìn)行解碼。
上述解碼器還包括文件定義模塊,用于配置所述通信系統(tǒng)消息的定義文件,所述文件中描述所述通信系統(tǒng)消息中的所有信息元素及其屬性和邏輯關(guān)系;所述結(jié)構(gòu)定義模塊用于按照所述文件定義模塊中配置的定義文件對所述通信系統(tǒng)消息進(jìn)行結(jié)構(gòu)定義。
本發(fā)明有益效果如下(1)本發(fā)明通過將通信系統(tǒng)消息中的所有信息元素按照其屬性和邏輯關(guān)系進(jìn)行重新組織,建立數(shù)據(jù)結(jié)構(gòu)并指定其結(jié)構(gòu)成員,并定義數(shù)據(jù)結(jié)構(gòu)成員的類型,從而能夠依據(jù)該數(shù)據(jù)結(jié)構(gòu)和其成員類型實現(xiàn)編碼和解碼過程,提高了通信系統(tǒng)消息的編解碼效率,降低了誤碼率。
(2)本發(fā)明在對通信系統(tǒng)消息中的信息元素進(jìn)行數(shù)據(jù)結(jié)構(gòu)定義和數(shù)據(jù)結(jié)構(gòu)成員類型定義的基礎(chǔ)上,自動生成編解碼接口,當(dāng)編解碼時只要調(diào)用相應(yīng)的編解碼接口即可實現(xiàn)通信系統(tǒng)消息的編解碼,從而使編解碼過程更加簡捷。
(3)本發(fā)明通過配置通信系統(tǒng)消息的定義文件,描述通信系統(tǒng)消息中所有信息元素及其屬性和邏輯關(guān)系,并依據(jù)該定義文件對通信系統(tǒng)消息進(jìn)行結(jié)構(gòu)定義和生成編解碼接口,當(dāng)通信系統(tǒng)消息結(jié)構(gòu)改變時,只需重新配置該定義文件,重新生成編解碼接口,從而提高了編解碼過程的可維護(hù)性。


圖1為Diameter的消息格式示意圖;圖2為Diameter AVP格式示意圖;圖3為本發(fā)明實施例的Diameter消息體AVP邏輯描述鏈表;圖4為本發(fā)明實施例的Diameter消息體AVP邏輯描述的流程示意圖;圖5為本發(fā)明實施例的Diameter消息體的結(jié)構(gòu)化定義過程示意圖;圖6為本發(fā)明實施例的Diameter消息體的編碼接口實現(xiàn)的流程示意圖;圖7為本發(fā)明實施例的Diameter消息體的解碼接口實現(xiàn)的流程示意圖;圖8為本發(fā)明實施例的通信系統(tǒng)消息的編碼器的結(jié)構(gòu)示意圖;圖9為本發(fā)明實施例的通信系統(tǒng)消息的解碼器的結(jié)構(gòu)示意圖。
具體實施例方式
為了使本發(fā)明的目的、技術(shù)方案和有益效果清楚明白,下面結(jié)合附圖對本發(fā)明的實施例進(jìn)行詳細(xì)描述。
本發(fā)明的實施例根據(jù)通信系統(tǒng)消息中的IE的屬性和邏輯關(guān)系,將IE重新組織并定義通信系統(tǒng)消息的結(jié)構(gòu),并提供消息體編解碼接口,以此實現(xiàn)對通信系統(tǒng)消息的編解碼。
首先,按照通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該結(jié)構(gòu)的成員;并根據(jù)信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型;當(dāng)編碼所述通信系統(tǒng)消息時,按照數(shù)據(jù)結(jié)構(gòu)和其成員類型輸入成員的編碼數(shù)據(jù),并逐一對成員進(jìn)行編碼,得到通信系統(tǒng)消息流數(shù)據(jù);當(dāng)解碼所述通信系統(tǒng)消息時,按照數(shù)據(jù)結(jié)構(gòu)和其成員類型讀取所述通信系統(tǒng)消息流數(shù)據(jù),并逐一對讀取到的成員進(jìn)行解碼,得到通信系統(tǒng)消息的解碼數(shù)據(jù)。
下面以Diameter消息的編解碼過程為例,對本發(fā)明實施例進(jìn)行詳細(xì)描述。
根據(jù)上述描述,在對Diameter消息進(jìn)行編碼前,首先要定制Diameter消息體定義文件,以此作為Diameter消息體編解碼源代碼生成工具的輸入。Diameter消息體定義文件對Diameter消息中所有的AVP進(jìn)行描述,包括對AVP的所有屬性(如必選/可選屬性、是否可重復(fù)出現(xiàn)屬性等)、AVP類型(AVPCode),以及AVP間的邏輯關(guān)系進(jìn)行描述。Diameter消息體定義文件可以為文本文件、EXCEL文件等可方便讀取及編輯的文件格式。表2是在EXCEL表格中定義的Diameter消息體的一個實例。
表2


表2中各AVP的屬性由不同的符號和格式表示<AVP>表明是必選的AVP而且位置固定;{AVP}表明是必選的AVP;[AVP]表明是可選的AVP;*AVP表明這個AVP可以出現(xiàn)多次;AVP的縮進(jìn)表示AVP組的成員。
Diameter消息體定義文件的作用是直觀地描述Diameter消息,并依據(jù)該文件生成Diameter消息的邏輯描述,以此實現(xiàn)Diameter消息體結(jié)構(gòu)化定義和編解碼接口的實現(xiàn)。
Diameter消息的邏輯描述過程,即,將Diameter消息體定義文件組織為鏈表形式,并對各IE的屬性和邏輯關(guān)系用參數(shù)進(jìn)行描述。根據(jù)Diameter消息體定義文件生成Diameter消息體中AVP的邏輯描述的過程如下所述。
以C++為例,通過如下的數(shù)據(jù)結(jié)構(gòu)來組織如表2中定義的Diameter消息體中的所有AVPtypedef std::vector<CAvpDic>TAvpDicList;typedef struct_CAvpDic{std::string m_strAvpName;//AVP名稱short m_nAvpCode;//AVP codeint m_enAvpType;//AVP類型,如Unsigned32,UTF8String,Grouped等int m_enAvpFlag;//標(biāo)記AVP必需且位置固定,必需,可選boolm_bRepetitious;//標(biāo)記AVP是否可以重復(fù)出現(xiàn)
TAvpDicListm_GroupMemberList;//當(dāng)AVP為Grouped時記錄所有的子AVP項}CAvpDic在源代碼生成工具中,讀入Diameter消息體定義文件中的所有AVP及其屬性,按照上述定義的數(shù)據(jù)結(jié)構(gòu)生成Diameter消息體的AVP邏輯描述。如表2中定義的Diameter消息體可以組織為類似圖3的鏈表,該鏈表的生成過程如圖4所示。
參見圖4,為本發(fā)明實施例的Diameter消息體AVP邏輯描述的流程示意圖,具體步驟包括S401、讀取Diameter消息體定義文件。
S402、遍歷Diameter消息中所有的AVP。
S403、若AVPName列中含“*”,設(shè)置m_bRepetitious為TRUE,表示該AVP可以重復(fù)出現(xiàn);S404、若AVPName列中含“<”,設(shè)置m_enAvpFlag為“位置固定”標(biāo)記;若AVPName列中含“{”,設(shè)置m_enAvpFlag為“必需”標(biāo)記;若AVPName列中含“[”,設(shè)置m_enAvpFlag為“可選”標(biāo)記;S405、去除AVPName列中的“*“、“<”、“>”、“{”、“}”、“[”、“]”字符,記錄到m_strAvpName中;S406、將AVP CODE列記錄到m_nAvpCode;S407、將Value type列記錄到m_enAvpType;S408、若該行沒有縮進(jìn),將該AVP記錄到Diameter消息的AVP列表(圖3中表示為ROOT接點);若該行有縮進(jìn),將該AVP記錄到上層AVP的m_GroupMemberList列表中。返回步驟S402。
S409、當(dāng)完成對所有IE的描述后,結(jié)束流程。
為了實現(xiàn)Diameter消息的自動編碼和自動解碼,還要根據(jù)Diameter消息的AVP邏輯描述生成Diameter消息的結(jié)構(gòu)化定義和編碼和解碼的目標(biāo)源代碼。編解碼目標(biāo)源代碼旨在給業(yè)務(wù)提供Diameter消息體的成員結(jié)構(gòu)定義和編解碼接口。
Diameter消息體結(jié)構(gòu)化定義的原則為1)將消息體定義為一個數(shù)據(jù)結(jié)構(gòu),各AVP為此結(jié)構(gòu)的成員;2)將類型為Grouped的AVP定義為數(shù)據(jù)結(jié)構(gòu),其子AVP為該結(jié)構(gòu)的成員;類型為Grouped的AVP所對應(yīng)的數(shù)據(jù)結(jié)構(gòu)可以作為消息體對應(yīng)的數(shù)據(jù)結(jié)構(gòu)的成員;3)將屬性為可選的AVP以指針的形式定義,當(dāng)指針為NULL時表示該AVP將不在消息體中出現(xiàn);4)將屬性為可重復(fù)出現(xiàn)的AVP以列表的形式定義,列表的大小可隨重復(fù)出現(xiàn)的AVP的數(shù)量而變。
參見圖5,為本發(fā)明實施例的Diameter消息體的結(jié)構(gòu)化定義過程示意圖,包括步驟S501、打開頭文件。若處理的是Diameter消息,打開Diameter消息的.h文件,否則打開Grouped AVP的.h文件。
S502、生成數(shù)據(jù)結(jié)構(gòu)名。若處理的是Diameter消息,生成Diameter消息的結(jié)構(gòu)名稱,否則生成AVP的結(jié)構(gòu)名稱。
S503、遍歷m_GroupMemberList中的所有成員,若完成則轉(zhuǎn)至步驟S512;否則執(zhí)行步驟S504。
S504、判斷m_enAvpFlag的值,若該值表明AVP為可選,則執(zhí)行步驟S505;否則執(zhí)行步驟S506。
S505、標(biāo)記需要按指針定義成員。
S506、判斷m_bRepetitious的值,若該值表明AVP可重復(fù)出現(xiàn),則執(zhí)行步驟S507;否則執(zhí)行步驟S508。
S507、標(biāo)記需要使用LIST定義成員。
S508、判斷m_enAvpType的值,若該值表明AVP為Grouped,則轉(zhuǎn)至步驟S509,否則轉(zhuǎn)至步驟S511。
S509、遞歸本算法在Grouped AVP的.h文件生成本AVP的結(jié)構(gòu)化定義代碼。
S510、結(jié)合步驟S505和步驟S507的結(jié)果使用結(jié)構(gòu)名稱定義成員;轉(zhuǎn)至步驟S503。
S511、結(jié)合步驟S505和步驟S507的結(jié)果使用基本類型定義成員;轉(zhuǎn)至步驟S503。
S512、生成編解碼接口申明。
S513、結(jié)束流程。
上述流程執(zhí)行完成后,將生成2個.h文件,一個是Diameter消息定義的.h文件(其中必要時將引入Grouped類型的AVP),另一個是定義了所有Grouped類型的AVP的.h文件。
以C++為例,根據(jù)表2所列的Diameter消息體生成的結(jié)構(gòu)化定義及編解碼接口的.h文件源代碼可以為class msg{publicstd::string session_id;//必選的AVP,以基本數(shù)據(jù)類型定義std::string origin_host;std::string origin_realm;std::string destination_realm;std::string *pdestination_host;//可選的AVP,以指針形式定義unsigned int auth_application_id;vendor_specific_application_id*pvendor_specific_application_id;//組AVP,以指針形式定義std::string service_context_id;...........................
std::list<subscription_id*>*psubscription_id;//可重復(fù)出現(xiàn)的AVP,且AVP為Grouped,可選,則以列表和指針形式定義............
msg(char*pBuff);//解碼接口,其中將調(diào)用vendorspecific_application_id,subscription_id...的解碼接口int Encode(char*pBuff);//編碼接口,其中當(dāng)pvendor_specific_application_id不為NULL時將調(diào)用vendor_specific_application_id的編碼接口}其中vendor_specific_application_id的結(jié)構(gòu)化定義及編解碼接口class vendor_specific_application_id{publicunsigned int*pvendor_id;//可選的AVP,以指針形式定義unsigned int auth_application_id;unsigned int acct_application_id;vendor_specific_application_id(char*pBuff);//解碼接口,可被msg的解碼接口調(diào)用int Encode(char*pBuff);//編碼接口,可被msg的編碼接口調(diào)用........................
};以C++為例,按基本數(shù)據(jù)類型定義的公用編解碼接口可以為STRING類型的編碼接口int addStringAvp(short avpCode,std::string avpValue char*pBuff)STRING類型的解碼接口std::string getStringAvp(short avpCode,char*pBuff)unsigned int類型的編碼接口int addIntAvp(short avpCode,unsigned int avpValue char*pBuff)unsigned int類型的解碼接口unsigned int getIntAvp(short avpCode,char*pBuff)........................
Diameter消息體編解碼接口定義的原則為1)按基本數(shù)據(jù)類型(如UTF8String,Unsigned32,Unsigned64,Enumerated等)提供公用的編解碼接口;2)為類型是Grouped的AVP對應(yīng)的數(shù)據(jù)結(jié)構(gòu)提供編解碼接口,接口的實現(xiàn)中針對每個AVP成員編解碼;若成員為Grouped,調(diào)用其對應(yīng)數(shù)據(jù)結(jié)構(gòu)提供的編解碼接口;否則調(diào)用基本數(shù)據(jù)類型的編解碼接口;3)為Diameter消息對應(yīng)的數(shù)據(jù)結(jié)構(gòu)提供編解碼接口,接口的實現(xiàn)中針對每個AVP成員編解碼;若成員為Grouped,調(diào)用其對應(yīng)數(shù)據(jù)結(jié)構(gòu)提供的編解碼接口;否則調(diào)用基本數(shù)據(jù)類型的編解碼接口。
參見圖6,為本發(fā)明實施例的Diameter消息體的編碼接口實現(xiàn)的流程示意圖,具體步驟包括S601、打開編碼工程文件。若處理的是Diameter消息,打開Diameter消息的.cpp文件,否則打開Grouped AVP的.cpp文件。
S602、生成編碼接口函數(shù)頭。若處理的是Diameter消息,生成Diameter消息的編碼接口函數(shù)頭,否則生成AVP的編碼接口函數(shù)頭。
S603、遍歷m_GroupMemberList中所有成員,若完成轉(zhuǎn)步驟S612,否則執(zhí)行步驟S604。
S604、判斷m_enAvpFlag的值,若該值表明AVP為可選,則執(zhí)行步驟S605;否則執(zhí)行步驟S606。
S605、生成代碼若結(jié)構(gòu)成員指針為NULL時返回錯誤。
S606、判斷m_bRepetitious的值,若該值表明AVP為可重復(fù),則執(zhí)行步驟S607;否則執(zhí)行步驟S608。
S607、生成代碼遍歷結(jié)構(gòu)成員列表的所有項。
S608、判斷m_enAvpType的值,若該值表明AVP為Grouped,則執(zhí)行步驟S609,否則執(zhí)行步驟S611。
S609、遞歸本算法在Grouped AVP的.cpp文件生成本AVP的編碼接口代碼。
S610、生成代碼調(diào)用該AVP對應(yīng)結(jié)構(gòu)的編碼接口;轉(zhuǎn)至驟S603。
S611、生成代碼按AVP的類型調(diào)用基本類型的編碼接口;轉(zhuǎn)至驟S603。
S612、編碼接口代碼生成完成。
執(zhí)行完上述流程后,生成2個用于編碼的.cpp文件,一個是實現(xiàn)Diameter消息編碼的.cpp文件,另一個是實現(xiàn)所有Grouped類型的AVP編碼的.cpp文件。
參見圖7,為本發(fā)明實施例的Diameter消息體的解碼接口的實現(xiàn)流程示意圖,包括步驟S701、打開解碼工程文件。若處理的是Diameter消息,打開Diameter消息的.cpp文件,否則打開Grouped AVP的.cpp文件。
S702、生成解碼接口函數(shù)頭。若處理的是Diameter消息,生成Diameter消息的解碼接口函數(shù)頭,否則生成AVP的解碼接口函數(shù)頭。
S703、遍歷m_GroupMemberList中所有成員,若完成則轉(zhuǎn)至步驟S714,否則執(zhí)行步驟S704。
S704、生成代碼根據(jù)AVP的CODE在消息體中搜索AVP。
S705、判斷m_enAvpFlag的值,若該值表明AVP為非可選,則執(zhí)行步驟S706,否則執(zhí)行步驟S707。
S706、生成代碼若未找到返回錯誤。
S707、判斷m_bRepetitious的值,若該值表明AVP為可重復(fù),則執(zhí)行步驟S708,否則執(zhí)行步驟S712。
S708、判斷m_enAvpType的值,若該值表明AVP為Grouped,則執(zhí)行步驟S709,否則執(zhí)行步驟S711。
S709、遞歸本算法在Grouped AVP的.cpp文件生成本AVP的解碼接口代碼。
S710、生成代碼調(diào)用該AVP對應(yīng)結(jié)構(gòu)的解碼接口獲得成員變量的值;轉(zhuǎn)至步驟S703。
S711、生成代碼按AVP的類型調(diào)用基本類型的解碼接口獲取AVP的值賦給成員變量;轉(zhuǎn)至步驟S703。
S712、根據(jù)AVP的類型獲取AVP的值(可參見步驟S708-711)增加到成員變量列表中。
S713、生成代碼在消息體中循環(huán)搜索AVP,若找到則按AVP的類型調(diào)用編碼接口獲得AVP的值增加到成員列表;轉(zhuǎn)至步驟S703。
S714、解碼接口代碼生成完成。
執(zhí)行完上述流程后,生成2個用于解碼的.cpp文件,一個是實現(xiàn)Diameter消息解碼的.cpp文件,另一個是實現(xiàn)所有Grouped類型的AVP解碼的.cpp文件。
可以將上述實現(xiàn)流程生成可執(zhí)行命令,如MakeDiameterCode。在編解碼Diameter消息前,通過該命令的執(zhí)行生成Diameter消息體編解碼的源代碼。在命令中可以指定參數(shù),用以表明生成指定類型的源代碼。例如MakeDiameterCode MyDiameterMessage.txt-C說明使用當(dāng)前目錄下的MyDiameterMessage.txt文件中的Diameter消息定義生成diameter消息體編解碼C++源代碼。
MakeDiameterCode MyDiameterMessage.txt-J說明使用當(dāng)前目錄下的MyDiameterMessage.txt文件中的Diameter消息定義生成diameter消息體編解碼JAVA源代碼。
Diameter消息的應(yīng)用可以引用Diameter消息的.h文件,調(diào)用編碼接口,實現(xiàn)對Diameter消息的編碼,例如#include″msg.h″//引用Diameter消息的.h文件//如下是Diameter消息編碼樣例代碼msg*pMsg=new msg;//創(chuàng)建消息pMsg->session_id=″mySessionId″;//設(shè)置AVP session_id的值pMsg->origin_host=″origin_host″;//設(shè)置AVP origin_host的值.....
//設(shè)置可選AVP destination_realm的值pMsg->pdestination_realm=new std::string(″destination_realm″);
//設(shè)置可選的GROUP類型的AVP vendor_specific_application_id的值pMsg->pvendor_specific_application_id=newvendor_specific_application_id;pMsg->pvendor_specific_application_id->acct_application_id=1pMsg->pvendor_specific_application_id->auth_application_id=2;//申請編碼后的消息流保存空間char msgBuff ={0};//調(diào)用編碼接口int iResult=pMsg->Encode(msgBuff);//消息Msg編碼后的消息流保存在msgBuff中,加入Diameter消息頭就可以發(fā)送該Diameter消息了。
Diameter消息的應(yīng)用可以引用Diameter消息的.h文件,調(diào)用解碼接口,實現(xiàn)對Diameter消息的解碼。例如#include″msg.h″//引用Diameter消息的.h文件//如下是解碼樣例代碼,其中msgBuff中保存的是接收到的Diameter消息除去消息頭部分的消息流//調(diào)用解碼接口msg*pMsg=new msg(msgBuff);//可以引用消息中各AVP的值了cout<<″session_id″<<pMsg->session_id<<endl;cout<<″origin_host″<<pMsg->origin_host<<endl;cout<<″destination_realm″<<pMsg->pdestination_realm)<<endl;......
cout<<″vendor_specific_application_id->acct_application_id″<<pMsg->pvendor_specific_application_id->acct_application_id)<<endl;......
當(dāng)Diameter消息體結(jié)構(gòu)發(fā)生變化時,只要修改Diameter消息體定義文件,再使用源代碼生成工具重新生成Diameter消息體的結(jié)構(gòu)化定義和編解碼接口源代碼。當(dāng)需要編解碼時,只要調(diào)用新生成的編解碼接口就可實現(xiàn)Diameter消息的編解碼。
基于上述相同的技術(shù)構(gòu)思,本發(fā)明實施例提供了一種通信系統(tǒng)消息的編碼器和一種解碼器。
參見圖8,為本發(fā)明實施例的通信系統(tǒng)消息的編碼裝置的結(jié)構(gòu)示意圖,包括文件定義模塊、結(jié)構(gòu)定義模塊、編碼接口生成模塊和編碼模塊。
文件定義模塊用于配置通信系統(tǒng)消息的定義文件,該文件中描述了通信系統(tǒng)消息中的所有信息元素及其屬性和邏輯關(guān)系。
結(jié)構(gòu)定義模塊用于按照文件定義模塊中定義的通信系統(tǒng)消息中各信息元素的邏輯關(guān)系,將通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該結(jié)構(gòu)的成員;并根據(jù)信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型。
編碼接口生成模塊用于根據(jù)結(jié)構(gòu)定義模塊生成的通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成編碼接口。
編碼模塊用于按照結(jié)構(gòu)定義模塊生成的數(shù)據(jù)結(jié)構(gòu)和其成員類型,輸入數(shù)據(jù)結(jié)構(gòu)成員的編碼數(shù)據(jù),并調(diào)用編碼接口生成模塊生成的編碼接口逐一對數(shù)據(jù)結(jié)構(gòu)成員進(jìn)行編碼,得到通信系統(tǒng)消息流數(shù)據(jù)。
參見圖9,為本發(fā)明實施例的通信系統(tǒng)消息的解碼裝置的結(jié)構(gòu)示意圖,包括文件定義模塊、結(jié)構(gòu)定義模塊、解碼接口生成模塊和解碼模塊。
文件定義模塊用于配置通信系統(tǒng)消息的定義文件,該文件中描述了通信系統(tǒng)消息中的所有信息元素及其屬性和邏輯關(guān)系。
結(jié)構(gòu)定義模塊用于按照文件定義模塊中定義的通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該結(jié)構(gòu)的成員;并根據(jù)信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型。
解碼接口生成模塊用于根據(jù)結(jié)構(gòu)定義模塊生成的通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成解碼接口。
解碼模塊用于按照結(jié)構(gòu)定義模塊生成的數(shù)據(jù)結(jié)構(gòu)和成員類型,讀取通信系統(tǒng)消息流數(shù)據(jù),并調(diào)用解碼接口模塊生成解碼接口逐一對讀取到的成員進(jìn)行解碼,得到通信系統(tǒng)消息的解碼數(shù)據(jù)。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種通信系統(tǒng)消息的編解碼方法,其特征在于,包括以下步驟按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該結(jié)構(gòu)的成員;并根據(jù)所述信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型;當(dāng)編碼所述通信系統(tǒng)消息時,按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型輸入數(shù)據(jù)結(jié)構(gòu)成員的編碼數(shù)據(jù),并逐一對所述數(shù)據(jù)結(jié)構(gòu)成員進(jìn)行編碼,得到所述通信系統(tǒng)消息的消息流數(shù)據(jù);當(dāng)解碼所述通信系統(tǒng)消息時,按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型讀取所述通信系統(tǒng)消息流數(shù)據(jù),并逐一對讀取到的所述數(shù)據(jù)結(jié)構(gòu)成員進(jìn)行解碼,得到所述通信系統(tǒng)消息的解碼數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型,包括將非組類型的信息元素定義為基本數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)成員,將組類型的信息元素定義為數(shù)據(jù)結(jié)構(gòu),其組成員作為該數(shù)據(jù)結(jié)構(gòu)的成員;并若所述通信系統(tǒng)消息中的信息元素的屬性為可重復(fù),則定義對應(yīng)的數(shù)據(jù)結(jié)構(gòu)成員的類型為列表。
3.如權(quán)利要求2所述的方法,其特征在于,所述按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型輸入數(shù)據(jù)結(jié)構(gòu)成員的編碼數(shù)據(jù),包括所述數(shù)據(jù)結(jié)構(gòu)為所述通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)時,若該數(shù)據(jù)結(jié)構(gòu)的成員類型為基本數(shù)據(jù)類型,則將對應(yīng)的信息元素的編碼數(shù)據(jù)記錄到該數(shù)據(jù)結(jié)構(gòu)成員中;若所述數(shù)據(jù)結(jié)構(gòu)為組類型信息元素所對應(yīng)的數(shù)據(jù)結(jié)構(gòu),則將其組成員信息元素的編碼數(shù)據(jù)記錄到該數(shù)據(jù)結(jié)構(gòu)的成員中;并若數(shù)據(jù)結(jié)構(gòu)成員的類型為列表,則將該數(shù)據(jù)結(jié)構(gòu)成員每次的編碼數(shù)據(jù)作為列表項記錄到該列表中;所述按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型讀取所述通信系統(tǒng)消息流數(shù)據(jù),包括所述數(shù)據(jù)結(jié)構(gòu)為所述通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)時,若該數(shù)據(jù)結(jié)構(gòu)成員類型為基本數(shù)據(jù)類型,則將對應(yīng)的信息元素的消息流數(shù)據(jù)記錄到該數(shù)據(jù)結(jié)構(gòu)成員中;若所述數(shù)據(jù)結(jié)構(gòu)為組類型信息元素所對應(yīng)的數(shù)據(jù)結(jié)構(gòu),則將其組成員信息元素的消息流數(shù)據(jù)記錄到該數(shù)據(jù)結(jié)構(gòu)的成員中;并若數(shù)據(jù)結(jié)構(gòu)成員的類型為列表,則將該數(shù)據(jù)結(jié)構(gòu)成員每次出現(xiàn)的消息流數(shù)據(jù)作為列表項記錄到該列表中。
4.如權(quán)利要求2所述的方法,其特征在于,所述列表的大小依據(jù)所述數(shù)據(jù)結(jié)構(gòu)成員的重復(fù)出現(xiàn)的次數(shù)而變化。
5.如權(quán)利要求1所述的方法,其特征在于,還進(jìn)一步包括步驟若所述信息元素的屬性為必選,當(dāng)編碼所述通信系統(tǒng)消息時,若對應(yīng)的數(shù)據(jù)結(jié)構(gòu)成員不存在,則返回錯誤信息;當(dāng)解碼所述通信系統(tǒng)消息時,若未獲取到對應(yīng)的消息流數(shù)據(jù),則返回錯誤信息。
6.如權(quán)利要求1所述的方法,其特征在于,還進(jìn)一步包括步驟根據(jù)所述通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成編解碼接口;當(dāng)編碼所述通信系統(tǒng)消息時,調(diào)用所述編碼接口進(jìn)行編碼;當(dāng)解碼所述通信系統(tǒng)消息時,調(diào)用所述解碼接口進(jìn)行解碼。
7.如權(quán)利要求6所述的方法,其特征在于,所述根據(jù)所述通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成編解碼接口,包括分別為所述通信系統(tǒng)消息對應(yīng)的數(shù)據(jù)結(jié)構(gòu),以及所有組類型信息元素所對應(yīng)的數(shù)據(jù)結(jié)構(gòu)生成編解碼接口,并根據(jù)所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系生成所述編解碼接口的調(diào)用關(guān)系,并為所有數(shù)據(jù)結(jié)構(gòu)中的基本數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)成員指定編解碼接口。
8.如權(quán)利要求7所述的方法,其特征在于,根據(jù)對應(yīng)的信息元素的數(shù)據(jù)類型,為所述基本數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)成員指定相應(yīng)數(shù)據(jù)類型的編解碼接口。
9.如權(quán)利要求1所述的方法,其特征在于,在按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu)之前,還進(jìn)一步包括步驟配置所述通信系統(tǒng)消息的定義文件,所述文件中描述所述通信系統(tǒng)消息中的所有信息元素及其屬性和邏輯關(guān)系;在按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu)步驟中,按照所述定義文件將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu)。
10.如權(quán)利要求9所述的方法,其特征在于,所述通信系統(tǒng)消息的定義文件中用符號或格式,標(biāo)識所述信息元素的屬性和關(guān)系。
11.如權(quán)利要求9所述的方法,其特征在于,當(dāng)通信系統(tǒng)消息的結(jié)構(gòu)變化時,重新配置所述通信系統(tǒng)消息的定義文件。
12.如權(quán)利要求1-11任一權(quán)項所述的方法,其特征在于,所述通信系統(tǒng)消息為Diameter消息,所述信息元素為屬性值對。
13.一種通信系統(tǒng)消息的編碼器,其特征在于,包括結(jié)構(gòu)定義模塊,用于按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該數(shù)據(jù)結(jié)構(gòu)的成員;并根據(jù)所述信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型;編碼模塊,用于按照所述結(jié)構(gòu)定義模塊定義的數(shù)據(jù)結(jié)構(gòu)和其成員類型輸入成員的編碼數(shù)據(jù),并逐一對所述成員進(jìn)行編碼,得到所述通信系統(tǒng)消息的編碼代碼。
14.如權(quán)利要求13所述的編碼器,其特征在于,還包括編碼接口生成模塊,用于根據(jù)所述結(jié)構(gòu)定義模塊定義的通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成編碼接口;當(dāng)編碼所述通信系統(tǒng)消息時,所述編碼模塊用于調(diào)用所述編碼接口生成模塊生成的編碼接口進(jìn)行編碼。
15.如權(quán)利要求13所述的編碼器,其特征在于,還包括文件定義模塊,用于配置所述通信系統(tǒng)消息的定義文件,所述文件中描述所述通信系統(tǒng)消息中的所有信息元素及其屬性和邏輯關(guān)系;所述結(jié)構(gòu)定義模塊用于按照所述文件定義模塊中配置的定義文件對所述通信系統(tǒng)消息進(jìn)行結(jié)構(gòu)定義。
16.一種通信系統(tǒng)消息的解碼器,其特征在于,包括結(jié)構(gòu)定義模塊,用于按照所述通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將所述通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該數(shù)據(jù)結(jié)構(gòu)的成員;并根據(jù)所述信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型;解碼模塊,用于按照所述結(jié)構(gòu)定義模塊定義的數(shù)據(jù)結(jié)構(gòu)和其成員類型讀取所述通信系統(tǒng)消息流數(shù)據(jù),并逐一對讀取到的所述成員進(jìn)行解碼,得到所述通信系統(tǒng)消息的解碼數(shù)據(jù)。
17.如權(quán)利要求16所述的解碼器,其特征在于,還包括解碼接口生成模塊,用于根據(jù)所述結(jié)構(gòu)定義模塊定義的通信系統(tǒng)消息的數(shù)據(jù)結(jié)構(gòu)和其成員類型生成解碼接口;當(dāng)解碼所述通信系統(tǒng)消息時,所述解碼模塊用于調(diào)用所述解碼接口模塊生成的解碼接口進(jìn)行解碼。
18.如權(quán)利要求16所述的解碼器,其特征在于,還包括文件定義模塊,用于配置所述通信系統(tǒng)消息的定義文件,所述文件中描述所述通信系統(tǒng)消息中的所有信息元素及其屬性和邏輯關(guān)系;所述結(jié)構(gòu)定義模塊用于按照所述文件定義模塊中配置的定義文件對所述通信系統(tǒng)消息進(jìn)行結(jié)構(gòu)定義。
全文摘要
本發(fā)明公開了一種通信系統(tǒng)消息的編解碼方法及其編碼器和解碼器,該方法包括按照通信系統(tǒng)消息中各信息元素的邏輯關(guān)系將通信系統(tǒng)消息定義為一個數(shù)據(jù)結(jié)構(gòu),所有信息元素為該結(jié)構(gòu)的成員;并根據(jù)信息元素的屬性定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)成員的類型;當(dāng)編碼所述通信系統(tǒng)消息時,按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型輸入數(shù)據(jù)結(jié)構(gòu)成員的編碼數(shù)據(jù),并逐一對所述數(shù)據(jù)結(jié)構(gòu)成員進(jìn)行編碼,得到所述通信系統(tǒng)消息的消息流數(shù)據(jù);當(dāng)解碼所述通信系統(tǒng)消息時,按照所述數(shù)據(jù)結(jié)構(gòu)和其成員類型讀取所述通信系統(tǒng)消息流數(shù)據(jù),并逐一對讀取到的所述數(shù)據(jù)結(jié)構(gòu)成員進(jìn)行解碼,得到所述通信系統(tǒng)消息的解碼數(shù)據(jù)。采用本發(fā)明方法,使通信系統(tǒng)消息的編解碼過程易實現(xiàn)和維護(hù),并降低了誤碼率。
文檔編號H04L29/06GK1929461SQ200610140218
公開日2007年3月14日 申請日期2006年10月9日 優(yōu)先權(quán)日2006年10月9日
發(fā)明者沈小榮 申請人:華為技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
柯坪县| 牡丹江市| 寿光市| 共和县| 哈密市| 右玉县| 吐鲁番市| 左贡县| 安化县| 刚察县| 万全县| 江川县| 庆安县| 溧阳市| 松原市| 滁州市| 漳平市| 文安县| 临夏县| 滨州市| 蓬溪县| 宜兴市| 九龙县| 宁武县| 龙川县| 天全县| 海兴县| 家居| 德兴市| 思南县| 博罗县| 陆河县| 丹东市| 泾源县| 罗江县| 黑山县| 杭锦旗| 清徐县| 石台县| 柳河县| 扶余县|