專利名稱:基于遠(yuǎn)程用戶撥號認(rèn)證協(xié)議客戶端的計費方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信系統(tǒng)中基于遠(yuǎn)程用戶撥號認(rèn)證協(xié)議(RADIUS)的計費方法。
為達(dá)到上述目的,本發(fā)明提供的基于遠(yuǎn)程用戶撥號認(rèn)證協(xié)議客戶端的計費方法,包括a.為每個計費服務(wù)器組建立用于存儲客戶端發(fā)出的計費結(jié)束請求數(shù)據(jù)包的計費事件結(jié)束隊列;b.將客戶端停止上網(wǎng)時發(fā)出的計費結(jié)束請求數(shù)據(jù)包存入計費事件結(jié)束隊列;c.從隊列中依次讀出計費結(jié)束請求數(shù)據(jù)包向計費服務(wù)器發(fā)送,直至隊列中的全部請求發(fā)送完畢結(jié)束;d.當(dāng)所有的計費服務(wù)器都不可使用時,將發(fā)送失敗的計費結(jié)束請求數(shù)據(jù)包存入隊列;e.繼續(xù)將新的計費結(jié)束請求數(shù)據(jù)包存入隊列,同時等待有可以進(jìn)行檢測的計費服務(wù)器;
f.檢查是否有可以進(jìn)行正常計費的服務(wù)器,在檢查過程中,繼續(xù)將新的計費結(jié)束請求數(shù)據(jù)包存入隊列,如果檢查結(jié)果為有可以進(jìn)行正常計費的服務(wù)器,轉(zhuǎn)步驟b,否則轉(zhuǎn)步驟e。
步驟d還包括判斷是否所有計費服務(wù)器都不可使用。
步驟f所述檢查是否有可以進(jìn)行正常計費的服務(wù)器,是從計費事件結(jié)束隊列中讀出一個計費結(jié)束請求數(shù)據(jù)包,并發(fā)送該計費結(jié)束請求數(shù)據(jù)包檢測可用的計費服務(wù)器是否能夠正常計費。
上述發(fā)送計費結(jié)束請求數(shù)據(jù)包檢測可用的計費服務(wù)器是否能夠正常計費,通過能否在規(guī)定的時間內(nèi)收到正確的計費應(yīng)答實現(xiàn)。
由于本發(fā)明利用為RADIUS計費服務(wù)器組建立的計費結(jié)束事件隊列保存需要向RADIUS計費服務(wù)器發(fā)送計費結(jié)束請求數(shù)據(jù)包的事件,在發(fā)送計費結(jié)束請求數(shù)據(jù)包時,首先將該數(shù)據(jù)包存入隊列,再從隊列中讀取計費結(jié)束請求數(shù)據(jù)包發(fā)送,當(dāng)發(fā)現(xiàn)所有計費服務(wù)器均不可用時會再次將此計費結(jié)束請求數(shù)據(jù)包存入隊列;由于在未確認(rèn)完成計費結(jié)束前始終保存計費結(jié)束信息,可以保證基于RADIUS協(xié)議的客戶端計費的可靠性。
本發(fā)明實質(zhì)在于保護(hù)計費信息中最重要的計費結(jié)束請求數(shù)據(jù)包的發(fā)送,在計費完全失敗時,保存計費信息,當(dāng)RADIUS計費服務(wù)器一旦恢復(fù),馬上發(fā)出這些保存的計費信息,從而實現(xiàn)基于RADIUS協(xié)議客戶端的可靠計費。
下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)的描述。
圖1是本發(fā)明方法的實施例流程圖。按照圖1,首先要為每個計費服務(wù)器組設(shè)置一個狀態(tài)機(jī)進(jìn)行計費狀態(tài)的控制,同時,為每個計費服務(wù)器組建立用于存儲客戶端發(fā)出的計費結(jié)束請求數(shù)據(jù)包的計費事件結(jié)束隊列。上述計費結(jié)束請求數(shù)據(jù)包為客戶端發(fā)出的計費結(jié)束相關(guān)信息的集合。
所述計費結(jié)束事件隊列采用利用雙向鏈表實現(xiàn),參考圖2,即每一節(jié)點的數(shù)據(jù)結(jié)構(gòu)中分別有兩個成員指向他的前一節(jié)點和后一節(jié)點,這樣只要記錄隊列頭、隊列尾即可方便的進(jìn)行操作。該隊列采用先進(jìn)先出的方式,在隊列中讀取計費結(jié)束請求數(shù)據(jù)包時從隊列頭開始,將計費結(jié)束請求數(shù)據(jù)包存入隊列時從隊列尾部存入,圖中的事件內(nèi)容部分即可用于存儲計費結(jié)束請求數(shù)據(jù)包。
狀態(tài)機(jī)用于計費過程中計費服務(wù)狀態(tài)的轉(zhuǎn)換,即記錄計費狀態(tài)是否正常,并控制計費狀態(tài)的躍遷。對于計費服務(wù)器組的單個計費服務(wù)器來說,有DOWN和UP兩種狀態(tài)。DOWN狀態(tài)是此服務(wù)器不可用,可能是向其發(fā)送RADIUS包失敗或收不到計費應(yīng)答。采用RADIUS協(xié)議,在DOWN的狀態(tài)持續(xù)一端時間以后會認(rèn)為此服務(wù)器有可能已經(jīng)恢復(fù),這時再將其狀態(tài)恢復(fù)為可用,用UP表示。但這時的UP是未經(jīng)過確認(rèn)的,因此是不可靠的,只能說有可能UP了,為避免失誤。這時可以發(fā)送一個計費包試探是否真的已經(jīng)恢復(fù)。當(dāng)確認(rèn)已經(jīng)恢復(fù)后再按照正常情況發(fā)出計費結(jié)束包。
因此圖1所述實施例涉及三個計費狀態(tài)1、正常狀態(tài)即可以正常發(fā)送計費包;2、異常狀態(tài)這時可能是所有的計費服務(wù)器都是DOWN狀態(tài),或根本沒有配置RADIUS計費服務(wù)器。
3、檢測狀態(tài)此時即正在發(fā)送一個計費包試探計費是否恢復(fù),但尚未收到應(yīng)答包時。如果有多個可用的計費服務(wù)器,當(dāng)檢測一個服務(wù)器失敗時,需要依次向其他計費服務(wù)器發(fā)送計費包試探,直到發(fā)送成功或證明所有服務(wù)器均不可用為止。整個過程中狀態(tài)均為檢測狀態(tài)。狀態(tài)的躍遷參考圖3。
1、出現(xiàn)一個計費包發(fā)送失敗,即向所有可用RADIUS服務(wù)器發(fā)送計費包均不成功,或發(fā)送成功卻得不到應(yīng)答,將計費狀態(tài)變?yōu)楫惓顟B(tài)。
2、如果計費服務(wù)器組中有計費服務(wù)器狀態(tài)為UP,使用此計費服務(wù)器發(fā)送一個計費包成功,這時啟動定時器等待收到計費應(yīng)答包或超時,將計費狀態(tài)變?yōu)闄z測狀態(tài)。
3、收到了檢測時發(fā)送的計費包的應(yīng)答包,將計費狀態(tài)變?yōu)檎顟B(tài)。
4、檢測失敗,將計費狀態(tài)變成異常狀態(tài)。
這樣,在正常計費狀態(tài),在步驟11將客戶端停止上網(wǎng)時發(fā)出的計費結(jié)束請求數(shù)據(jù)包存入計費事件結(jié)束隊列,同時,在步驟12從隊列中依次讀出計費結(jié)束請求數(shù)據(jù)包向計費服務(wù)器發(fā)送,直至隊列中的全部計費結(jié)束請求數(shù)據(jù)包發(fā)送完畢結(jié)束。在計費結(jié)束請求數(shù)據(jù)包發(fā)送過程中,如果計費服務(wù)器組中所有計費服務(wù)器都不可使用,即向所有可用計費服務(wù)器發(fā)送計費結(jié)束請求包不成功,或發(fā)送成功卻得不到應(yīng)答時,在步驟13將發(fā)送失敗的計費結(jié)束請求數(shù)據(jù)包存入隊列,并進(jìn)入計費異常狀態(tài),在計費異常狀態(tài),經(jīng)步驟14繼續(xù)將新的計費結(jié)束請求數(shù)據(jù)包存入隊列,同時等待有可以進(jìn)行檢測的計費服務(wù)器;在步驟15定時從計費異常狀態(tài)進(jìn)入到計費檢測狀態(tài),在進(jìn)入計費檢測狀態(tài)時,在步驟15檢查是否有可以進(jìn)行正常計費的服務(wù)器,同時繼續(xù)將新的計費結(jié)束請求數(shù)據(jù)包存入隊列;如果在步驟16判斷有可以進(jìn)行正常計費的服務(wù)器,則進(jìn)入計費正常狀態(tài),轉(zhuǎn)步驟11繼續(xù)操作,否則回到計費異常狀態(tài),繼續(xù)步驟14的操作。
步驟15所述檢查是否有可以進(jìn)行正常計費的服務(wù)器,是從計費事件結(jié)束隊列中讀出一個計費結(jié)束請求數(shù)據(jù)包,并發(fā)送該計費結(jié)束請求數(shù)據(jù)包檢測可用的計費服務(wù)器是否能夠正常計費,如果在規(guī)定的時間內(nèi)收到正確的計費應(yīng)答響應(yīng),說明可用的計費服務(wù)器能夠進(jìn)行正常計費,否則說明該計費服務(wù)器還不能夠進(jìn)行正常計費。
圖1所述實施例可以通過兩個進(jìn)程實現(xiàn),一個進(jìn)程用于用戶退出網(wǎng)絡(luò)時將計費結(jié)束請求數(shù)據(jù)包首先寫入計費結(jié)束事件隊列;另一個進(jìn)程用于數(shù)據(jù)包的可靠發(fā)送,包括由隊列頭開始依次讀出計費結(jié)束請求數(shù)據(jù)包發(fā)送、接收計費應(yīng)答包、得不到應(yīng)答包的超時處理。在發(fā)送時針對3種計費狀態(tài)做不同的處理。正常狀態(tài)時,依次從隊列中讀出計費結(jié)束請求數(shù)據(jù)包發(fā)送,直到所有計費結(jié)束包發(fā)完,或出現(xiàn)發(fā)送失敗,在失敗時,將發(fā)送失敗的計費結(jié)束請求數(shù)據(jù)包重新存入隊列。異常狀態(tài)時,檢查是否有可用的計費服務(wù)器,如果有從隊列頭開始讀出一個事件,發(fā)送一個計費結(jié)束包進(jìn)行檢測,同時將新的客戶端發(fā)送失敗的計費結(jié)束請求數(shù)據(jù)包存入隊列,參考圖4。
在圖1所述實施例具體實現(xiàn)時,大量的存儲計費信息勢必占用很多系統(tǒng)資源,如果不加控制,將會占滿存儲空間,而使系統(tǒng)崩潰。因此需要限制儲存的數(shù)量。有兩種解決方案1、當(dāng)發(fā)現(xiàn)無法計費后,拒絕其他需要使用此計費服務(wù)器組計費的用戶登錄網(wǎng)絡(luò),而已經(jīng)在線用戶仍然可以使用。這樣所要貯存的用戶計費信息最多僅僅是現(xiàn)有在線用戶。
由于這種方式過于嚴(yán)格,為了靈活應(yīng)用,本實施例配合使用另外的計費選項。當(dāng)長時間無法恢復(fù)計費時,又希望提供網(wǎng)絡(luò)服務(wù)時,通過此選項刪除隊列中所有保存的計費信息,允許后面用戶登錄??梢愿鶕?jù)不同的使用要求選用下述方案2。
2、采用有限長度的計費結(jié)束事件隊列,當(dāng)向此隊列加入事件時如果發(fā)現(xiàn)隊列已滿,則丟棄計費結(jié)束信息。丟棄的策略可以為a、丟棄最早要求計費的用戶;b、丟棄當(dāng)前用戶;c、丟棄使用網(wǎng)絡(luò)資源最少的用戶,比如使用時間最短、流量最少等等;d、隨機(jī)丟棄。
權(quán)利要求
1.一種基于遠(yuǎn)程用戶撥號認(rèn)證協(xié)議客戶端的計費方法,包括a.為每個計費服務(wù)器組建立用于存儲客戶端發(fā)出的計費結(jié)束請求數(shù)據(jù)包的計費事件結(jié)束隊列;b.將客戶端停止上網(wǎng)時發(fā)出的計費結(jié)束請求數(shù)據(jù)包存入計費事件結(jié)束隊列;c.從隊列中依次讀出計費結(jié)束請求數(shù)據(jù)包向計費服務(wù)器發(fā)送,直至隊列中的全部請求發(fā)送完畢結(jié)束;d.當(dāng)所有的計費服務(wù)器都不可使用時,將發(fā)送失敗的計費結(jié)束請求數(shù)據(jù)包存入隊列;e.繼續(xù)將新的計費結(jié)束請求數(shù)據(jù)包存入隊列,同時等待有可以進(jìn)行檢測的計費服務(wù)器;f.檢查是否有可以進(jìn)行正常計費的服務(wù)器,在檢查過程中,繼續(xù)將新的計費結(jié)束請求數(shù)據(jù)包存入隊列,如果檢查結(jié)果為有可以進(jìn)行正常計費的服務(wù)器,轉(zhuǎn)步驟b,否則轉(zhuǎn)步驟e。
2.根據(jù)權(quán)利要求1所述的計費方法,其特征在于步驟d還包括判斷是否所有計費服務(wù)器都不可使用。
3.根據(jù)權(quán)利要求2所述的計費方法,其特征在于步驟e所述可以檢測的計費的服務(wù)器,是指新配置的計費服務(wù)器,或發(fā)現(xiàn)不可用后間隔了一定時間的計費服務(wù)器。
4.根據(jù)權(quán)利要求3所述的計費方法,其特征在于步驟f所述檢查是否有可以進(jìn)行正常計費的服務(wù)器,是從計費事件結(jié)束隊列中讀出一個計費結(jié)束請求數(shù)據(jù)包,并發(fā)送該計費結(jié)束請求數(shù)據(jù)包檢測可用的計費服務(wù)器是否能夠正常計費。
5.根據(jù)權(quán)利要求4所述的計費方法,其特征在于所述發(fā)送計費結(jié)束請求數(shù)據(jù)包檢測可用的計費服務(wù)器是否能夠正常計費,通過能否在規(guī)定的時間內(nèi)收到正確的計費應(yīng)答實現(xiàn)。
6.根據(jù)權(quán)利要求5所述的計費方法,其特征在于所述步驟e以及步驟f還包括當(dāng)超過規(guī)定的時間不能進(jìn)入正常計費狀態(tài),拒絕非在線用戶登錄網(wǎng)絡(luò)。
7.根據(jù)權(quán)利要求5所述的計費方法,其特征在于所述步驟e以及步驟f還包括當(dāng)超過規(guī)定的時間不能進(jìn)入正常計費狀態(tài),刪除計費事件結(jié)束隊列的計費結(jié)束請求數(shù)據(jù)包。
8.根據(jù)權(quán)利要求5所述的計費方法,其特征在于所述步驟e以及步驟f還包括當(dāng)超過規(guī)定的時間不能進(jìn)入正常計費狀態(tài)且計費事件結(jié)束隊列已滿時,丟棄計費結(jié)束請求數(shù)據(jù)包。
9.根據(jù)權(quán)利要求6、7、或8所述的計費方法,其特征在于所述方法的計費狀態(tài)由狀態(tài)機(jī)控制。
10.根據(jù)權(quán)利要求9所述的計費方法,其特征在于該方法所述建立計費事件結(jié)束隊列是建立由雙向鏈表構(gòu)成的隊列。
全文摘要
本發(fā)明公開了一種基于遠(yuǎn)程用戶撥號認(rèn)證協(xié)議客戶端的計費方法,該方法為每個計費服務(wù)器組建立用于存儲客戶端發(fā)出的計費結(jié)束請求數(shù)據(jù)包的計費事件結(jié)束隊列;在正常計費狀態(tài),將客戶端停止上網(wǎng)時發(fā)出的計費結(jié)束請求數(shù)據(jù)包存入計費事件結(jié)束隊列,同時從隊列中依次讀出計費結(jié)束請求數(shù)據(jù)包向計費服務(wù)器發(fā)送,直至隊列中的全部請求發(fā)送完畢結(jié)束,當(dāng)所有的計費服務(wù)器都不可使用時,將發(fā)送失敗的計費結(jié)束請求數(shù)據(jù)包和繼續(xù)將新的客戶端發(fā)送失敗的計費結(jié)束請求數(shù)據(jù)包存入隊列,同時檢查是否有可以進(jìn)行正常計費的服務(wù)器,如果有,進(jìn)入計費正常狀態(tài);采用上述方案能夠在計費結(jié)束前保存計費結(jié)束信息,因此可以保證基于RADIUS協(xié)議的客戶端計費的可靠性。
文檔編號H04M17/00GK1464681SQ02123510
公開日2003年12月31日 申請日期2002年6月28日 優(yōu)先權(quán)日2002年6月28日
發(fā)明者樊遲 申請人:華為技術(shù)有限公司