亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種實(shí)現(xiàn)用戶業(yè)務(wù)遠(yuǎn)程驗(yàn)證撥號(hào)協(xié)議的編碼和解碼方法

文檔序號(hào):7923227閱讀:247來(lái)源:國(guó)知局
專利名稱:一種實(shí)現(xiàn)用戶業(yè)務(wù)遠(yuǎn)程驗(yàn)證撥號(hào)協(xié)議的編碼和解碼方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種網(wǎng)絡(luò)通信協(xié)議的編解碼方法,具體而言,本發(fā)明涉及一種實(shí)現(xiàn)用戶業(yè)務(wù)遠(yuǎn)程驗(yàn)證撥號(hào)(Remote Authentication Dial In User Service,以下簡(jiǎn)稱為RADIUS)協(xié)議的編碼和解碼方法。
背景技術(shù)
當(dāng)一個(gè)網(wǎng)絡(luò)允許外部用戶通過(guò)公用網(wǎng)對(duì)其進(jìn)行訪問(wèn)時(shí),用戶在地理上可以極為分散,大量分散用戶從不同的地方可以對(duì)這個(gè)網(wǎng)絡(luò)進(jìn)行隨機(jī)的訪問(wèn)。由于存在內(nèi)外的雙向數(shù)據(jù)流動(dòng),網(wǎng)絡(luò)安全成為很重要的問(wèn)題。安全管理的內(nèi)容包括哪些用戶是否可以獲得訪問(wèn)權(quán)(即驗(yàn)證)?獲得訪問(wèn)權(quán)的用戶可以允許使用哪些服務(wù)(即授權(quán))?如何對(duì)使用網(wǎng)絡(luò)資源的用戶進(jìn)行記費(fèi)(即記賬)?驗(yàn)證、授權(quán)和記賬統(tǒng)稱為AAA(Authentication,Authorization and Accounting),其實(shí)現(xiàn)可采用RADIUS協(xié)議。
RADIUS業(yè)務(wù)符合圖1所示典型的客戶機(jī)/服務(wù)器(client/server)模型。如圖1所示,網(wǎng)絡(luò)接入服務(wù)器(NAS)或路由器上運(yùn)行的AAA模塊對(duì)用戶來(lái)講為服務(wù)器端,而對(duì)實(shí)現(xiàn)RADIUS協(xié)議的RADIUS服務(wù)器來(lái)講是客戶端。RADIUS服務(wù)器通過(guò)建立一個(gè)唯一的用戶數(shù)據(jù)庫(kù)存儲(chǔ)用戶名、用戶密碼來(lái)進(jìn)行驗(yàn)證;存儲(chǔ)傳遞給用戶的服務(wù)類型以及相應(yīng)的配置信息來(lái)完成授權(quán)。
以下簡(jiǎn)要描述RADIUS協(xié)議。圖2示出了RADIUS報(bào)文格式,其中,碼(Code)域?yàn)?個(gè)八位字節(jié),表示RADIUS報(bào)文類型,即服務(wù)類型;標(biāo)識(shí)符(Identifier)域亦為一個(gè)八位字節(jié),用于匹配請(qǐng)求和應(yīng)答;長(zhǎng)度(Length)域?yàn)?個(gè)八位字節(jié),表示整個(gè)報(bào)文的長(zhǎng)度;驗(yàn)證符(Authenticator)域?yàn)?6個(gè)八位字節(jié),用于驗(yàn)證來(lái)自RADIUS服務(wù)器的應(yīng)答和密碼隱藏算法;而屬性(Attributes)域的長(zhǎng)度是可變的并且包含該RADIUS報(bào)文對(duì)應(yīng)的服務(wù)類型所需以及任何需要的可選屬性的屬性列表。
在圖1所示RADIUS業(yè)務(wù)的客戶機(jī)/服務(wù)器模型中,客戶機(jī)和服務(wù)器上的AAA模塊都必須具有處理RADIUS報(bào)文的功能,其中包括生成和讀取RADIUS報(bào)文的功能。在計(jì)算機(jī)系統(tǒng)上實(shí)現(xiàn)RADIUS協(xié)議實(shí)際上就是由處理器執(zhí)行一系列完成RADIUS協(xié)議功能的指令代碼,而構(gòu)造完成生成和讀取RADIUS報(bào)文功能的指令代碼的過(guò)程在這里分別被稱為RADIUS協(xié)議的編碼和解碼。由上可見(jiàn),每種類型RADIUS報(bào)文中的代碼域、標(biāo)識(shí)符域、長(zhǎng)度域和驗(yàn)證符域都具有固定的長(zhǎng)度,占據(jù)的存儲(chǔ)空間是不變的,但是屬性域卻因每種RADIUS報(bào)文中屬性個(gè)數(shù)、種類等的不同而各異。因此,在現(xiàn)有技術(shù)中,由于屬性域差異的存在,不得不為每種類型RADIUS報(bào)文的生成和讀取都專門進(jìn)行編碼和解碼,即生成相應(yīng)的指令代碼段(或函數(shù))。由于每個(gè)這樣的函數(shù)都針對(duì)特定RADIUS報(bào)文的生成或讀取功能,代碼內(nèi)容與所處理報(bào)文、屬性種類、屬性個(gè)數(shù)以及屬性長(zhǎng)度等密切相關(guān),因此報(bào)文結(jié)構(gòu)上的任何一點(diǎn)修改都將牽涉到代碼的修改。
RADIUS協(xié)議實(shí)際上是一個(gè)包含多個(gè)RADIUS協(xié)議棧的協(xié)議棧類,其中的每個(gè)RADIUS協(xié)議棧除了具備基本的協(xié)議配置以外還可以在實(shí)際應(yīng)用中作各種擴(kuò)展。由上可見(jiàn),在現(xiàn)有技術(shù)中,編解碼過(guò)程與RADIUS協(xié)議結(jié)構(gòu)內(nèi)容沒(méi)有分離,報(bào)文或者屬性在結(jié)構(gòu)上的任何修改都需要更新編解碼部分的代碼,因此RADIUS協(xié)議棧的實(shí)現(xiàn)很不靈活,而且不同RADIUS協(xié)議棧之間兼容困難,經(jīng)常為了支持一個(gè)不同擴(kuò)展的協(xié)議而必須重新編碼和解碼。另外,當(dāng)同時(shí)實(shí)現(xiàn)服務(wù)器端和客戶機(jī)端(此時(shí)AAA服務(wù)器作為代理服務(wù)器)時(shí),需要采用兩套不相關(guān)的代碼來(lái)實(shí)現(xiàn)一套協(xié)議的編解碼。最后,實(shí)現(xiàn)具體協(xié)議棧的代碼長(zhǎng)度與報(bào)文個(gè)數(shù)正相關(guān),隨著報(bào)文個(gè)數(shù)的增多,實(shí)現(xiàn)協(xié)議棧的代碼量也將線性增加。

發(fā)明內(nèi)容
本發(fā)明的目的是提供一種實(shí)現(xiàn)用戶業(yè)務(wù)遠(yuǎn)程驗(yàn)證撥號(hào)(RADIUS)協(xié)議的編解碼方法,它可以靈活地實(shí)現(xiàn)各種RADIUS協(xié)議棧的編碼和解碼。
按照本發(fā)明的實(shí)現(xiàn)用戶業(yè)務(wù)遠(yuǎn)程驗(yàn)證撥號(hào)(RADIUS)協(xié)議的編碼和解碼方法,RADIUS協(xié)議棧類包含多個(gè)RADIUS協(xié)議棧,其特征在于,當(dāng)對(duì)任一RADIUS協(xié)議棧進(jìn)行編碼和解碼處理時(shí),執(zhí)行以下步驟(1)將該RADIUS協(xié)議棧下定義的結(jié)構(gòu)信息寫入存儲(chǔ)器內(nèi),所述結(jié)構(gòu)信息包括每一屬性的各種特征信息和每種類型RADIUS報(bào)文中所使用屬性的各種使用狀態(tài)信息,并且不同RADIUS協(xié)議棧下定義的所述結(jié)構(gòu)信息都具有預(yù)先確定的統(tǒng)一格式;以及(2)從存儲(chǔ)器內(nèi)讀取具有所述預(yù)先確定的統(tǒng)一格式的結(jié)構(gòu)信息;以及(3)對(duì)于每一種具有所述預(yù)先確定的統(tǒng)一格式的結(jié)構(gòu)信息,都以不同RADIUS協(xié)議棧之間都相同的編碼和解碼方式進(jìn)行處理以獲得實(shí)現(xiàn)該RADIUS協(xié)議棧的指令代碼。
由上可見(jiàn),由于每種結(jié)構(gòu)信息,包括屬性使用狀態(tài)信息和特征信息都以統(tǒng)一格式表示和存儲(chǔ),由此可以針對(duì)每一種格式的結(jié)構(gòu)信息定義相應(yīng)的統(tǒng)一編碼和解碼處理方式,因此當(dāng)RADIUS協(xié)議棧有改動(dòng)時(shí),只要改動(dòng)后的結(jié)構(gòu)信息仍然以原先的統(tǒng)一格式表示,就無(wú)需修改編碼和解碼方式。這樣,開(kāi)發(fā)RADIUS協(xié)議棧代碼的周期將大大縮短并且減少了維護(hù)的工作量和成本。


通過(guò)以下結(jié)合附圖對(duì)本發(fā)明較佳實(shí)施例的描述,可以進(jìn)一步理解本發(fā)明的目的、特征和優(yōu)點(diǎn)圖1為RADIUS協(xié)議下典型的客戶機(jī)/服務(wù)器模型示意圖;圖2示出了RADIUS報(bào)文格式;圖3為按照本發(fā)明方法的解碼主流程示意圖;圖4為按照本發(fā)明方法的主屬性解碼流程示意圖;圖5為按照本發(fā)明方法的基本屬性解碼流程示意圖;圖6為按照本發(fā)明方法的編碼主流程示意圖;圖7為按照本發(fā)明方法的主屬性編碼流程示意圖;以及圖8為按照本發(fā)明方法的基本屬性編碼流程示意圖。
具體實(shí)施例方式
在本文中,RADIUS報(bào)文中的代碼域、標(biāo)識(shí)符域、長(zhǎng)度域和驗(yàn)證符域被統(tǒng)稱為報(bào)文頭部。如上所述,不同RADIUS協(xié)議棧下每種類型RADIUS報(bào)文中的代碼域、標(biāo)識(shí)符域、長(zhǎng)度域和驗(yàn)證符域都具有固定的長(zhǎng)度和排列順序,因此報(bào)文頭部的編碼和解碼在不同RADIUS協(xié)議棧和報(bào)文之間以統(tǒng)一方式處理是顯而易見(jiàn)的。但是屬性域比較復(fù)雜,其結(jié)構(gòu)信息因?qū)傩詡€(gè)數(shù)、種類等的不同而變化,在本文中,結(jié)構(gòu)信息包含但不局限于RADIUS報(bào)文頭部結(jié)構(gòu)、每一屬性的各種特征信息和每種類型RADIUS報(bào)文中所使用屬性的各種使用狀態(tài)信息。本發(fā)明方法的著眼點(diǎn)即在于以統(tǒng)一的編碼和解碼方式處理隨RADIUS協(xié)議棧以及報(bào)文類型不同而變化的屬性域。為此,必須以統(tǒng)一格式表示屬性域的各種結(jié)構(gòu)信息,在此基礎(chǔ)上才可對(duì)每種統(tǒng)一格式的結(jié)構(gòu)信息定義相應(yīng)的統(tǒng)一的編碼和解碼方式。
值得指出的是,按照本發(fā)明方法的以統(tǒng)一格式表示結(jié)構(gòu)信息并以統(tǒng)一方式進(jìn)行編碼和解碼的過(guò)程最終都可歸結(jié)為由硬件裝置實(shí)現(xiàn),這些硬件裝置包括但不局限于用于存儲(chǔ)結(jié)構(gòu)信息的各種存儲(chǔ)設(shè)備和以統(tǒng)一方式編碼和解碼結(jié)構(gòu)信息的處理器,這里的處理器可以是物理上實(shí)際對(duì)應(yīng)的一個(gè)專用中央處理器(CPU),也可以是具有信息或數(shù)據(jù)處理能力的多個(gè)邏輯處理單元的組合。在本發(fā)明中,上述硬件裝置被統(tǒng)稱為RADIUS協(xié)議處理器并且用于實(shí)現(xiàn)按照本發(fā)明的RADIUS協(xié)議編碼和解碼方法。
以下首先描述按照本發(fā)明方法的以統(tǒng)一格式表示屬性域各種結(jié)構(gòu)信息的較佳方式。為方便起見(jiàn),這些統(tǒng)一格式表示的信息結(jié)構(gòu)可以寫入一個(gè)協(xié)議棧配置文件中,不同的協(xié)議棧具有不同的協(xié)議棧配置文件,但是每個(gè)配置文件表示結(jié)構(gòu)信息的格式都是相同的。
附錄A和B分別示出了符合標(biāo)準(zhǔn)RADIUS協(xié)議和RADIUS+1.0協(xié)議的配置文件,如附錄A和B所示,兩個(gè)配置文件都由頭部、消息、屬性三部分組成。其中,頭部中的字段MINMSGLENGTH和MAXMSGLENGTH描述本RADIUS協(xié)議棧下報(bào)文的最小和最大長(zhǎng)度,F(xiàn)ILETERUNKNOWATT描述編解碼時(shí)是否過(guò)濾未知屬性,MINPRIMITIVELEN描述基本屬性的最小長(zhǎng)度,MINCONSTRUCTORLEN描述結(jié)構(gòu)型屬性的最小長(zhǎng)度;報(bào)文部分以RADIUS報(bào)文為單位,描述了每種RADIUS報(bào)文中所使用屬性的使用狀態(tài)信息,其中,字段MSGTYPE表示報(bào)文類型,用于標(biāo)識(shí)當(dāng)前描述的使用狀態(tài)信息的屬性所屬的RADIUS報(bào)文,MATTRIBUTE表示報(bào)文部分內(nèi)每個(gè)屬性的首部,用于標(biāo)識(shí)每個(gè)屬性使用狀態(tài)信息描述的開(kāi)始,隨后的參數(shù)字段type描述屬性的編號(hào),mtag描述屬性的性質(zhì)是可選屬性、必備屬性還是出現(xiàn)次數(shù)為0或更多的屬性,times描述在目標(biāo)報(bào)文結(jié)構(gòu)中出現(xiàn)的次數(shù);屬性部分分為L(zhǎng)EVEL1和LEVEL2兩層,分別描述主屬性和子屬性的特征信息,在每一層的屬性特征信息描述中,字段ATTRIBUTE表示屬性部分內(nèi)每個(gè)屬性的首部,用于標(biāo)識(shí)每個(gè)屬性特征信息描述的開(kāi)始,隨后的參數(shù)字段name描述屬性的名稱,type描述屬性的編號(hào),這與報(bào)文部分內(nèi)的type字段是一致的,kind描述屬性的數(shù)據(jù)類型,min描述屬性的最小長(zhǎng)度或最小值,max描述屬性的最大長(zhǎng)度或最大值,len描述屬性在報(bào)文結(jié)構(gòu)中的長(zhǎng)度,form描述屬性是否為結(jié)構(gòu)型屬性。
由上可見(jiàn),在不同的RADIUS協(xié)議棧配置文件中,每個(gè)屬性在任一RADIUS報(bào)文中的使用狀態(tài)信息以及自身特征信息在每個(gè)配置文件中都以相應(yīng)的統(tǒng)一格式表示,例如,每個(gè)屬性的使用狀態(tài)信息以MSGTYPE標(biāo)識(shí)其所處的報(bào)文,并以MATTRIBUTE標(biāo)識(shí)使用狀態(tài)信息描述的開(kāi)始,隨后依次出現(xiàn)屬性編號(hào)、屬性性質(zhì)、屬性在目標(biāo)報(bào)文結(jié)構(gòu)中出現(xiàn)次數(shù)等參數(shù)字段。又如,每個(gè)屬性的特征信息以ATTRIBUTE標(biāo)識(shí)每個(gè)屬性特征信息描述的開(kāi)始,隨后依次出現(xiàn)屬性名稱、屬性編號(hào)、屬性數(shù)據(jù)類型、屬性最小長(zhǎng)度或最小值、屬性最大長(zhǎng)度或最大值、屬性在報(bào)文結(jié)構(gòu)中的長(zhǎng)度和結(jié)構(gòu)型屬性標(biāo)志等參數(shù)字段。這種將不同RADIUS協(xié)議棧下定義的每個(gè)屬性的使用狀態(tài)信息和特征信息都以統(tǒng)一格式表示在不同的配置文件中的方式使得以統(tǒng)一的編碼和解碼規(guī)則或方式處理每一種格式的結(jié)構(gòu)信息成為可能。具體而言,在編碼和解碼過(guò)程中,可以將上述配置文件的結(jié)構(gòu)定義視為是對(duì)RADIUS協(xié)議棧類的定義,而將這種配置文件結(jié)構(gòu)下具體的配置文件視為是對(duì)每個(gè)RADIUS協(xié)議棧的定義。如果借助面向?qū)ο蠓椒ǖ某绦蛟O(shè)計(jì)思想描述,這里的RADIUS協(xié)議棧類相當(dāng)于“類”,而每個(gè)RADIUS協(xié)議棧是該類的一個(gè)“實(shí)例”,因此本發(fā)明的方法很容易用面向?qū)ο蟮木幊陶Z(yǔ)言來(lái)實(shí)現(xiàn)。例如可以編寫一個(gè)協(xié)議棧類程序,當(dāng)啟動(dòng)時(shí)初始化部分可以根據(jù)需要?jiǎng)討B(tài)生成協(xié)議棧實(shí)例,對(duì)不同的協(xié)議接口調(diào)用不同的實(shí)例進(jìn)行編碼和解碼。
值得指出的是,配置文件是一個(gè)邏輯概念,代表了信息或數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),在物理上實(shí)際對(duì)應(yīng)的是存儲(chǔ)器的一個(gè)存儲(chǔ)區(qū)域。而且更為重要的是,上述附錄A和B示出的結(jié)構(gòu)信息表示方式只是示意性質(zhì)的,不應(yīng)理解為是對(duì)本發(fā)明范圍的限定。實(shí)際上,諸如每一屬性的各種特征信息和每種類型RADIUS報(bào)文中所使用屬性的各種使用狀態(tài)信息之類的結(jié)構(gòu)信息可以有無(wú)數(shù)種具體的統(tǒng)一格式表示方式,本發(fā)明的著眼點(diǎn)是通過(guò)利用統(tǒng)一格式表示或存儲(chǔ)結(jié)構(gòu)信息使得RADIUS協(xié)議的編碼和解碼方式或規(guī)則與協(xié)議棧內(nèi)容能夠分離開(kāi)來(lái),其中編碼和解碼規(guī)則由代碼體現(xiàn),而協(xié)議棧內(nèi)容由配置文件體現(xiàn)。
以下借助圖3~8描述本發(fā)明編碼和解碼RADIUS協(xié)議棧的方式。在本發(fā)明的方法中,借用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,將RADIUS報(bào)文和屬性視為不同的對(duì)象,不同類型的RADIUS報(bào)文或?qū)傩灾皇歉髯运鶎賹?duì)象內(nèi)的不同實(shí)例,因此可以對(duì)所有RADIUS報(bào)文和屬性實(shí)行統(tǒng)一的處理方式。
圖3為按照本發(fā)明方法的解碼主流程示意圖。如圖3所示,首先對(duì)RADIUS報(bào)文頭部進(jìn)行解碼處理,如上所述,由于報(bào)文頭部的結(jié)構(gòu)是固定不變的,因此可以統(tǒng)一的解碼規(guī)則進(jìn)行處理。報(bào)文頭部解碼完成后,讀取配置文件以確定是否有需要解碼的屬性。如果通過(guò)讀取配置文件確定有需要解碼的屬性,則讀取屬性類型,并隨后對(duì)主屬性按照統(tǒng)一的解碼規(guī)則進(jìn)行處理。接著,判斷屬性處理是否成功,如果屬性處理不成功,則返回解碼出錯(cuò)指示并結(jié)束解碼主流程,如果屬性處理成功,則返回讀取配置文件以確定是否有需要解碼的屬性的步驟。相反,如果通過(guò)讀取配置文件確定沒(méi)有需要解碼的屬性,則確定已解碼的屬性個(gè)數(shù)是否合法,即判斷解碼過(guò)程中記錄下來(lái)的解碼屬性個(gè)數(shù)與配置文件中mtag的取值是否一致。如果確定屬性個(gè)數(shù)合法,即,報(bào)文中屬性個(gè)數(shù)與配置文件規(guī)定的相等時(shí),則將參數(shù)字段內(nèi)容解碼到結(jié)果報(bào)文中,即,將配置文件中參數(shù)字段的內(nèi)容復(fù)制至緩沖區(qū)的特定位置上,特定位置根據(jù)配置文件中解碼后參數(shù)長(zhǎng)度定義和參數(shù)出現(xiàn)順序計(jì)算確定,隨后返回解碼成功指示。
圖4為圖3中主屬性解碼步驟的流程示意圖。如圖4所示,首先根據(jù)配置文件中參數(shù)字段form確定屬性是否為包含子屬性的結(jié)構(gòu)屬性。如果判斷不是結(jié)構(gòu)屬性,則進(jìn)行基本屬性解碼處理。然后根據(jù)配置文件中屬性的結(jié)構(gòu)信息判斷該基本屬性是否合法,如果不合法,則返回屬性不合法指示并結(jié)束主屬性解碼流程,否則增加對(duì)應(yīng)類型已解碼屬性個(gè)數(shù)以用于圖3中確定已解碼屬性個(gè)數(shù)是否合法的步驟。最后,返回屬性合法指示并結(jié)束主屬性解碼流程。相反,如果判斷是結(jié)構(gòu)屬性,則判斷該結(jié)構(gòu)屬性中是否還包含未解碼的子屬性。如果不包含未解碼的子屬性,則增加對(duì)應(yīng)類型已解碼屬性個(gè)數(shù),返回屬性合法指示并結(jié)束主屬性解碼流程,否則對(duì)子屬性按照基本屬性解碼規(guī)則處理。對(duì)子屬性按照基本屬性解碼規(guī)則處理后,判斷解碼后的該子屬性是否合法。如果合法,則增加對(duì)應(yīng)類型已解碼子屬性的個(gè)數(shù)并返回至判斷是否還有子屬性的步驟,否則返回屬性不合法指示并結(jié)束主屬性解碼流程。
圖5為圖4中判斷基本屬性是否合法步驟的流程示意圖。如圖5所示,首先讀取解碼后屬性的長(zhǎng)度。然后判斷讀取的屬性長(zhǎng)度是否合法,即,將讀取的長(zhǎng)度與配置文件中的參數(shù)字段king進(jìn)行比較以確定是否匹配。如果不合法或不一致,則返回屬性錯(cuò)誤指示并結(jié)束基本屬性解碼流程。如果合法或一致,則讀取屬性的內(nèi)容并進(jìn)一步判斷屬性的內(nèi)容是否合法,即,將讀取的內(nèi)容與配置文件中的min和max等參數(shù)字段進(jìn)行比較以確定是否匹配。如果合法或一致,則返回屬性正確指示并結(jié)束基本屬性解碼流程,否則,返回屬性錯(cuò)誤指示并結(jié)束基本屬性是否合法步驟的流程。
圖6為按照本發(fā)明方法的編碼主流程示意圖。如圖6所示,首先對(duì)RADIUS報(bào)文頭部進(jìn)行編碼處理,如上所述,由于報(bào)文頭部的結(jié)構(gòu)是固定不變的,因此可以統(tǒng)一的編碼規(guī)則進(jìn)行處理。報(bào)文頭部編碼完成后,讀取配置文件以確定是否有需要編碼的屬性。如果通過(guò)讀取配置文件確定有需要編碼的屬性,則讀取屬性類型,并隨后對(duì)主屬性按照統(tǒng)一的編碼規(guī)則進(jìn)行處理。接著,判斷屬性處理是否成功,如果屬性處理不成功,則返回編碼出錯(cuò)指示并結(jié)束解碼主流程,如果屬性處理成功,則返回讀取配置文件以確定是否有需要編碼的屬性的步驟。相反,如果通過(guò)讀取配置文件確定沒(méi)有需要編碼的屬性,則返回編碼成功指示。
圖7為圖6中主屬性編碼步驟的流程示意圖。如圖6所示,首先根據(jù)配置文件中參數(shù)字段form確定屬性是否為包含子屬性的結(jié)構(gòu)屬性。如果判斷不是結(jié)構(gòu)屬性,則進(jìn)行基本屬性編碼處理。然后返回編碼成功指示并結(jié)束主屬性編碼流程。相反,如果判斷是結(jié)構(gòu)屬性,則進(jìn)一步判斷該結(jié)構(gòu)屬性中是否還包含未編碼的子屬性。如果不包含未編碼的子屬性,則計(jì)算出主屬性編碼后的長(zhǎng)度,然后對(duì)該結(jié)構(gòu)屬性進(jìn)行打包處理,即,將參數(shù)對(duì)應(yīng)的屬性類型、長(zhǎng)度和內(nèi)容依次寫入編碼結(jié)果的緩沖區(qū)內(nèi),接著返回編碼成功指示并結(jié)束主屬性編碼流程。如果包含未編碼的子屬性,則對(duì)子屬性按照基本屬性編碼規(guī)則處理。對(duì)子屬性按照基本屬性編碼規(guī)則處理后,判斷編碼是否成功,如果成功,則返回至判斷是否還有子屬性的步驟,否則返回編碼失敗指示并結(jié)束主屬性編碼流程。
圖8為圖7中基本屬性編碼步驟的流程示意圖。如圖8所示,首先判斷讀取編碼后屬性的參數(shù)是否合法,即參數(shù)的取值范圍是否與配置文件中的一致。如果不合法或不一致,則返回編碼失敗指示并結(jié)束基本屬性編碼流程。如果合法或一致,則計(jì)算屬性編碼后的長(zhǎng)度并將該參數(shù)打包,即,將參數(shù)對(duì)應(yīng)的屬性類型、長(zhǎng)度和內(nèi)容依次寫入編碼結(jié)果的緩沖區(qū)內(nèi),然后返回編碼成功指示并結(jié)束基本屬性編碼流程。
附錄A 標(biāo)準(zhǔn)RADIUS協(xié)議編碼和解碼配置文件<pre listing-type="program-listing">MINMSGLENGTH 20MAXMSGLENGTH 1024FILETERUNKNOWATT 1MINPRIMITIVELEN3MINCONSTRUCTORLEN3# Access-RequestMSGTYPE 1# head show the head of attribute# type attribute type(0..255)# mtag 0=a optinal attribute# 1=a mandatory attribute# 2=0 or more times appearing# times 0=attribute not decode for message struct,or constructor# others,times appearing in message struct.   mandatory attribute must be only once.   optional attribute must be less then once(0 or 1).# conf_flagflag for configured,if true,configured value is to be used always.# conf_valueconfigured value for encoding primitive attribute,less then 64 bytes;#for constructor attribute,it′s the number of all child attributes.# head type mtagtimes conf_fiag conf_value#USER-NAME 0MATTRIBUTE 1010#USER-PASSWDMATTRIBUTE 2010#CHAP-PASSWDMATTRIBUTE 3010#FRAMED-PROTOCOLMATTRIBUTE 7010 8#VENDOR-SPECIFYMATTRIBUTE 26 011 2#ISP-IDMATTRIBUTE 17 010 163#CONNECT-ID,optional for v10MATTRIBUTE 26 010#NAS-PORT-IDMATTRIBUTE 87 010 abcdefg#NAS-PORT-TYPEMATTRIBUTE 61 010#CHAP-CHALLENGEMATTRIBUTE 60 010#FRAME-IP-ADDRESSMATTRIBUTE 8010#CLASSMATTRIBUTE 25 210#SeviceTypeMATTRIBUTE 6011#NAS-PortMATTRIBUTE 5010#StateMATTRIBUTE 24 010ENDMSG#Access-AcceptMSGTYPE 2#USER-NAMEMATTRIBUTE 1 0 10#FRAMED-PROTOCOLMATTRIBUTE 7 0 10#FRAMED-IP-ADDRESSMATTRIBUTE 8 0 10#FRAMED-IP-NETMASKMATTRIBUTE 9 0 10#FILTER-IDMATTRIBUTE 11 2 30#CLASSMATTRIBUTE 25 2 30&lt;dp n="d9"/&gt;#IDLE-TIMEOUTMATTRIBUTE 28 010#FRAMED-IP-POOL-IDMATTRIBUTE 88 010#ACCT-INTERIM-INTERVALMATTRIBUTE 85 010#Session-TimeoutMATTRIBUTE 27 010ENDMSG#Access-RejectMSGTYPE 3#REPLY-MESSAGEMATTRIBUTE 18 010ENDMSG#Accounting-RequestMSGTYPE 4#USER-NAMEMATTRIBUTE 1010#ACCT-STATUS-TYPEMATTRIBUTE 40 110#ACCT-DELAY-TIMEMATTRIBUTE 41 010#ACCT-SESSION-IDMATTRIBUTE 44 110#TERMINATE-CAUSEMATTRIBUTE 49 010#CLASSMATTRIBUTE 25 230#FRAMED-IP-ADDRESSMATTRIBUTE 8010#Event_TimestampMATTRIBUTE 55 010#AcctInputGigawordsMATTRIBUTE 52 010#AcctOutputGigawordsMATTRIBUTE 53 010#AcctInputOctetsMATTRIBUTE 42 010#AcctOutputOctetsMATTRIBUTE 43 010#AcctInputPacketsMATTRIBUTE 47 010#AcctOutputPacketsMATTRIBUTE 48 010ENDMSG#Accounting-ResponseMSGTYPE 5#SESSION-TIMEOUTMATTRIBUTE 27 010ENDMSG################################################################ headshow the head of attribute# namethe name of attribute# kind2=the attribute is octet type# 3=the attribute is integer# 4=the attribute is address type# minthe attribute′s min length or min value# maxthe attribute′s max length or max value# lenthe attribute′s length in message struct,INTEGER/ADDRESS is 4# form0=primitive,1=constructorLEVEL 0#head name type kind min maxwidth formATTRIBUTERad_UserName1 2 1 63 32 0ATTRIBUTERad_UserPassword 22 16128 16 0ATTRIBUTERad_CHAPPassword3 2 1717 20 0ATTRIBUTERad_NASIPAddress 4 3 0 4294967295 4 0ATTRIBUTERad_NASPort 53 065535 40ATTRIBUTERad_ServiceType6 3111 40ATTRIBUTERad FramedProtocol 7 3 110040&lt;dp n="d10"/&gt;ATTRIBUTE Rad_FramedIPAddress 8 4 0 4294967295 40ATTRIBUTE Rad_FramedIPNetmask 9 4 0 4294967295 4 0ATTRIBUTE Rad_FramedRouting 10 3 034 0ATTRIBUTE Rad_FilterId 11 2 08 12 0ATTRIBUTE Rad_FramedMTU 12 3 01 4294967295 4 0ATTRIBUTE Rad_FramedCompression 13 3 01 4294967295 4 0ATTRIBUTE Rad_LoginIPHost 14 3 0 4294967295 40ATTRIBUTE Rad_LoginService 15 3 1255 40ATTRIBUTE Rad_LoginTCPPort 16 3 0100 40ATTRIBUTE e 17 0 000 0ATTRIBUTE Rad_ReplyMessage 18 2 120048 0ATTRIBUTE Rad_CallbackNumber 19 0 0 0 00ATTRIBUTE Rad_CallbackId 200 0 00 0ATTRIBUTE e 2100 0 0 0ATTRIBUTE Rad_FramedRoute 220 0 0 00ATTRIBUTE Rad_FramedIPXNetwork23 0 00 00ATTRIBUTE Rad_State 24 2 1429496 32 0ATTRIBUTE Rad_Class 25 2 1200 360ATTRIBUTE Rad_VendorSpecific 26 0 00 01ATTRIBUTE Rad_SessionTimeout 27 3 0 4294967295 40ATTRIBUTE Rad_IdleTimeout 28 3 0 4294967295 4 0ATTRIBUTE Rad_TerminationAction 29 3 0 4294967295 4 0ATTRIBUTE Rad_CalledStationId 30 2 120024 0ATTRIBUTE Rad_CallingStationId 31 2 1 200 240ATTRIBUTE Rad_NASIdentifier 32 00 0 0 0ATTRIBUTE Rad_ProxyState 33 0 00 00ATTRIBUTE Rad_LoginLATService 34 0 0 000ATTRIBUTE Rad_LoginLATNode 35 0 0 000ATTRIBUTE Rad_LoginLATGroup 36 0 0 000ATTRIBUTE Rad_FramedAppleTalkLink37 0 0000ATTRIBUTE Rad_FramedAppleTalkNetwork 38 00 0 0 0ATTRIBUTE Rad_FramedAppleTalkZone 39 0 0 0 00ATTRIBUTE Rad_AcctStatusType 40 3 0 4294967295 40ATTRIBUTE Rad_AcctDelayTime 41 3 0 4294967295 40ATTRIBUTE Rad_AcctInputOctets 42 3 0 4294967295 40ATTRIBUTE Rad_AcctOutputOctets 43 3 0 4294967295 4 0ATTRIBUTE Rad_AcctSessionId 44 21 200 56 0ATTRIBUTE Rad_AcctAuthentic 45 000 00ATTRIBUTE Rad_AcctSessionTime 46 000 00ATTRIBUTE Rad_AcctInputPackets 47 3 0 4294967295 40ATTRIBUTE Rad_AcctOutputPackets 48 3 0 4294967295 4 0ATTRIBUTE Rad_AcctTerminateCause49 3 0 4294967295 4 0ATTRIBUTE Rad_AcctMultiSessionId 50 0 0 0 0 0ATTRIBUTE Rad_AcctLinkCount51 0 0 0 0 0ATTRIBUTE Rad_AcctInputGigawords 52 3 0 4000 4 0ATTRIBUTE Rad_AcctInputGigawords 53 3 0 4000 4 0ATTRIBUTE Rad_EventTimestamp 55 3 0 4294967295 40ATTRIBUTE Rad_CHAPChallenge 60 2 5 32 24 0ATTRIBUTE Rad_NASPortType61 3 0 4294967295 4 0ATTRIBUTE Rad_PortLimit 62000 0 0ATTRIBUTE Rad_LoginLATPort 63000 0 0ATTRIBUTE Rad_AcctInterimInterval 85 3 0 4294967295 4 0ATTRIBUTE Rad_NASPortId8721 200 32 0ATTRIBUTE Rad_FramedPool 8830 4294967295 40ENDLEVELLEVEL 1# headnametype kind minmax width formATTRIBUTE Rad_InputPeakRate13 0 4294967295 4 0ATTRIBUTE Rad_InputAverageRate2 3 0 4294967295 4 0ATTRIBUTE Rad_InputBasicRate3 3 0 4294967295 40ATTRIBUTE Rad_OutputPeakRate 4 304294967295 4 0ATTRIBUTE Rad_OutputAverageRate5 3 0 4294967295 4 0ATTRIBUTE Rad_OutputBasicRate 6 3 0 4294967295 4 0ATTRIBUTE Rad_InputKilobytesBeforeTariffSwitch 7 3 0 4294967295 4 0ATTRIBUTE Rad_OutputKilobytesBeforeTariffSwitch 8 304294967295 4 0ATTRIBUTE Rad_InputPacketsBeforeTariffSwitch 9 3 0 4294967295 4 0ATTRIBUTE Rad_OutputPacketsBeforeTariffSwitch 10 3 0 4294967295 4 0ATTRIBUTE Rad_InputKilobytesAfterTariffSwitch 11 3 0 4294967295 4 0&lt;dp n="d11"/&gt;ATTRIBUTE Rad_OutputKilobytesAfterTariffSwitch 12 3 04294967295 4 0ATTRIBUTE Rad_InputPacketsAfterTariffSwitch133 04294967295 4 0ATTRIBUTE Rad_OutputPacketsAfterTariffSwitch 143 04294967295 4 0ATTRIBUTE Rad_RemanentVolume 153 04294967295 4 0ATTRIBUTE Rad_TariffSwitchInterval 163 04294967295 4 0ATTRIBUTE Rad_ISPID17 2 064 320ATTRIBUTE Rad_MaxUsersPerLogicPort 19 3 0 4294967295 4 0ATTRIBUTE Rad_Command 20 3 0 42949672954 0ATTRIBUTE Rad_Priority 22 30 4294967295 4 0ATTRIBUTE Rad_ControlIdentifier 24 3 04294967295 4 0ATTRIBUTE Rad_ResultCode 25 3 0 4294967295 40ATTRIBUTE Rad_ConnectId 26304294967295 4 0ENDLEVEL</pre>
附錄B RADIUS協(xié)議+1.1編碼和解碼配置文件<pre listing-type="program-listing">MINMSGLENGTH 20MAXMSGLENGTH 1024FILETERUNKNOWATT 1MINPRIMITIVELEN 3MINCONSTRUCTORLEN 3# Access-RequestMSGTYPE 1# head show the head of attribute# type attribute type(0..255)# mtag0=a optinal attribute#1=a mandatory attribute#2=0 or more times appearing# times 0=attribute not decode for message struct,or constructor#others,times appearing in message struct.   mandatory attribute must be only once.   optional attribute must be less then once(0 or 1).# conf_flag flag for configured,if true,configured value is to be used always.# conf_valueconfigured value for encoding primitive attribute,less then 64 bytes;#for constructor attribute,it′s the number of all child attributes.# headtypemtag times conf_flag conf_value#USER-NAME 0MATTRIBUTE 10 1 0 555555555551#USER-PASSWDMATTRIBUTE 20 1 0#CHAP-PASSWDMATTRIBUTE 30 1 0#FRAMED-PROTOCOLMATTRIBUTE 70 1 0 8#VENDOR-SPECIFYMATTRIBUTE 26 0 0 1 2#ISP-IDMATTRIBUTE 17 0 1 0 163#CONNECT-ID,optional for v10MATTRIBUTE 26 0 1 0 3#NAS-PORT-IDMATTRIBUTE 87 0 1 0 abcdefg#NAS-PORT-TYPEMATTRIBUTE 61 0 1 0#CHAP-CHALLENGEMATTRIBUTE 60 0 1 0#FRAME-IP-ADDRESSMATTRIBUTE 80 1 0#CLASSMATTRIBUTE 25 2 3 0ENDMSG#Access-AcceptMSGTYPE 2#USER-NAMEMATTRIBUTE 10 1 0#FRAMED-PROTOCOLMATTRIBUTE 70 1 0#FRAMED-IP-ADDRESSMATTRIBUTE 80 1 0#FRAMED-IP-NETMASKMATTRIBUTE 90 1 0#FILTER-IDMATTRIBUTE 11 2 3 0#CLASSMATTRIBUTE 25 2 3 0#IDLE-TIMEOUTMATTRIBUTE 28 0 1 0#FRAMED-IP-POOL-IDMATTRIBUTE 88 0 1 0#ACCT-INTERIM-INTERVAL&lt;dp n="d13"/&gt;MATTRIBUTE 85 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 110#RATE 6MATTRIBUTE 10 1 0MATTRIBUTE 20 1 0MATTRIBUTE 30 1 0MATTRIBUTE 40 1 0MATTRIBUTE 50 1 0MATTRIBUTE 60 1 0#MAX-USERS-PER-LOGICPORTMATTRIBUTE 19 0 1 011#ISP-IDMATTRIBUTE 17 0 1 0#CONNECT-IDMATTRIBUTE 26 1 1 0#PRIORTYMATTRIBUTE 22 0 1 0ENDMSG#Access-RejectMSGTYPE 3#REPLY-MESSAGEMATTRIBUTE 18 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 1#CONNECT-IDMATTRIBUTE 26 1 1 0ENDMSG#Accounting-RequestMSGTYPE 4#USER-NAMEMATTRIBUTE 10 1 0#ACCT-STATUS-TYPEMATTRIBUTE 40 1 1 0#ACCT-DELAY-TIMEMATTRIBUTE 41 0 1 0#ACCT-SESSION-IDMATTRIBUTE 44 1 1 0#TERMINATE-CAUSEMATTRIBUTE 49 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 110#VOLUME-infoMATTRIBUTE 70 1 0MATTRIBUTE 80 1 0MATTRIBUTE 90 1 0MATTRIBUTE 10 0 1 0MATTRIBUTE l1 0 1 0MATTRIBUTE 12 0 1 0MATTRIBUTE 13 0 1 0MATTRIBUTE 14 0 1 0#CONNECT-IDMATTRIBUTE 26 1 1 0#CONTROL-IDENTIFIERMATTRIBUTE 24 0 1 0#CLASSMATTRIBUTE 25 2 1 0#FRAMED-IP-ADDRESSMATTRIBUTE 80 1 0ENDMSG#Accounting-ResponseMSGTYPE5#USER-NAMEMATTRIBUTE 10 1 0#SESSION-TIMEOUTMATTRIBUTE 27 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 13&lt;dp n="d14"/&gt;#REMANENT-VOLUMEMATTRIB UTE 15 010#TARIFF-SWITCH-INTERVALMATTRIBUTE 16 010#CONNECT-IDMATTRIBUTE 26 110#CLASSMATTRIBUTE 25 230#ACCT-SESSION-IDMATTRIBUTE 44 010ENDMSG#Trigger-RequestMSGTYPE 201#USER-NAMEMATTRIBUTE 1 110#FRAMED-IP-ADDRESSMATTRIBUTE 8 110#FILTER-IDMATTRIBUTE 11 230#NAS-PORT-IDMATTRIBUTE 87 010#VENDOR-SPECIFYMATTRIBUTE 26 001#COMMANDMATTRIBUTE 20 110#CONTROL-IDENTIFIERMATTRIBUTE 24 110ENDMSG#Terminate-RequestMSGTYPE 202#USER-NAMEMATTRIBUTE 1 110#CLASSMATTRIBUTE 25 230#ACCT-SESSION-IDMATTRIBUTE 44 110#VENDOR-SPECIFYMATTRIBUTE 26 001#CONNECT-IDMATTRIBUTE 26 1 10#COMMANDMATTRIBUTE 20 1 10#CONTROL-IDENTIFIERMATTRIBUTE 24 1 10ENDMSG#SetpolicyMSGTYPE 203#USER-NAMEMATTRIBUTE 1 1 10#ACCT-SESSION-IDMATTRIBUTE 44 1 10#FILTER-IDMATTRIBUTE 11 2 30#VENDOR-SPECIFYMATTRIBUTE 26 0 01 11#RATE6MATTRIBUTE 1 0 10MATTRIBUTE 2 0 10MATTRIBUTE 3 0 10MATTRIBUTE 4 0 10MATTRIBUTE 5 0 10MATTRIBUTE 6 0 10#CONNECT-IDMATTRIBUTE 26 1 10#COMMANDMATTRIBUTE 20 1 10#CONTROL-IDENTIFIERMATTRIBUTE 24 1 10#ISP-ID&lt;dp n="d15"/&gt;MATTRIBUTE 17 010#PRIORTYMATTRIBUTE 22 010ENDMSG#Control-ResultMSGTYPE 20#FRAMED-IP-ADDRESSMATTRIBUTE 8 010#VENDOR-SPECIFYMATTRIBUTE 26 001#CONNECT-IDMATTRIBUTE 26 010#COMMANDMATTRIBUTE 20 110#CONTROL-IDENTIFIERMATTRIBUTE 24 110#RESULT-CODEMATTRIBUTE 25 010ENDMSG######################################################################## headshow the head of attribute# namethe name of attribute# kind2=the attribute is octet type# 3=the attribute is integer# 4=the attribute is address type# minthe attribute′s min length or min value# maxthe attribute′s max length or max value# lenthe attribute′s length in message struct,INTEGER/ADDRESS is 4# form0=primitive,1=constructorLEVEL 0#head name type kind min max width formATTRIBUTE Rad_UserName 12 1 63 32 0ATTRIBUTE Rad_UserPassword 22 16 128 16 0ATTRIBUTE Rad_CHAPPassword 3 2 1717 20 0ATTRIBUTE Rad NASIPAddress4 3 0 4294967295 40ATTRIBUTE Rad NASPort 5 3 0 65535 4 0ATTRIBUTE Rad_ServiceType 6 31 11 4 0ATTRIBUTE Rad FramedProtocol 73 1 100 4 0ATTRIBUTE Rad_FramedIPAddress8 4 0 4294967295 40ATTRIBUTE Rad FramedIPNetmask9 4 0 4294967295 40ATTRIBUTE Rad_FramedRouting 10 3 0 3 40ATTRIBUTE Rad_FilterId112 0812 0ATTRIBUTE Rad FramedMTU 123 01 4294967295 40ATTRIBUTE Rad_FramedCompression 13 3 01 4294967295 40ATTRIBUTE Rad_LoginIPHost 14 3 04294967295 40ATTRIBUTE Rad_LoginService 15 3 1255 40ATTRIBUTE Rad_LoginTCPPort 16 3 0100 40ATTRIBUTE e 17 000 0 0ATTRIBUTE Rad_ReplyMessage 18 2 1 200 480ATTRIBUTE Rad CallbackNumber19 000 00ATTRIBUTE Rad CallbackId 20 0 0 0 00ATTRIBUTE e21 0 0000ATTRIBUTE Rad_FramedRoute22 0 00 00ATTRIBUTE Rad FramedIPXNetwork23 0 00 00ATTRIBUTE Rad State24 0 0000ATTRIBUTE Rad_Class 25 21 200 360ATTRIBUTE Rad_VendorSpecific 26 0 00 01ATTRIBUTE Rad SessionTimeout 27 3 04294967295 40ATTRIBUTE Rad_IdleTimeout 28 3 04294967295 40ATTRIBUTE Rad_TerminationAction29 3 0 4294967295 40ATTRIBUTE Rad CalledStationId 30 2 1200 24 0ATTRIBUTE Rad_CallingStationId 31 21200 240ATTRIBUTE Rad NASIdentifier32 000 00ATTRIBUTE Rad_ProxyState33 00000ATTRIBUTE Rad_LoginLATService34 000 0 0ATTRIBUTE Rad_LoginLATNode 35 000 0 0ATTRIBUTE Rad_LoginLATGroup 36 000 0 0ATTRIBUTE Rad_FramedAppleTalkLink 37 0 0 0 00&lt;dp n="d16"/&gt;ATTRIBUTE Rad_FramedAppleTalkNetwork 38 00 0 00ATTRIBUTE Rad_FramedAppleTalkZone 39 0 0 0 00ATTRIBUTE Rad_AcctStatusType 403 0 4294967295 40ATTRIBUTE Rad_AectDelayTime413 0 4294967295 40ATTRIBUTE Rad_AcctInputOctets42 0 0 0 00ATTRIBUTE Rad_AcctOutputOctets 43 0 0 0 00ATTRIBUTE Rad_AcctSessionId 44 2 1 20056 0ATTRIBUTE Rad_AectAuthentie 45 00 0 0 0ATTRIBUTE Rad_AcctSessionTime 46 0 0 0 0 0ATTRIBUTE Rad_AcctInputPackets 47 3 0 4294967295 4 0ATTRIBUTE Rad_AcctOutputPackets 48 3 0 4294967295 4 0ATTRIBUTE Rad_AcctTerminateCause49 3 0 4294967295 4 0ATTRIBUTE Rad_AcctMultiSessionId50 0 00 0 0ATTRIBUTE Rad_AcctLinkCount51 00 0 0 0ATTRIBUTE Rad_CHAPChallenge 60 2 5 32 24 0ATTRIBUTE Rad_NASPortType 6130 42949672954 0ATTRIBUTE Rad_PortLimit 62000 0 0ATTRIBUTE Rad_LoginLATPort 63000 00ATTRIBUTE Rad_AcctInterimInterval 85 3 0 4294967295 4ATTRIBUTE Rad_NASPortId 8721 200 320ATTRIBUTE Rad FramedPool88 30 4294967295 4 0ENDLEVELLEVEL 1# headname type kindminmax width formATTRIBUTE Rad_InputPeakRate1 3 04294967295 4 0ATTRIBUTE Rad_InputAverageRate 2 3 04294967295 4 0ATTRIBUTE Rad_InputBasicRate 3 3 04294967295 4 0ATTRIBUTE Rad_OutputPeakRate43 04294967295 4 0ATTRIBUTE Rad_OutputAverageRate 5 3 04294967295 4 0ATTRIBUTE Rad_OutputBasicRate 6 3 0 4294967295 4 0ATTRIBUTE Rad_InputKilobytesBeforeTariffSwitch 7 3 0 4294967295 40ATTRIBUTE Rad_OutputKilobytesBeforeTariffSwitch 8 3 04294967295 4 0ATTRIBUTE Rad_InputPacketsBeforeTariffSwitch9 3 04294967295 4 0ATTRIBUTE Rad_OutputPacketsBeforeTariffSwitch 10 3 04294967295 4 0ATTRIBUTE Rad_InputKilobytesAfterTariffSwitch 11 3 04294967295 4 0ATTRIBUTE Rad_OutputKilobytesAfterTariffSwitch 12 3 04294967295 4 0ATTRIBUTE Rad_InputPacketsAfterTariffSwitch 13 3 04294967295 4 0ATTRIBUTE Rad_OutputPacketsAfierTariffSwitch14 3 04294967295 4 0ATTRIBUTE Rad_RemanentVolume 153 0 4294967295 4 0ATTRIBUTE Rad_TariffSwitchInterva116 3 0 4294967295 4 0ATTRIBUTE Rad_ISPID 17 2 0 64 32 0ATTRIBUTE Rad_MaxUsersPerLogicPort 19 3 0 4294967295 4 0ATTRIBUTE Rad_Command 20 304294967295 4 0ATTRIBUTE Rad_Priority 22 304294967295 4 0ATTRIBUTE Rad_ControlIdentifier 24 3 0 4294967295 4 0ATTRIBUTE Rad_ResultCode 25 30 4294967295 40ATTRIBUTE Rad_ConnectId 26 30 4294967295 4 0ENDLEVEL</pre>
權(quán)利要求
1.一種實(shí)現(xiàn)用戶業(yè)務(wù)遠(yuǎn)程驗(yàn)證撥號(hào)(RADIUS)協(xié)議的編碼和解碼方法,RADIUS協(xié)議棧類包含多個(gè)RADIUS協(xié)議棧,其特征在于,當(dāng)RADIUS協(xié)議處理器對(duì)任一RADIUS協(xié)議棧進(jìn)行編碼和解碼處理時(shí),執(zhí)行以下步驟(1)將該RADIUS協(xié)議棧下定義的結(jié)構(gòu)信息寫入存儲(chǔ)器內(nèi),所述結(jié)構(gòu)信息包括每一屬性的各種特征信息和每種類型RADIUS報(bào)文中所使用屬性的各種使用狀態(tài)信息,并且不同RADIUS協(xié)議棧下定義的所述結(jié)構(gòu)信息都具有預(yù)先確定的統(tǒng)一格式;以及(2)從存儲(chǔ)器內(nèi)讀取具有所述預(yù)先確定的統(tǒng)一格式的結(jié)構(gòu)信息;以及(3)對(duì)于每一種具有所述預(yù)先確定的統(tǒng)一格式的結(jié)構(gòu)信息,都以不同RADIUS協(xié)議棧之間都相同的編碼和解碼方式進(jìn)行處理以獲得實(shí)現(xiàn)該RADIUS協(xié)議棧的指令代碼。
2.如權(quán)利要求1所述的實(shí)現(xiàn)RADIUS協(xié)議的編碼和解碼方法,其特征在于,每個(gè)RADIUS協(xié)議棧下定義的結(jié)構(gòu)信息按照以下統(tǒng)一格式寫入一個(gè)可存儲(chǔ)在存儲(chǔ)器內(nèi)的配置文件中所述配置文件由頭部、報(bào)文和屬性三部分組成,每一部分由字段組成,其中,頭部部分包含分別描述每個(gè)RADIUS協(xié)議棧內(nèi)最大和最小報(bào)文長(zhǎng)度、是否過(guò)濾未知屬性、基本屬性的最小長(zhǎng)度、結(jié)構(gòu)型屬性的最小長(zhǎng)度的字段;報(bào)文部分用于描述每個(gè)RADIUS協(xié)議棧下每個(gè)RADIUS報(bào)文所使用屬性的使用狀態(tài)信息,包含分別描述每種RADIUS報(bào)文內(nèi)所使用屬性的屬性編號(hào)、屬性性質(zhì)、屬性在目標(biāo)報(bào)文結(jié)構(gòu)中出現(xiàn)次數(shù)的字段;屬性部分用于描述每個(gè)RADIUS協(xié)議棧下每一屬性的特征信息,包含分別描述每個(gè)屬性的屬性名稱、屬性編號(hào)、屬性數(shù)據(jù)類型、屬性最小長(zhǎng)度或最小值、屬性最大長(zhǎng)度或最大值、屬性在報(bào)文結(jié)構(gòu)中的長(zhǎng)度和結(jié)構(gòu)型屬性標(biāo)志的字段。
3.如權(quán)利要求2所述的實(shí)現(xiàn)RADIUS協(xié)議的編碼和解碼方法,其特征在于,屬性部分由基本屬性和子屬性兩部分組成,其中基本屬性部分包含分別描述每個(gè)基本屬性的屬性名稱、屬性編號(hào)、屬性數(shù)據(jù)類型、屬性最小長(zhǎng)度或最小值、屬性最大長(zhǎng)度或最大值、屬性在報(bào)文結(jié)構(gòu)中的長(zhǎng)度和結(jié)構(gòu)型屬性標(biāo)志的字段,子屬性部分包含分別描述每個(gè)子屬性的屬性名稱、屬性編號(hào)、屬性數(shù)據(jù)類型、屬性最小長(zhǎng)度或最小值、屬性最大長(zhǎng)度或最大值、屬性在報(bào)文結(jié)構(gòu)中的長(zhǎng)度和結(jié)構(gòu)型屬性標(biāo)志的字段。
4.如權(quán)利要求2或3所述的實(shí)現(xiàn)RADIUS協(xié)議的編碼和解碼方法,其特征在于,在對(duì)屬性的結(jié)構(gòu)信息進(jìn)行編碼和解碼時(shí),對(duì)編碼和解碼后RADIUS報(bào)文中的屬性長(zhǎng)度和屬性取值范圍與配置文件進(jìn)行比較以確定編碼和解碼處理是否正確。
5.如權(quán)利要求2或3所述的實(shí)現(xiàn)RADIUS協(xié)議的編碼和解碼方法,其特征在于,在對(duì)屬性的結(jié)構(gòu)信息進(jìn)行編碼和解碼時(shí),對(duì)編碼和解碼后RADIUS報(bào)文中屬性可能出現(xiàn)個(gè)數(shù)與配置文件進(jìn)行比較以確定編碼和解碼處理是否正確。
全文摘要
本發(fā)明提供一種實(shí)現(xiàn)用戶業(yè)務(wù)遠(yuǎn)程驗(yàn)證撥號(hào)(RADIUS)協(xié)議的編解碼方法,它將RADIUS協(xié)議棧下定義的結(jié)構(gòu)信息寫入一個(gè)配置文件中,不同RADIUS協(xié)議棧下定義的所述結(jié)構(gòu)信息在配置文件中都具有預(yù)先確定的統(tǒng)一格式。因此對(duì)于每一種具有預(yù)先確定的統(tǒng)一格式的結(jié)構(gòu)信息,可以都以不同RADIUS協(xié)議棧之間都相同的編碼和解碼方式進(jìn)行處理以獲得實(shí)現(xiàn)該RADIUS協(xié)議棧的指令代碼。因此當(dāng)RADIUS協(xié)議棧有改動(dòng)時(shí),只要改動(dòng)后的結(jié)構(gòu)信息仍然以原先的統(tǒng)一格式表示,就無(wú)需修改編碼和解碼方式。這樣,開(kāi)發(fā)RADIUS協(xié)議棧代碼的周期將大大縮短并且減少了維護(hù)的工作量和成本。
文檔編號(hào)H04L12/00GK1471260SQ02136148
公開(kāi)日2004年1月28日 申請(qǐng)日期2002年7月22日 優(yōu)先權(quán)日2002年7月22日
發(fā)明者鄭志鵬 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1