SIP CANCEL请求永远不会获得200个取消响应

时间:2017-04-10 11:49:26

标签: javascript node.js twilio sip

我正在使用Node.js和Kirm / Sip模块向Twilio SIP Trunk发送SIP请求,我正在尝试在收到“180 Ringing”响应后取消呼叫。

问题是发送了[CANCEL] SIP请求,但是服务器从不回复状态“200正在取​​消”,而是回复TCP [ACK]并且呼叫仍然响铃..

取消请求是来自邀请请求的副本,但更改了方法和CSec方法。

邀请请求:

INVITE sip:123456789@sample.pstn.ie1.twilio.com SIP/2.0
From:  <sip:test@sample.pstn.ie1.twilio.com>;tag=168502
To:  <sip:123456789@sample.pstn.ie1.twilio.com>
Call-ID: 284466
CSeq: 969240 INVITE
Content-Type: application/sdp
Contact:  <sip:test@192.168.61.4>
Via: SIP/2.0/TCP 192.168.61.4:61244;branch=z9hG4bK847573
Content-Length: 363
Proxy-Authorization: Digest realm="sip.twilio.com",username="test",nonce="XXXX",uri="sip:123456789@sample.pstn.ie1.twilio.com",nc=00000001,cnonce="XXXXXXX",qop=auth,opaque="XXXXXXX",response="XXXXXXX"

v=0
o=- 3700480907 3700480907 IN IP4 192.168.61.4
s=pjmedia
b=AS:84
t=0 0
a=X-nat:0
m=audio 4012 RTP/AVP 123 8 0 101
c=IN IP4 192.168.61.4
b=TIAS:64000
a=rtcp:4013 IN IP4 192.168.61.4
a=sendrecv
a=rtpmap:123 opus/48000/2
a=fmtp:123 maxplaybackrate=16000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16

取消请求:

CANCEL sip:123456789@sample.pstn.ie1.twilio.com SIP/2.0
CSeq: 969240 CANCEL
Call-ID: 284466
From:  <sip:test@sample.pstn.ie1.twilio.com>;tag=168502
To:  <sip:123456789@sample.pstn.ie1.twilio.com>
Via: SIP/2.0/TCP 192.168.61.4:61244;branch=z9hG4bK847573
Content-Length: 0

所有想法?

由于

2 个答案:

答案 0 :(得分:2)

应该设置接收180 Ringing To-tag。 在180 Ringing To标题中查找它。 类似于&#34; To :; tag = 9273782374&#34;是预期的。

您需要将CANCEL请求与INVITE事务匹配,以便在CANCEL请求中设置To标记。

CANCEL sip:123456789@sample.pstn.ie1.twilio.com SIP/2.0
CSeq: 969240 CANCEL
Call-ID: 284466
From:  <sip:test@sample.pstn.ie1.twilio.com>;tag=168502
To:  <sip:123456789@sample.pstn.ie1.twilio.com>;tag=missingToTag
Via: SIP/2.0/TCP 192.168.61.4:61244;branch=z9hG4bK847573
Content-Length: 0

答案 1 :(得分:0)

我为此苦了一段时间,当我看到这篇文章时就解决了。

您必须确保“收件人:”字段中的标签是在邀请请求的ACK后 返回的标签。

流程如下:

Screenshot from Wireshark showing the SIP requests