2013-01-06 48 views
1

我正在寫一個SIP客戶端,我使用SUBSCRIBE時,現有的客戶端(不同,免費軟件)SIP訂閱接收多個NOTIFY

我用我自己的服務器上有一些奇怪的問題,但這不是問題,因爲如果我從另一個客戶端(pjsip)執行SUBSCRIBE,它一切正常。

我發送出此SUBSCRIBE消息:

SUBSCRIBE sip:[email protected] SIP/2.0 
Via: SIP/2.0/UDP 10.0.0.7:5060;rport;branch=z9hG4bKPj3893ccd**************** 
Max-Forwards: 70 
From: <sip:10.0.0.7>;tag=023a965a14a143eb8******* 
To: sip:[email protected];tag=8cfb7********* 
Contact: <sip:10.0.0.7:5060;ob> 
Call-ID: bf5d48fe8ca0*************** 
CSeq: 14388 SUBSCRIBE 
Route: <sip:10.0.0.5;lr;ftag=023a965a14a143eb8*********> 
Event: presence 
Expires: 600 
Supported: replaces, 100rel, timer, norefersub 
Accept: application/pidf+xml, application/xpidf+xml 
Allow-Events: presence, message-summary, refer 
Content-Length: 0 

該消息後,當接收到OK,但然後我收到每存在變化的NOTIFY消息,該其他客戶端沒有因爲HE註冊到服務器。

問題不不同客戶發生..

如果它的事項,我在Visual Studio 2008在64位Windows 7

任何想法發展?

謝謝!

+0

聽起來像客戶端行爲正常。如果您訂閱在線通知,則意味着您希望在不僅第一次更改存在時收到通知。 – sipwiz

+0

事情是,在訂閱之後,我收到了之前的所有通知。當使用PJsip時。訂閱時,我只會收到最新的。而且它不是過濾它的客戶端,因爲我通過wireshark查找 –

+0

您是否退訂客戶端?如果您在活動訂閱中重新啓動服務器,則客戶端無法知道,並且可以合理預計將通知排隊,直到它可以讓它們通過。如果您想停止訂閱的NOTIFY請求,請嘗試發送對話SUBSCRIBE請求,並將Expires標頭設置爲0。 – sipwiz

回答

3

從註釋看來,問題似乎是您沒有向客戶端發送有效的響應,因此它發送的是每個NOTIFY請求的多次重新發送。

要生成有效響應,關鍵方面是您必須將Via分支參數和CSeq設置爲與請求相同的值,請參閱RFC 3261, section 17.1.3