我有一个由我的移动网络提供商制作的Windows桌面应用程序,它可以完成SIP的各种操作:调用,发送消息等。此应用程序如何成功发送屏幕截图MESSAGE
(最后4行): 如何通过SIP发送即时消息
MESSAGE
请求,从桌面应用程序,被作为从后面(第四行):
MESSAGE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP LOCALIP:2112;branch=z9hG4bK-d8754z-905183245f478c76-1---d8754z-;rport
Max-Forwards: 70
To: "TO"<sip:[email protected]>
From: "FROM"<sip:[email protected]>;tag=63088d09
Call-ID: NGVhMDJhYzQwNmExOTQyNThmNjc5OGNmOTViNDUyYWM.
CSeq: 2 MESSAGE
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Content-Type: text/plain
Content-Length: 4
test
和该全成响应为:
SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP LOCALIP:2112;received=EXTERNALIP;branch=z9hG4bK-d8754z-905183245f478c76-1---d8754z-;rport=2112
To: "TO"<sip:[email protected]>;tag=c005f0e30133ec730add76fc91f4bea
From: "FROM"<sip:[email protected]>;tag=63088d09
Call-ID: NGVhMDJhYzQwNmExOTQyNThmNjc5OGNmOTViNDUyYWM.
CSeq: 2 MESSAGE
Content-Length: 0
Proxy-Authenticate: Digest nonce="3F178051B97E1F5200A3C53D4B",realm="DOMAIN",algorithm=MD5,qop="auth"
然后我尝试从PHP发送相同的(和正的变化)的要求,但我总是收到SIP/2.0 403 Forbidden
代替SIP/2.0 407 Proxy Authentication Required
:
SIP/2.0 403 Forbidden
Via: SIP/2.0/UDP LOCALIP;received=EXTERNALIP
To: "TO"<sip:[email protected]>;tag=aprqngfrt-f7ccjj0000020
From: "FROM"<sip:[email protected]>;tag=8f7be81d
Call-ID: [email protected]
CSeq: 1 MESSAGE
Reason: Q.850;cause=55;text="Call Terminated"
Content-Length: 0
有趣的是,如果我发送REGISTER
要求它的工作原理,并成功收到SIP/2.0 401 Unauthorized
标头WWW-Authenticate
。我重新计算授权,并重新发送。然后我收到SIP/2.0 200 OK
。这应该如何与MESSAGE
配合使用。
什么可能是错的?我错过了什么?请问MESSAGE
之前需要其他一些要求(我以前已经试过REGISTER
)?
我已经读了RFC 3428上下,尝试了所有可能的例子,但没有成功。
我不是'SIP'专家,看起来你知道你在做什么。我只能说,如果你确信自己做的和其他软件完全相同(没有任何锁定),我会说为你做的事情可能会有所不同。也许控制字符不匹配可能是一个好的开始,比如'\ n' vs'\ n \ r'。 – Mehran
@Mehran:我不认为不同类型的“新行”会有所作为,因为'REGISTER'方法正在工作。例如,如果我从请求中删除'CSeq'头,SIP服务器将返回'SIP/2.0 400 Missing CSeq Header' ...这告诉我,通信是可以的。我认为'MESSAGE'方法发送正确,它必须是别的;( –