1

我正在编写一个 SIP 客户端,但在使用SUBSCRIBE现有客户端(不同的免费软件)时遇到了一些奇怪的问题

我正在使用自己的服务器,但这不是问题,因为如果我SUBSCRIBE从不同的客户端 (pjsip) 执行,一切正常。

我正在发送这条SUBSCRIBE消息:

SUBSCRIBE sip:3009@10.0.0.4 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:3009@10.0.0.5;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消息,说明其他客户端自从他注册到服务器后所做的每一次状态更改。

不同的客户不会发生此问题..

如果重要的话,我正在Visual Studio 2008Windows 7 64bit 上开发

有任何想法吗?

谢谢!

4

1 回答 1

3

从评论来看,问题似乎是您没有向客户端发送有效响应,因此它正在发送每个 NOTIFY 请求的多次重传。

要生成有效响应,关键方面是您必须将 Via 分支参数和 CSeq 设置为与请求相同的值,请参阅RFC 3261,第 17.1.3 节

于 2013-01-07T10:19:15.917 回答