Sip消息處理方法與裝置制造方法
【專利摘要】本發(fā)明提供了一種SIP消息處理方法與裝置,其中,SIP消息基于UDP進(jìn)行網(wǎng)絡(luò)傳輸,所述方法包括:狀態(tài)呈現(xiàn)Presence服務(wù)器接收到客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消息;確定所述客戶端和/或中間網(wǎng)元接收所述SIP通知請(qǐng)求消息產(chǎn)生亂序,其中,所述SIP通知請(qǐng)求消息中攜帶有所述客戶端訂閱的Presence實(shí)體狀態(tài)更新信息;更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息;其中,所述SIP錯(cuò)誤響應(yīng)消息中攜帶有發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào)。通過本發(fā)明,避免了訂閱的狀態(tài)通知失敗。
【專利說明】SIP消息處理方法與裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信【技術(shù)領(lǐng)域】,特別是涉及一種基于UDP (User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)網(wǎng)絡(luò)傳輸?shù)腟IP (Session Initiation Protocol,會(huì)話初始協(xié)議)消息處理方
法與裝置。
【背景技術(shù)】
[0002]Presence (狀態(tài)呈現(xiàn))業(yè)務(wù)是多媒體會(huì)議、即時(shí)消息等網(wǎng)絡(luò)應(yīng)用中的一項(xiàng)重要業(yè)務(wù),它允許用戶發(fā)布自己的Presence信息,允許一個(gè)用戶查詢另一個(gè)用戶的Presence信息,或者通過訂閱另一個(gè)用戶的Presence信息而被通知訂閱信息的改變。其中,用戶的Presence信息可以包括用戶的通信意愿、用戶的通信手段、用戶的場(chǎng)所、其他描述信息等,除此之外還包括一些設(shè)備信息,例如用戶是否在線等。而SIP協(xié)議是一個(gè)用于建立、更改和終止多媒體會(huì)話或呼叫的應(yīng)用層協(xié)議,在Presence業(yè)務(wù)的實(shí)現(xiàn)過程中,SIP協(xié)議可以很好地作為一種Presence協(xié)議來實(shí)現(xiàn)Presence業(yè)務(wù)。
[0003]Presence業(yè)務(wù)實(shí)現(xiàn)過程中,Presentity作為發(fā)布Presence信息的實(shí)體,Watcher作為獲取Presence信息的實(shí)體,可以是一個(gè)用戶,也可以是一些設(shè)備。Watcher訂閱它所關(guān)心的Presentity的狀態(tài)信息(通過SIP subscribe消息即SIP訂閱消息向Presence服務(wù)器發(fā)起訂閱請(qǐng)求),當(dāng)Presentity信息發(fā)生變化時(shí),Presence服務(wù)器將通過SIP notify消息即SIP通知消息將變化信息通知給Presentity。該SIP notify消息中攜帶有SIP CSeq值,以指示消息序號(hào)。SIP請(qǐng)求中的Cseq頭域包含了一個(gè)單個(gè)的數(shù)字序列號(hào)(即CSeq值)和請(qǐng)求的方法,這個(gè)序列號(hào)必須是表示成為一個(gè)32位的無符號(hào)整數(shù)。Cseq頭域是為了在會(huì)話中對(duì)事務(wù)進(jìn)行排序的,提供事務(wù)的唯一標(biāo)志,如果序列號(hào)相等,并且請(qǐng)求的方法相等,那么兩個(gè)Cseq頭域就是相等的。在一個(gè)會(huì)話過程中,客戶端接收服務(wù)端的請(qǐng)求消息的Cseq值必須為遞增的,如果當(dāng)前接收到消息的Cseq值小于之前接收的請(qǐng)求消息對(duì)應(yīng)的Cseq值,客戶端將丟棄此消息。
[0004]一種因Cseq值亂序?qū)е碌亩嘤脩魻顟B(tài)變化通知失敗流程如圖1所示,圖1中,具有 Presence 實(shí)體即 Presentityl 和 Presentity2、Presence 月艮務(wù)器和、客戶端 Watcher。該流程包括:步驟S102, Watcher向Presence服務(wù)器發(fā)起訂閱請(qǐng)求,訂閱Presentityl與Presentityl狀態(tài)信息;步驟S104, Presence服務(wù)器接收Watcher訂閱請(qǐng)求,返回2000K成功響應(yīng);步驟S106, Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息;步驟S108, Watcher向Presence服務(wù)器返回notify請(qǐng)求2000K成功響應(yīng);步驟S110, Presentityl狀態(tài)更新,向Presence服務(wù)器發(fā)送publish請(qǐng)求消息;步驟S112, Presence服務(wù)器向Ppresentityl返回publish2000K成功響應(yīng);步驟S114, Presentity2狀態(tài)更新,向Presence服務(wù)器發(fā)送publish請(qǐng)求消息;步驟S116,Presence服務(wù)器向Presentity2返回publish2000K成功響應(yīng);步驟S118, Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息,通知其訂閱Presentityl狀態(tài)更新(其中,notify對(duì)應(yīng)的cseq值為η);步驟S120, Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息,通知其訂閱Presentity2狀態(tài)更新(其中,notify對(duì)應(yīng)的cseq值為n+1);步驟S122, notify消息(對(duì)應(yīng)cseq值為n+1)經(jīng)由網(wǎng)絡(luò)傳輸?shù)竭_(dá)Watcher ;步驟S124, Watcher接收notify請(qǐng)求消息,返回2000K成功響應(yīng);步驟S126, Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息,通知其訂閱Presentityl狀態(tài)更新(notify對(duì)應(yīng)的cseq值為η),此處請(qǐng)求發(fā)送的順序?yàn)?Presence服務(wù)器先發(fā)送cseq值為η的notify請(qǐng)求消息,但由于網(wǎng)絡(luò)中傳輸問題,導(dǎo)致到Watcher時(shí),消息亂序,cseq值為n+1的notify請(qǐng)求消息先到,cseq值為η的notify請(qǐng)求消息后到;步驟S128, Watcher接收notify請(qǐng)求消息,判斷該消息對(duì)應(yīng)的cseq值小于前一消息對(duì)應(yīng)的cseq值,向Presence服務(wù)器返回500錯(cuò)誤響應(yīng),丟棄cseq值為η的notify請(qǐng)求消息。
[0005]可見,目前的Presence業(yè)務(wù)訂閱通知機(jī)制,當(dāng)訂閱者訂閱的用戶狀態(tài)同時(shí)變化時(shí)(如多個(gè)用戶同時(shí)注冊(cè)上線),Presence服務(wù)器將向訂閱者發(fā)送notify通知消息,消息在基于UDP的網(wǎng)絡(luò)傳輸過程中,將會(huì)出現(xiàn)notify消息在網(wǎng)絡(luò)中傳輸亂序的情形,訂閱者客戶端接收到亂序的消息后,將丟棄該消息,從而導(dǎo)致訂閱者訂閱的狀態(tài)通知失敗。
【發(fā)明內(nèi)容】
[0006]本發(fā)明提供了一種基于UDP網(wǎng)絡(luò)傳輸?shù)腟IP消息處理方法與裝置,以解決現(xiàn)有Presence業(yè)務(wù)訂閱通知機(jī)制,當(dāng)出現(xiàn)通知請(qǐng)求消息如notify消息在網(wǎng)絡(luò)中傳輸亂序時(shí),客戶端丟棄該消息,從而導(dǎo)致訂閱的狀態(tài)通知失敗的問題。
[0007]為了解決上述問題,本發(fā)明公開了一種會(huì)話初始協(xié)議SIP消息處理方法,所述SIP消息基于用戶數(shù)據(jù)報(bào)協(xié)議UDP進(jìn)行網(wǎng)絡(luò)傳輸,所述方法包括:狀態(tài)呈現(xiàn)Presence服務(wù)器接收到客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消息,其中,所述SIP錯(cuò)誤響應(yīng)消息中攜帶有發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào);確定所述客戶端和/或中間網(wǎng)元接收所述SIP通知請(qǐng)求消息產(chǎn)生亂序;更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息;其中,所述SIP通知請(qǐng)求消息中攜帶有所述客戶端訂閱的Presence實(shí)體狀態(tài)更新信息。
[0008]優(yōu)選地,所述Presence服務(wù)器接收到的所述SIP錯(cuò)誤響應(yīng)消息為指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求的類型的SIP錯(cuò)誤響應(yīng)消息。
[0009]優(yōu)選地,所述SIP錯(cuò)誤響應(yīng)消息中攜帶的發(fā)生錯(cuò)誤的所述SIP通知請(qǐng)求消息的序號(hào)為所述SIP通知請(qǐng)求消息的Cseq值;所述確定所述客戶端和/或中間網(wǎng)元接收所述SIP通知請(qǐng)求消息產(chǎn)生亂序的步驟包括:所述Presence服務(wù)器根據(jù)所述SIP錯(cuò)誤響應(yīng)消息中攜帶的所述SIP通知請(qǐng)求消息的Cseq值,確定所述客戶端和/或中間網(wǎng)元接收的所述SIP通知請(qǐng)求消息的Cseq值小于所述客戶端和/或中間網(wǎng)元在接收所述SIP通知請(qǐng)求消息前接收的、其它SIP通知請(qǐng)求消息的Cseq值。
[0010]優(yōu)選地,所述更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息的步驟包括:所述Presence服務(wù)器按照Cseq值生成規(guī)則生成新的Cseq值,并用所述新的Cseq值替換保存的所述SIP通知請(qǐng)求消息中的Cseq值,重新生成所述SIP通知請(qǐng)求消息。
[0011]優(yōu)選地,在所述更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息的步驟之前,還包括:所述Presence服務(wù)器根據(jù)應(yīng)用層在發(fā)送與所述SIP錯(cuò)誤響應(yīng)消息對(duì)應(yīng)的SIP通知請(qǐng)求消息時(shí)的指示,確定是否向所述客戶端和/或中間網(wǎng)元重新發(fā)送所述SIP通知請(qǐng)求消息;若確定重新發(fā)送,則執(zhí)行所述更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息的步驟;若確定不重新發(fā)送,則丟棄所述SIP通知請(qǐng)求消息。
[0012]優(yōu)選地,在所述Presence服務(wù)器接收到客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消息的步驟之前,還包括:所述客戶端和/或中間網(wǎng)元接收到所述Presence服務(wù)器發(fā)送的所述SIP通知請(qǐng)求消息;所述客戶端和/或中間網(wǎng)元判斷所述SIP通知請(qǐng)求消息的序號(hào)小于之前接受的其它SIP通知請(qǐng)求消息的序號(hào),向所述Presence服務(wù)器發(fā)送所述SIP錯(cuò)誤響應(yīng)消息,其中,所述SIP錯(cuò)誤響應(yīng)消息為指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求的類型的SIP錯(cuò)誤響應(yīng)消息。
[0013]為了解決上述問題,本發(fā)明還公開了一種會(huì)話初始協(xié)議SIP消息處理裝置,所述SIP消息基于用戶數(shù)據(jù)報(bào)協(xié)議UDP進(jìn)行網(wǎng)絡(luò)傳輸,所述裝置包括:第一接收模塊,用于接收客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消息,其中,所述SIP錯(cuò)誤響應(yīng)消息中攜帶有發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào);確定模塊,用于確定所述客戶端和/或中間網(wǎng)元接收所述SIP通知請(qǐng)求消息產(chǎn)生亂序;重傳模塊,用于更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息;其中,所述SIP通知請(qǐng)求消息中攜帶有所述客戶端訂閱的Presence實(shí)體狀態(tài)更新信息。
[0014]優(yōu)選地,所述第一接收模塊接收到的所述SIP錯(cuò)誤響應(yīng)消息為指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求的類型的SIP錯(cuò)誤響應(yīng)消息。
[0015]優(yōu)選地,所述重傳模塊在更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息時(shí):按照Cseq值生成規(guī)則生成新的Cseq值,并用所述新的Cseq值替換保存的所述SIP通知請(qǐng)求消息中的Cseq值,重新生成所述SIP通知請(qǐng)求消息。
[0016]優(yōu)選地,所述SIP消息處理裝置還包括:判斷模塊,用于在所述重傳模塊更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息之前,根據(jù)應(yīng)用層在發(fā)送與所述SIP錯(cuò)誤響應(yīng)消息對(duì)應(yīng)的SIP通知請(qǐng)求消息時(shí)的指示,確定是否向所述客戶端和/或中間網(wǎng)元重新發(fā)送所述SIP通知請(qǐng)求消息;若確定重新發(fā)送,則執(zhí)行所述重傳模塊;若確定不重新發(fā)送,則丟棄所述SIP通知請(qǐng)求消息。
[0017]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
[0018]本發(fā)明針對(duì)基于UDP進(jìn)行網(wǎng)絡(luò)傳輸?shù)腜resence業(yè)務(wù),因?yàn)閁DP是非可靠的網(wǎng)絡(luò)傳輸協(xié)議,因而造成現(xiàn)有Presence業(yè)務(wù)中會(huì)出現(xiàn)通知請(qǐng)求消息如notify消息在網(wǎng)絡(luò)中傳輸亂序,進(jìn)而造成客戶端丟棄該通知請(qǐng)求消息,導(dǎo)致訂閱的狀態(tài)通知失敗。而本發(fā)明中,當(dāng)出現(xiàn)Presence業(yè)務(wù)的通知請(qǐng)求消息如notify消息在網(wǎng)絡(luò)中傳輸亂序時(shí),接收該通知請(qǐng)求消息的客戶端和/或中間網(wǎng)元會(huì)向Presence服務(wù)器發(fā)送相應(yīng)的SIP錯(cuò)誤響應(yīng)消息,Presence服務(wù)器根據(jù)該錯(cuò)誤響應(yīng)消息更新發(fā)生亂序的SIP通知請(qǐng)求消息序號(hào),重新生成與之前消息內(nèi)容相同的SIP通知請(qǐng)求消息,再次向客戶端和/或中間網(wǎng)元發(fā)送。SIP通知請(qǐng)求消息序號(hào)糾正了之前的亂序,使得客戶端和/或中間網(wǎng)元能夠再次接收到出現(xiàn)錯(cuò)誤的SIP通知請(qǐng)求消息,避免了訂閱的狀態(tài)通知失敗?!緦@綀D】
【附圖說明】
[0019]圖1是現(xiàn)有技術(shù)的一種因Cseq值亂序?qū)е碌亩嘤脩魻顟B(tài)變化通知失敗流程圖;
[0020]圖2是根據(jù)本發(fā)明實(shí)施例一的一種SIP消息處理方法的步驟流程圖;
[0021]圖3是根據(jù)本發(fā)明實(shí)施例二的一種SIP消息處理方法的步驟流程圖;
[0022]圖4是根據(jù)本發(fā)明實(shí)施例三的一種SIP消息處理方法的流程圖;
[0023]圖5是根據(jù)本發(fā)明實(shí)施例四的一種SIP消息處理方法的流程圖;
[0024]圖6是根據(jù)本發(fā)明實(shí)施例五的一種SIP消息處理方法的流程圖;
[0025]圖7是根據(jù)本發(fā)明實(shí)施例六的一種SIP消息處理方法的流程圖;
[0026]圖8是根據(jù)本發(fā)明實(shí)施例七的一種SIP消息處理方法的流程圖;
[0027]圖9是根據(jù)本發(fā)明實(shí)施例八的一種SIP消息處理裝置的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0028]為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。
[0029]實(shí)施例一
[0030]參照?qǐng)D2,示出了根據(jù)本發(fā)明實(shí)施例一的一種SIP消息處理方法的步驟流程圖。
[0031]本實(shí)施例的SIP消息處理方法中的SIP消息基于UDP進(jìn)行網(wǎng)絡(luò)傳輸,本實(shí)施例的SIP消息處理方法包括以下步驟:
[0032]步驟S202 =Presence服務(wù)器接收到客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消
肩、O
[0033]其中,SIP錯(cuò)誤響應(yīng)消息中攜帶有發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào)。該SIP錯(cuò)誤響應(yīng)消息遵循SIP協(xié)議規(guī)范,是Presence服務(wù)器發(fā)送的通知請(qǐng)求消息如notify消息在網(wǎng)絡(luò)中傳輸亂序時(shí),由接收該通知請(qǐng)求消息的客戶端和/或中間網(wǎng)元向Presence服務(wù)器發(fā)出的。
[0034]步驟S204 =Presence服務(wù)器確定客戶端和/或中間網(wǎng)元接收SIP通知請(qǐng)求消息產(chǎn)生亂序。
[0035]也即,Presence服務(wù)器發(fā)送的通知請(qǐng)求消息在網(wǎng)絡(luò)傳輸中出現(xiàn)了亂序。
[0036]其中,SIP通知請(qǐng)求消息中攜帶有客戶端訂閱的Presence實(shí)體狀態(tài)更新信息。
[0037]步驟S206:Presence服務(wù)器更新SIP通知請(qǐng)求消息序號(hào),重新生成SIP通知請(qǐng)求消息,并向客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的SIP通知請(qǐng)求消息。
[0038]經(jīng)過本步驟,客戶端和/或中間網(wǎng)元將接收到新的SIP通知請(qǐng)求消息,該新的SIP通知請(qǐng)求消息攜帶的客戶端訂閱的Presence實(shí)體狀態(tài)更新信息與之前出現(xiàn)亂序的SIP通知請(qǐng)求消息攜帶的信息內(nèi)容相同,但新的序號(hào)將糾正之前的亂序,使客戶端和/或中間網(wǎng)元能夠重新正確接收客戶端訂閱的Presence實(shí)體狀態(tài)更新信息。
[0039]通過本實(shí)施例,針對(duì)基于UDP進(jìn)行網(wǎng)絡(luò)傳輸?shù)腜resence業(yè)務(wù),因?yàn)閁DP是非可靠的網(wǎng)絡(luò)傳輸協(xié)議,因而造成現(xiàn)有Presence業(yè)務(wù)中會(huì)出現(xiàn)通知請(qǐng)求消息如notify消息在網(wǎng)絡(luò)中傳輸亂序,進(jìn)而造成客戶端丟棄該通知請(qǐng)求消息,導(dǎo)致訂閱的狀態(tài)通知失敗。而本實(shí)施例中,當(dāng)出現(xiàn)Presence業(yè)務(wù)的通知請(qǐng)求消息如notify消息在網(wǎng)絡(luò)中傳輸亂序時(shí),接收該通知請(qǐng)求消息的客戶端和/或中間網(wǎng)元會(huì)向Presence服務(wù)器發(fā)送相應(yīng)的SIP錯(cuò)誤響應(yīng)消息,Presence服務(wù)器根據(jù)該錯(cuò)誤響應(yīng)消息更新發(fā)生亂序的SIP通知請(qǐng)求消息序號(hào),重新生成與之前消息內(nèi)容相同的SIP通知請(qǐng)求消息,再次向客戶端和/或中間網(wǎng)元發(fā)送。SIP通知請(qǐng)求消息序號(hào)糾正了之前的亂序,使得客戶端和/或中間網(wǎng)元能夠再次接收到出現(xiàn)錯(cuò)誤的SIP通知請(qǐng)求消息,避免了訂閱的狀態(tài)通知失敗。
[0040]實(shí)施例二
[0041]參照?qǐng)D3,示出了根據(jù)本發(fā)明實(shí)施例二的一種SIP消息處理方法的步驟流程圖。
[0042]本實(shí)施例的SIP消息處理方法中的SIP消息基于UDP進(jìn)行網(wǎng)絡(luò)傳輸,本實(shí)施例的SIP消息處理方法包括以下步驟:
[0043]步驟S302:Presence服務(wù)器向客戶端和/或中間網(wǎng)元依次發(fā)送多個(gè)notify請(qǐng)求消息。
[0044]本實(shí)施例中,SIP通知請(qǐng)求消息以SIP的notify請(qǐng)求消息為例,每個(gè)notify請(qǐng)求消息都有一個(gè)序號(hào),且攜帶有不同的Presence實(shí)體狀態(tài)更新信息。
[0045]步驟S304:客戶端和/或中間網(wǎng)元接收Presence服務(wù)器發(fā)送的notify請(qǐng)求消息。
[0046]步驟S306:客戶端和/或中間網(wǎng)元判斷本次接收的notify請(qǐng)求消息的序號(hào)小于之前接受的notify請(qǐng)求消息的序號(hào)。
[0047]如,本次接收的notify請(qǐng)求消息的序號(hào)小于前一次接收的notify請(qǐng)求消息的序號(hào);或者,本次接收的notify請(qǐng)求消息的序號(hào)小于之前任意一次,如早于本次前的二次即前前次,接收的notify請(qǐng)求消息的序號(hào)。
[0048]步驟S308:客戶端和/或中間網(wǎng)元向Presence服務(wù)器發(fā)送SIP錯(cuò)誤響應(yīng)消息。
[0049]其中,SIP錯(cuò)誤響應(yīng)消息為指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求的類型的SIP錯(cuò)誤響應(yīng)消息。在該SIP錯(cuò)誤響應(yīng)消息中攜帶有發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào)。
[0050]SIP響應(yīng)消息的類型包括:1XX、2XX、3XX、4XX、5XX、和6XX等多種類型。其中,4XX類型的響應(yīng)消息指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求;5XX類型的響應(yīng)消息指示服務(wù)器端錯(cuò)誤;6XX類型的響應(yīng)消息指示全局錯(cuò)誤。因此,本發(fā)明的SIP錯(cuò)誤響應(yīng)消息采用指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求的類型的SIP錯(cuò)誤響應(yīng)消息。具體到本實(shí)施例,可以采用4XX類型的響應(yīng)消息,如424響應(yīng)消息,當(dāng)然,該消息僅為示例性說明,在實(shí)際應(yīng)用中,本領(lǐng)域技術(shù)人員可以采用任意編號(hào)的4XX類型的響應(yīng)消息。
[0051]步驟S310 =Presence服務(wù)器接收到客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消息,確定客戶端和/或中間網(wǎng)元接收notify請(qǐng)求消息序號(hào)錯(cuò)誤。
[0052]其中,SIP通知請(qǐng)求消息也即本實(shí)施例的notify請(qǐng)求消息中攜帶有客戶端訂閱的Presence實(shí)體狀態(tài)更新信息。
[0053]優(yōu)選地,當(dāng)SIP錯(cuò)誤響應(yīng)消息中攜帶的發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào)為SIP通知請(qǐng)求消息的Cseq值時(shí),本步驟中,Presence服務(wù)器根據(jù)SIP錯(cuò)誤響應(yīng)消息中攜帶的SIP通知請(qǐng)求消息的Cseq值,確定客戶端和/或中間網(wǎng)元接收的SIP通知請(qǐng)求消息的Cseq值小于客戶端和/或中間網(wǎng)元在接收SIP通知請(qǐng)求消息前接收的、其它SIP通知請(qǐng)求消息的Cseq值。Cseq值是SIP通知請(qǐng)求消息的序號(hào)的一種常規(guī)形式,但本領(lǐng)域技術(shù)人員應(yīng)當(dāng)明了,其它表不消息序號(hào)的形式也同樣適用。[0054]步驟S312 =Presence服務(wù)器根據(jù)應(yīng)用層在發(fā)送與SIP錯(cuò)誤響應(yīng)消息對(duì)應(yīng)的SIP通知請(qǐng)求消息時(shí)的指示,確定是否向客戶端和/或中間網(wǎng)元重新發(fā)送SIP通知請(qǐng)求消息,若確定重新發(fā)送,則執(zhí)行步驟S314 ;若確定不重新發(fā)送,則丟棄Presence服務(wù)器保存的與SIP錯(cuò)誤響應(yīng)消息對(duì)應(yīng)的notify請(qǐng)求消息。
[0055]Presence服務(wù)器根據(jù)應(yīng)用層發(fā)送原通知請(qǐng)求消息的指示,確定是否向客戶端和/或中間網(wǎng)元重新發(fā)送SIP通知請(qǐng)求消息。也即,是否重傳SIP通知請(qǐng)求消息,在發(fā)送原SIP通知請(qǐng)求消息時(shí)便已經(jīng)指示給Presence服務(wù)器的底層協(xié)議棧,底層協(xié)議棧在接收錯(cuò)誤響應(yīng)碼時(shí),會(huì)查詢?cè)擁憫?yīng)對(duì)應(yīng)的原SIP通知請(qǐng)求消息是否需要重新發(fā)送。S卩,由上層應(yīng)用指示是否重新發(fā)送原SIP通知請(qǐng)求消息。
[0056]需要說明的是,本步驟為優(yōu)選步驟,可根據(jù)上層應(yīng)用確定是否需要重發(fā)notify請(qǐng)求消息,以提供更大的消息重傳靈活性,并提高系統(tǒng)效率。但本領(lǐng)域技術(shù)人員應(yīng)當(dāng)明了,在實(shí)際應(yīng)用中,也可不進(jìn)行判定,在接收到SIP錯(cuò)誤響應(yīng)消息后即進(jìn)行重傳。
[0057]步驟S314 =Presence服務(wù)器更新發(fā)生序號(hào)錯(cuò)誤的notify請(qǐng)求消息序號(hào),重新生成notify請(qǐng)求消息,并向客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的notify請(qǐng)求消息。
[0058]優(yōu)選地,Presence服務(wù)器按照Cseq值生成規(guī)則生成新的Cseq值,并用新的Cseq值替換保存的發(fā)生序號(hào)錯(cuò)誤的notify請(qǐng)求消息中的Cseq值,重新生成notify請(qǐng)求消息。
[0059]通過本實(shí)施例,解決了現(xiàn)有技術(shù)的Presence業(yè)務(wù)中,當(dāng)采用UDP網(wǎng)絡(luò)傳輸時(shí),導(dǎo)致SIP notify消息傳輸亂序,最終導(dǎo)致客戶端接收消息失敗的問題,保證的客戶端能夠順利獲取Presence實(shí)體的狀態(tài)更新信息。并且,Presence服務(wù)器可以根據(jù)上層應(yīng)用發(fā)送原SIP通知請(qǐng)求消息時(shí)的指示,確定在接收到錯(cuò)誤響應(yīng)消息時(shí),是否更新發(fā)生亂序的SIP通知請(qǐng)求消息序號(hào),重新生成與之前消息內(nèi)容相同的SIP通知請(qǐng)求消息,再次向客戶端和/或中間網(wǎng)元發(fā)送,提高了消息重傳靈活性和系統(tǒng)效率。
[0060]以下,以具體實(shí)例對(duì)本發(fā)明的SIP消息處理方案進(jìn)行說明。下述多個(gè)實(shí)例中,SIP錯(cuò)誤響應(yīng)消息均以424消息為例。也即,響應(yīng)碼:424cseq too small ;含義:客戶端和/或中間網(wǎng)元接收服務(wù)端消息后,用來通知服務(wù)端消息亂序(當(dāng)前接收消息的cseq值小于會(huì)話內(nèi)上一請(qǐng)求消息的cseq值),其中攜帶有發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的cseq值;服務(wù)端協(xié)議棧接收此響應(yīng)消息后,根據(jù)上層應(yīng)用指示,決定是否重新生成并發(fā)送消息。此外,客戶端均以Watcher為例,客戶端和中間網(wǎng)元均要求當(dāng)接收到亂序消息時(shí),支持發(fā)送424響應(yīng)碼;服務(wù)端均以Presence服務(wù)器為例,要求服務(wù)端協(xié)議棧支持接收424響應(yīng)碼,接收該消息后,重新生成并發(fā)送notify消息,并且,還可以根據(jù)自身業(yè)務(wù)需要,由上層應(yīng)用指示是否重新發(fā)送notify消息。
[0061]實(shí)施例三
[0062]參照?qǐng)D4,示出了根據(jù)本發(fā)明實(shí)施例三的一種SIP消息處理方法的流程圖。
[0063]本實(shí)施例以中間網(wǎng)元notify消息接收亂序?yàn)槔?,本?shí)施例的SIP消息處理方法包括以下步驟:
[0064]步驟S402:ffatcher向中間網(wǎng)元發(fā)起訂閱請(qǐng)求Subscribe請(qǐng)求,以通過中間網(wǎng)元向Presence服務(wù)器發(fā)起訂閱請(qǐng)求Subscribe請(qǐng)求,請(qǐng)求訂閱Presentityl與Presentity2的狀態(tài)信息。
[0065]步驟S404:中間網(wǎng)元將Watcher發(fā)送的訂閱請(qǐng)求Subscribe請(qǐng)求發(fā)送至Presence服務(wù)器。
[0066]步驟S406:Presence服務(wù)器接收Watcher通過中間網(wǎng)元發(fā)送的訂閱請(qǐng)求,向中間網(wǎng)元返回2000K成功響應(yīng),以通過中間網(wǎng)元向Watcher返回2000K成功響應(yīng)。
[0067]步驟S408:中間網(wǎng)元透?jìng)?000K成功響應(yīng)至Watcher。
[0068]步驟S410:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息。
[0069]步驟S412:中間網(wǎng)元將notify請(qǐng)求消息透?jìng)髦罻atcher。
[0070]步驟S414:Watcher通過中間網(wǎng)兀向Presence服務(wù)器返回notify請(qǐng)求2000K成功響應(yīng)。
[0071]步驟S416:中間網(wǎng)元將2000K成功響應(yīng)透?jìng)髦罰resence服務(wù)器。
[0072]步驟S418: Presentity I狀態(tài)更新,向Presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0073]步驟S420:Presence 服務(wù)器向 Presentityl 返回 Publish2000K 成功響應(yīng)。
[0074]步驟S422:Presentity2狀態(tài)更新,向Presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0075]步驟S424:Presence 服務(wù)器向 Presentity2 返回 Publish2000K 成功響應(yīng)。
[0076]步驟S426 !Presence服務(wù)器通過中間網(wǎng)元向Watcher發(fā)送notify請(qǐng)求消息,通知其訂閱Presentityl狀態(tài)更新(notify對(duì)應(yīng)的cseq值為η)。
[0077]步驟S428 !Presence服務(wù)器通過中間網(wǎng)元向Watcher發(fā)送notify請(qǐng)求消息,通知其訂閱Presentity2狀態(tài)更新(notify對(duì)應(yīng)的cseq值為n+1)。
[0078]步驟S430 !notify消息(cseq值為n+1)經(jīng)由網(wǎng)絡(luò)傳輸至中間網(wǎng)元。
[0079]步驟S432:中間網(wǎng)元將消息發(fā)送至Watcher。
[0080]步驟S434 =Watcher接收notify請(qǐng)求消息,返回2000K成功響應(yīng)。
[0081]步驟S436:中間網(wǎng)元將2000K成功響應(yīng)透?jìng)髦罰resence服務(wù)器。
[0082]步驟S438:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n),通知其訂閱Presentityl狀態(tài)更新(notify對(duì)應(yīng)的cseq值為η)時(shí),此處請(qǐng)求發(fā)送的順序?yàn)?!Presence服務(wù)器先發(fā)送cseq值為η的notify請(qǐng)求消息,但由于網(wǎng)絡(luò)中傳輸問題,導(dǎo)致到Watcher時(shí),消息亂序,cseq值為n+1的notify請(qǐng)求消息先到,cseq值為η的notify請(qǐng)求消息后到。
[0083]步驟S440:中間網(wǎng)元接收notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n),判斷該消息對(duì)應(yīng)的cseq值小于前一消息對(duì)應(yīng)的cseq值,向Presence服務(wù)器返回424錯(cuò)誤響應(yīng),提示服務(wù)器請(qǐng)求消息亂序。
[0084]步驟S442:Presence服務(wù)器重新生成notify請(qǐng)求消息(重新生成cseq值為n+2),并通過中間網(wǎng)元發(fā)送至Watcher。
[0085]步驟S444:中間網(wǎng)元將notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+2)透?jìng)髦罻atcher。
[0086]步驟S446 =Watcher接收notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+2),返回2000K成功響應(yīng)。
[0087]步驟S448:中間網(wǎng)元將notify2000K成功響應(yīng)透?jìng)髦罰resence服務(wù)器。
[0088]本實(shí)施例中,由中間網(wǎng)元對(duì)亂序notify請(qǐng)求消息進(jìn)行反饋和處理,該反饋和處理對(duì)客戶端Watcher透明,減輕了客戶端Watcher的處理負(fù)擔(dān)。
[0089]實(shí)施例四[0090]參照?qǐng)D5,示出了根據(jù)本發(fā)明實(shí)施例四的一種SIP消息處理方法的流程圖。
[0091]本實(shí)施例以中間網(wǎng)元notify消息接收多次亂序處理為例,本實(shí)施例的SIP消息處理方法包括以下步驟:
[0092]步驟S502:ffatcher向中間網(wǎng)元發(fā)起訂閱請(qǐng)求Subscribe請(qǐng)求,以通過中間網(wǎng)元向Presence服務(wù)器發(fā)起訂閱請(qǐng)求,訂閱Presentityl與Presentity2狀態(tài)信息。
[0093]步驟S504:中間網(wǎng)元將Watcher發(fā)送的訂閱請(qǐng)求發(fā)送至Presence服務(wù)器。
[0094]步驟S506:Presence服務(wù)器接收Watcher訂閱請(qǐng)求,返回2000K成功響應(yīng)。
[0095]步驟S508:中間網(wǎng)元透?jìng)?000K成功響應(yīng)至Watcher。
[0096]步驟S510:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息。
[0097]步驟S512:中間網(wǎng)元將notify請(qǐng)求消息透?jìng)髦罻atcher。
[0098]步驟S514:ffatcher向Presence服務(wù)器返回notify請(qǐng)求2000K成功響應(yīng)。
[0099]步驟S516:中間網(wǎng)元將2000K成功響應(yīng)透?jìng)髦罰resence服務(wù)器。
[0100]步驟S518:PresentityI狀態(tài)更新,向presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0101]步驟S520:Presence 服務(wù)器向 Presentityl 返 Publish2000K 成功響應(yīng)。
[0102]步驟S522:Presentity2狀態(tài)更新,向Presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0103]步驟S524:Presence 服務(wù)器向 Presentity2 返回 Publish2000K 成功響應(yīng)。
[0104]步驟S526:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為η),通知其訂閱Presentityl狀態(tài)更新(notify對(duì)應(yīng)的cseq值為η)。
[0105]步驟S528:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+1),通知其訂閱Presentity2狀態(tài)更新(notify對(duì)應(yīng)的cseq值為n+1)。
[0106]步驟S530:notify請(qǐng)求消息(cseq值為n+1)經(jīng)由網(wǎng)絡(luò)傳輸至中間網(wǎng)元。
[0107]步驟S532:中間網(wǎng)元將notify請(qǐng)求消息(cseq值為n+1)發(fā)送至Watcher。
[0108]步驟S534:Watcher接收notify請(qǐng)求消息(cseq值為n+1),返回2000K成功響應(yīng)。
[0109]步驟S536:中間網(wǎng)元將2000K成功響應(yīng)透?jìng)髦罰resence服務(wù)器。
[0110]步驟S538:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為η),通知其訂閱Presentityl狀態(tài)更新(notify對(duì)應(yīng)的cseq值為η),此處請(qǐng)求發(fā)送的順序?yàn)?Presence服務(wù)器先發(fā)送cseq值為η的notify請(qǐng)求消息,但由于網(wǎng)絡(luò)中傳輸問題,導(dǎo)致到Watcher時(shí),消息亂序,cseq值為n+1的notify請(qǐng)求消息先到,cseq值為η的notify請(qǐng)求消息后到。
[0111]步驟S540:中間網(wǎng)元接收notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為η),判斷該消息對(duì)應(yīng)的cseq值小于前一消息對(duì)應(yīng)的cseq值,向Presence服務(wù)器返回424錯(cuò)誤響應(yīng),提示服務(wù)器請(qǐng)求消息亂序.[0112]步驟S542:Presence服務(wù)器重新生成notify請(qǐng)求消息(重新生成cseq值為n+2),并發(fā)送至Watcher。
[0113]步驟S544:notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+2)經(jīng)由網(wǎng)絡(luò)傳至中間網(wǎng)
J Li ο
[0114]步驟S546:中間網(wǎng)元接收notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+2),判斷該消息對(duì)應(yīng)的cseq值小于前一消息對(duì)應(yīng)的cseq值,向Presence服務(wù)器返回424錯(cuò)誤響應(yīng),提示服務(wù)器請(qǐng)求消息亂序。[0115]步驟S548:Presence服務(wù)器重新生成notify請(qǐng)求消息(根據(jù)當(dāng)前cseq值重新生成cseq值為n+4),并發(fā)送至Watcher。
[0116]本實(shí)施例中,設(shè)定cseq值n+3已被占用。
[0117]步驟S550:中間網(wǎng)元將notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+4)透?jìng)髦罻atcher。
[0118]步驟S552:ffatcher接收notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+4),返回2000K成功響應(yīng)。
[0119]步驟S554:中間網(wǎng)元將notify2000K成功響應(yīng)透?jìng)髦罰resence服務(wù)器。
[0120]需要說明的是,實(shí)際應(yīng)用中,步驟S438?448有可能重復(fù)多次。
[0121]本實(shí)施例中,由中間網(wǎng)元對(duì)多次亂序notify請(qǐng)求消息進(jìn)行反饋和處理,該反饋和處理對(duì)客戶端Watcher透明,且多次處理亂序,減輕了客戶端Watcher的處理負(fù)擔(dān),保證了客戶端Watcher接收消息的準(zhǔn)確性。
[0122]實(shí)施例五
[0123]參照?qǐng)D6,示出了根據(jù)本發(fā)明實(shí)施例五的一種SIP消息處理方法的流程圖。
[0124]本實(shí)施例以客戶端Watcher的notify消息接收亂序處理為例,本實(shí)施例的SIP消息處理方法包括以下步驟:
[0125]步驟S602:ffatcher向Presence服務(wù)器發(fā)起訂閱請(qǐng)求Subscribe請(qǐng)求,訂閱Presentityl 與 Presentity2 狀態(tài)信息。
[0126]步驟S604:Presence服務(wù)器接收Watcher訂閱請(qǐng)求,返回2000K成功響應(yīng)。
[0127]步驟S606:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息。
[0128]步驟S608:ffatcher向Presence服務(wù)器返回notify請(qǐng)求2000K成功響應(yīng)。
[0129]步驟S610: Presentity I狀態(tài)更新,向Presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0130]步驟S612:Presence 服務(wù)器向 Presentityl 返回 Publish2000K 成功響應(yīng)。
[0131]步驟S614:Presentity2狀態(tài)更新,向Presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0132]步驟S616:Presence 服務(wù)器向 Presentity2 返回 Publish2000K 成功響應(yīng)。
[0133]步驟S618:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為η),通知其訂閱Presentityl狀態(tài)更新(notify對(duì)應(yīng)的cseq值為η)。
[0134]步驟S620:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+1),通知其訂閱Presentity2狀態(tài)更新(notify對(duì)應(yīng)的cseq值為n+1)。
[0135]步驟S622:notify請(qǐng)求消息(cseq值為n+1)經(jīng)由網(wǎng)絡(luò)傳輸?shù)竭_(dá)Watcher。
[0136]步驟S624:Watcher接收notify請(qǐng)求消息(cseq值為n+1),返回2000K成功響應(yīng)。
[0137]步驟S626:notify請(qǐng)求消息(cseq值為η)經(jīng)由網(wǎng)絡(luò)傳輸?shù)竭_(dá)Watcher,由于網(wǎng)絡(luò)中傳輸問題,導(dǎo)致到Watcher時(shí),消息亂序,cseq值為n+1的notify請(qǐng)求消息先到,cseq值為η的notify請(qǐng)求消息后到。
[0138]步驟S628:Watcher接收notify請(qǐng)求消息(cseq值為η),判斷該消息對(duì)應(yīng)的cseq值小于前一消息對(duì)應(yīng)的cseq值,向Presence服務(wù)器返回424錯(cuò)誤響應(yīng),提示Presence服務(wù)器請(qǐng)求消息亂序。
[0139]步驟S630:Presence服務(wù)器重新生成notify請(qǐng)求消息(重新生成cseq值為n+2),并發(fā)送至Watcher。[0140]步驟S632:Watcher接收notify請(qǐng)求消息(cseq值為n+2),返回2000K成功響應(yīng)。
[0141]本實(shí)施例中,客戶端Watcher直接對(duì)亂序notify請(qǐng)求消息進(jìn)行反饋和處理,保證了客戶端Watcher接收消息的準(zhǔn)確性。
[0142]實(shí)施例六
[0143]參照?qǐng)D7,示出了根據(jù)本發(fā)明實(shí)施例六的一種SIP消息處理方法的流程圖。
[0144]本實(shí)施例以客戶端Watcher的notify消息接收多次亂序處理為例,本實(shí)施例的SIP消息處理方法包括以下步驟:
[0145]步驟S702:ffatcher向Presence服務(wù)器發(fā)起訂閱請(qǐng)求Subscribe請(qǐng)求,訂閱Presentityl 與 Presentity2 狀態(tài)信息。
[0146]步驟S704:Presence服務(wù)器接收Watcher訂閱請(qǐng)求,返回2000K成功響應(yīng)。
[0147]步驟S706:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息。
[0148]步驟S708:ffatcher向Presence服務(wù)器返回notify請(qǐng)求2000K成功響應(yīng)。
[0149]步驟S710:PresentityI狀態(tài)更新,向Presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0150]步驟S712:Presence 服務(wù)器向 Presentityl 返回 Publish2000K 成功響應(yīng)。
[0151]步驟S714:Presentity2狀態(tài)更新,向Presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0152]步驟S716:Presence 服務(wù)器向 Presentity2 返回 Publish2000K 成功響應(yīng)。
[0153]步驟S718:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為η),通知其訂閱Presentityl狀態(tài)更新(notify對(duì)應(yīng)的cseq值為η)。
[0154]步驟S720:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+1),通知其訂閱Presentity2狀態(tài)更新(notify對(duì)應(yīng)的cseq值為n+1)。
[0155]步驟S722:notify請(qǐng)求消息(cseq值為n+1)經(jīng)由網(wǎng)絡(luò)傳輸?shù)竭_(dá)Watcher。
[0156]步驟S724:Watcher接收notify請(qǐng)求消息(cseq值為n+1),返回2000K成功響應(yīng)。
[0157]步驟S726:notify請(qǐng)求消息(cseq值為η)經(jīng)由網(wǎng)絡(luò)傳輸?shù)竭_(dá)Watcher,由于網(wǎng)絡(luò)中傳輸問題,導(dǎo)致到達(dá)Watcher時(shí),消息亂序,cseq值為n+1的notify請(qǐng)求消息先到,cseq值為η的notify請(qǐng)求消息后到。
[0158]步驟S728:Watcher接收notify請(qǐng)求消息(cseq值為η),判斷該消息對(duì)應(yīng)的cseq值小于前一消息對(duì)應(yīng)的cseq值,向Presence服務(wù)器返回424錯(cuò)誤響應(yīng),提示Presence服務(wù)器請(qǐng)求消息亂序。
[0159]步驟S730:Presence服務(wù)器重新生成notify請(qǐng)求消息(根據(jù)最新cseq重新生成cseq值為n+2),并發(fā)送至Watcher。
[0160]步驟S732:notify請(qǐng)求消息(cseq值為n+2)經(jīng)由網(wǎng)絡(luò)傳輸,發(fā)送至Watcher,由于網(wǎng)絡(luò)中傳輸問題,導(dǎo)致到達(dá)Watcher時(shí),消息亂序,cseq值為n+3的notify請(qǐng)求消息先到,cseq值為n+2的notify請(qǐng)求消息后到。
[0161]步驟S734:Watcher接收notify請(qǐng)求消息(cseq值為n+2),判斷該消息對(duì)應(yīng)的cseq值小于前一消息對(duì)應(yīng)的cseq值,向Presence服務(wù)器返回424錯(cuò)誤響應(yīng),提示Presence服務(wù)器請(qǐng)求消息亂序。
[0162]步驟S736:Presence服務(wù)器重新生成notify請(qǐng)求消息(根據(jù)最新cseq重新生成cseq值為n+4),并發(fā)送至Watcher。
[0163]步驟S738:Watcher接收notify請(qǐng)求消息(cseq值為n+4),返回2000K成功響應(yīng)。[0164]需要說明的是,實(shí)際應(yīng)用中,步驟S326?334有可能重復(fù)多次。
[0165]本實(shí)施例中,由客戶端Watcher對(duì)亂序notify請(qǐng)求消息進(jìn)行多次反饋和處理,有效保證了客戶端Watcher接收消息的準(zhǔn)確性。
[0166]實(shí)施例七
[0167]參照?qǐng)D8,示出了根據(jù)本發(fā)明實(shí)施例七的一種SIP消息處理方法的流程圖。
[0168]本實(shí)施例以應(yīng)用層指示不重傳亂序notify消息為例,對(duì)本發(fā)明的SIP消息處理進(jìn)行說明。
[0169]在發(fā)送notify消息時(shí),上層應(yīng)用(即應(yīng)用層)根據(jù)實(shí)際情況,可以指示當(dāng)前發(fā)送的notify消息是否需要重傳(當(dāng)出現(xiàn)亂序時(shí))。適用情形描述如下:Watcher訂閱了某一Presentity狀態(tài)變換,該P(yáng)resentity上線后,立刻下線。根據(jù)Presence業(yè)務(wù)流程,Presence服務(wù)器將發(fā)送兩個(gè)notify請(qǐng)求消息,通知Watcher該P(yáng)resentity狀態(tài)為上線、下線。此時(shí),如果出現(xiàn)本發(fā)明中描述的亂序問題(Watcher接收順序與Presence發(fā)送順序顛倒),將直接導(dǎo)致Watcher狀態(tài)顯示錯(cuò)誤。基于以上情形,提出由上層應(yīng)用在發(fā)送notify消息時(shí),指示底層協(xié)議棧,當(dāng)接收該notify消息424響應(yīng)時(shí),是否需要重新生成并發(fā)送notify消息。
[0170]本實(shí)施例的SIP消息處理方法包括以下步驟:
[0171]步驟S802:ffatcher向Presence月艮務(wù)器發(fā)起訂閱請(qǐng)求Subscribe請(qǐng)求,訂閱Presentityl 與 Presentity2 狀態(tài)信息。
[0172]步驟S804:Presence服務(wù)器接收Watcher訂閱請(qǐng)求,返回2000K成功響應(yīng)。
[0173]步驟S806:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息。
[0174]步驟S808:ffatcher向Presence服務(wù)器返回notify請(qǐng)求2000K成功響應(yīng)。
[0175]步驟S810: Presentity I狀態(tài)更新,向Presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0176]步驟S812:Presence 服務(wù)器向 Presentityl 返回 Publish2000K 成功響應(yīng)。
[0177]步驟S814:Presentity2狀態(tài)更新,向Presence服務(wù)器發(fā)送Publish請(qǐng)求消息。
[0178]步驟S816:Presence 服務(wù)器向 Presentity2 返回 Publish2000K 成功響應(yīng)。
[0179]步驟S818:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為η),通知其訂閱Presentityl狀態(tài)更新(notify對(duì)應(yīng)的cseq值為η)。
[0180]步驟S820:Presence服務(wù)器向Watcher發(fā)送notify請(qǐng)求消息(notify對(duì)應(yīng)的cseq值為n+1),通知其訂閱Presentity2狀態(tài)更新(notify對(duì)應(yīng)的cseq值為n+1)。
[0181]步驟S822:notify請(qǐng)求消息(cseq值為n+1)經(jīng)由網(wǎng)絡(luò)傳輸?shù)竭_(dá)Watcher。
[0182]步驟S824:Watcher接收notify請(qǐng)求消息(cseq值為n+1),返回2000K成功響應(yīng)。
[0183]步驟S826:notify請(qǐng)求消息(cseq值為η)經(jīng)由網(wǎng)絡(luò)傳輸?shù)竭_(dá)Watcher,由于網(wǎng)絡(luò)中傳輸問題,導(dǎo)致到達(dá)Watcher時(shí),消息亂序,cseq值為n+1的notify請(qǐng)求消息先到,cseq值為η的notify請(qǐng)求消息后到。
[0184]步驟S828:Watcher接收notify請(qǐng)求消息(cseq值為η),判斷該消息對(duì)應(yīng)的cseq值小于前一消息對(duì)應(yīng)的cseq值,向Presence服務(wù)器返回424錯(cuò)誤響應(yīng),提示Presence服務(wù)器請(qǐng)求消息亂序。
[0185]步驟S830-Presence服務(wù)器接收424錯(cuò)誤響應(yīng)后,根據(jù)上層應(yīng)用指示,該消息不進(jìn)行重傳操作,協(xié)議棧將該消息直接丟棄。
[0186]本實(shí)施例中,由上層應(yīng)用決定不進(jìn)行亂序消息的重傳,提高了本發(fā)明方案對(duì)不同情形的適用性,提高了系統(tǒng)效率。
[0187]需要說明的是,上述多個(gè)實(shí)施例均以Presence服務(wù)器對(duì)單個(gè)設(shè)備如客戶端或中間網(wǎng)元反饋SIP錯(cuò)誤響應(yīng)消息進(jìn)行處理為例,但本領(lǐng)域技術(shù)人員應(yīng)當(dāng)明了,在實(shí)際應(yīng)用中,有可能多個(gè)設(shè)備,如多個(gè)客戶端、或多個(gè)中間網(wǎng)元、或客戶端與中間網(wǎng)元,均向Presence服務(wù)器反饋SIP錯(cuò)誤響應(yīng)消息,則此種情況下,Presence服務(wù)器對(duì)不同SIP錯(cuò)誤響應(yīng)消息的處理均可參照上述多個(gè)實(shí)施例相應(yīng)執(zhí)行,在此不一一詳述。
[0188]上述多個(gè)實(shí)施例中,當(dāng)客戶端或中間網(wǎng)元接收到服務(wù)端發(fā)送的亂序消息后(當(dāng)前接收消息的cseq值比之前接收消息的cseq值小),在丟棄該消息的同時(shí),向發(fā)送方回復(fù)424錯(cuò)誤響應(yīng)碼,服務(wù)端協(xié)議棧接收到該響應(yīng)碼后,可以根據(jù)上層業(yè)務(wù)應(yīng)用需求,選擇是否重新發(fā)送該亂序消息(新消息的cseq值將重新生成)。通過該方式,可以保證當(dāng)消息在網(wǎng)絡(luò)中傳輸亂序后,客戶端依然能夠正常接收該消息攜帶內(nèi)容。
[0189]實(shí)施例八
[0190]參照?qǐng)D9,示出了根據(jù)本發(fā)明實(shí)施例八的一種SIP消息處理裝置的結(jié)構(gòu)框圖。
[0191]本實(shí)施例的SIP消息處理裝置中的SIP消息基于UDP進(jìn)行網(wǎng)絡(luò)傳輸,所述SIP消息處理裝置包括:第一接收模塊902,用于接收客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消息,其中,SIP錯(cuò)誤響應(yīng)消息中攜帶有發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào);確定模塊904,用于確定客戶端和/或中間網(wǎng)元接收SIP通知請(qǐng)求消息產(chǎn)生亂序;重傳模塊906,用于更新SIP通知請(qǐng)求消息序號(hào),重新生成SIP通知請(qǐng)求消息,并向客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的SIP通知請(qǐng)求消息;其中,SIP通知請(qǐng)求消息中攜帶有客戶端訂閱的Presence實(shí)體狀態(tài)更新信息。
[0192]優(yōu)選地,第一接收模塊902接收到的所述SIP錯(cuò)誤響應(yīng)消息為指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求的類型的SIP錯(cuò)誤響應(yīng)消息。例如,為響應(yīng)碼為424的錯(cuò)誤響應(yīng)消息。
[0193]優(yōu)選地,SIP錯(cuò)誤響應(yīng)消息中攜帶的發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào)為SIP通知請(qǐng)求消息的Cseq值;確定模塊904,用于根據(jù)SIP錯(cuò)誤響應(yīng)消息中攜帶的SIP通知請(qǐng)求消息的Cseq值,確定客戶端和/或中間網(wǎng)元接收的SIP通知請(qǐng)求消息的Cseq值小于客戶端和/或中間網(wǎng)元在接收SIP通知請(qǐng)求消息前接收的、其它SIP通知請(qǐng)求消息的Cseq值。
[0194]優(yōu)選地,重傳模塊906在更新SIP通知請(qǐng)求消息序號(hào),重新生成SIP通知請(qǐng)求消息時(shí):按照Cseq值生成規(guī)則生成新的Cseq值,并用新的Cseq值替換保存的SIP通知請(qǐng)求消息中的Cseq值,重新生成SIP通知請(qǐng)求消息。
[0195]優(yōu)選地,本實(shí)施例的SIP消息處理裝置還包括:判斷模塊908,用于在重傳模塊906更新SIP通知請(qǐng)求消息序號(hào),重新生成SIP通知請(qǐng)求消息,并向客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的SIP通知請(qǐng)求消息之前,根據(jù)應(yīng)用層在發(fā)送與SIP錯(cuò)誤響應(yīng)消息對(duì)應(yīng)的SIP通知請(qǐng)求消息時(shí)的指示,確定是否向客戶端和/或中間網(wǎng)元重新發(fā)送SIP通知請(qǐng)求消息;若確定重新發(fā)送,則執(zhí)行重傳模塊906 ;若確定不重新發(fā)送,則丟棄所述SIP通知請(qǐng)求消息。
[0196]優(yōu)選地,本實(shí)施例的SIP消息處理裝置設(shè)置于Presence服務(wù)器中。
[0197]本實(shí)施例的SIP消息處理裝置用于實(shí)現(xiàn)前述多個(gè)方法實(shí)施例中相應(yīng)的SIP消息處理方法,并具有相應(yīng)的方法實(shí)施例的有益效果,在此不再贅述。
[0198]本發(fā)明基于SIP協(xié)議,提供了一種通過定義新的SIP響應(yīng)碼,結(jié)合新的消息重傳機(jī)制,解決因UDP網(wǎng)絡(luò)傳輸問題而導(dǎo)致SIP notify消息亂序,造成客戶端消息接收失敗的方案。在本發(fā)明的方案中,提供了(I)因網(wǎng)絡(luò)傳輸而導(dǎo)致消息亂序錯(cuò)誤對(duì)應(yīng)的響應(yīng)碼424 ;
(2)用來解決因網(wǎng)絡(luò)傳輸導(dǎo)致消息亂序而造成客戶端接收消息失敗的解決方法;(3)為解決因網(wǎng)絡(luò)傳輸導(dǎo)致消息亂序而造成客戶端接收消息失敗的消息重傳機(jī)制;(4)由上層應(yīng)用指示底層協(xié)議棧當(dāng)前發(fā)送的notify消息是否需要支持接收424響應(yīng)碼后,重新生成并發(fā)送notify消息的機(jī)制。通過本發(fā)明,有效解決了當(dāng)采用UDP網(wǎng)絡(luò)傳輸時(shí),導(dǎo)致SIP notify消息傳輸亂序,最終導(dǎo)致客戶端接收消息失敗的問題。
[0199]需要說明的是,本發(fā)明提供的解決因網(wǎng)絡(luò)傳輸導(dǎo)致消息亂序而造成客戶端接收消息失敗的機(jī)制,同樣適用于會(huì)話過程中的INFO消息。
[0200]本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對(duì)于裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
[0201]以上對(duì)本發(fā)明所提供的一種SIP消息處理方法和裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
【權(quán)利要求】
1.一種會(huì)話初始協(xié)議SIP消息處理方法,其特征在于,所述SIP消息基于用戶數(shù)據(jù)報(bào)協(xié)議UDP進(jìn)行網(wǎng)絡(luò)傳輸,所述方法包括: 狀態(tài)呈現(xiàn)Presence服務(wù)器接收到客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消息,其中,所述SIP錯(cuò)誤響應(yīng)消息中攜帶有發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào); 確定所述客戶端和/或中間網(wǎng)元接收所述SIP通知請(qǐng)求消息產(chǎn)生亂序; 更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息; 其中,所述SIP通知請(qǐng)求消息中攜帶有所述客戶端訂閱的Presence實(shí)體狀態(tài)更新信息。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述Presence服務(wù)器接收到的所述SIP錯(cuò)誤響應(yīng)消息為指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求的類型的SIP錯(cuò)誤響應(yīng)消息。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述SIP錯(cuò)誤響應(yīng)消息中攜帶的發(fā)生錯(cuò)誤的所述SIP通知請(qǐng)求消息的序號(hào)為所述SIP通知請(qǐng)求消息的Cseq值; 所述確定所述客戶端和/或中間網(wǎng)元接收所述SIP通知請(qǐng)求消息產(chǎn)生亂序的步驟包括: 所述Presence服務(wù)器根據(jù)所述SIP錯(cuò)誤響應(yīng)消息中攜帶的所述SIP通知請(qǐng)求消息的Cseq值,確定所述客戶端和/或中間網(wǎng)元接收的所述SIP通知請(qǐng)求消息的Cseq值小于所述客戶端和/或中間網(wǎng)元在接收所述SIP通知請(qǐng)求消息前接收的、其它SIP通知請(qǐng)求消息的Cseq 值。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息的步驟包括: 所述Presence服務(wù)器按照Cseq值生成規(guī)則生成新的Cseq值,并用所述新的Cseq值替換保存的所述SIP通知請(qǐng)求消息中的Cseq值,重新生成所述SIP通知請(qǐng)求消息。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息的步驟之前,還包括: 所述Presence服務(wù)器根據(jù)應(yīng)用層在發(fā)送與所述SIP錯(cuò)誤響應(yīng)消息對(duì)應(yīng)的SIP通知請(qǐng)求消息時(shí)的指示,確定是否向所述客戶端和/或中間網(wǎng)元重新發(fā)送所述SIP通知請(qǐng)求消息; 若確定重新發(fā)送,則執(zhí)行所述更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息的步驟; 若確定不重新發(fā)送,則丟棄所述SIP通知請(qǐng)求消息。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述Presence服務(wù)器接收到客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消息的步驟之前,還包括: 所述客戶端和/或中間網(wǎng)元接收到所述Presence服務(wù)器發(fā)送的所述SIP通知請(qǐng)求消息; 所述客戶端和/或中間網(wǎng)元判斷所述SIP通知請(qǐng)求消息的序號(hào)小于之前接受的其它SIP通知請(qǐng)求消息的序號(hào),向所述Presence服務(wù)器發(fā)送所述SIP錯(cuò)誤響應(yīng)消息,其中,所述SIP錯(cuò)誤響應(yīng)消息為指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求的類型的SIP錯(cuò)誤響應(yīng)消息。
7.一種會(huì)話初始協(xié)議SIP消息處理裝置,其特征在于,所述SIP消息基于用戶數(shù)據(jù)報(bào)協(xié)議UDP進(jìn)行網(wǎng)絡(luò)傳輸,所述裝置包括: 第一接收模塊,用于接收客戶端和/或中間網(wǎng)元返回的SIP錯(cuò)誤響應(yīng)消息,其中,所述SIP錯(cuò)誤響應(yīng)消息中攜帶有發(fā)生錯(cuò)誤的SIP通知請(qǐng)求消息的序號(hào); 確定模塊,用于確定所述客戶端和/或中間網(wǎng)元接收所述SIP通知請(qǐng)求消息產(chǎn)生亂序; 重傳模塊,用于更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息; 其中,所述SIP通知請(qǐng)求消息中攜帶有所述客戶端訂閱的Presence實(shí)體狀態(tài)更新信肩、O
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述第一接收模塊接收到的所述SIP錯(cuò)誤響應(yīng)消息為指示客戶端錯(cuò)誤、或請(qǐng)求包含無效語法、或服務(wù)器不能接受該請(qǐng)求的類型的SIP錯(cuò)誤響應(yīng)消息。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述重傳模塊在更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息時(shí): 按照Cseq值生成規(guī)則生成新的Cseq值,并用所述新的Cseq值替換保存的所述SIP通知請(qǐng)求消息中的Cseq值,重新生成所述SIP通知請(qǐng)求消息。
10.根據(jù)權(quán)利要求7所述的裝置,其特征在于,還包括: 判斷模塊,用于在所述重傳模塊更新所述SIP通知請(qǐng)求消息序號(hào),重新生成所述SIP通知請(qǐng)求消息,并向所述客戶端和/或中間網(wǎng)元重新發(fā)送重新生成的所述SIP通知請(qǐng)求消息之前,根據(jù)應(yīng)用層在發(fā)送與所述SIP錯(cuò)誤響應(yīng)消息對(duì)應(yīng)的SIP通知請(qǐng)求消息時(shí)的指示,確定是否向所述客戶端和/或中間網(wǎng)元重新發(fā)送所述SIP通知請(qǐng)求消息;若確定重新發(fā)送,則執(zhí)行所述重傳模塊;若確定不重新發(fā)送,則丟棄所述SIP通知請(qǐng)求消息。
【文檔編號(hào)】H04L29/06GK103516723SQ201310432824
【公開日】2014年1月15日 申請(qǐng)日期:2013年9月22日 優(yōu)先權(quán)日:2013年9月22日
【發(fā)明者】陳棟 申請(qǐng)人:大唐移動(dòng)通信設(shè)備有限公司