我正在尝试模拟在取消场景中,当487在200之前时如何处理。但我得到“中止呼叫上的意外消息呼叫Id同时发送(索引5),收到'ACK sip:service@192.168.1.20:5060 SIP/2.0”错误。这是我的服务器。
<scenario name="Basic UAS responder">
<recv request="INVITE" crlf="true">
</recv>
<send>
<![CDATA[
SIP/2.0 100 Trying
[last_Via:]
[last_From:]
[last_To:]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Length: [len]
]]>
</send>
<send>
<![CDATA[
SIP/2.0 180 Ringing
[last_Via:]
[last_From:]
[last_To:];tag=[call_number]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Length: [len]
]]>
</send>
<recv request="CANCEL">
</recv>
<send>
<![CDATA[
SIP/2.0 487 Request Terminated
[last_Via:]
[last_From:]
[last_To:]
[last_Call-ID:]
CSeq: [cseq] INVITE
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Length: [len]
]]>
</send>
<send>
<![CDATA[
SIP/2.0 200 OK
[last_Via:]
[last_From:]
[last_To:]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[local_ip]:[local_port];transport=[transport]>
Content-Length: [len]
]]>
</send>
<!--pause milliseconds="4000"/-->
<recv request="ACK"
crlf="true">
</recv>
</scenario>这是我的客户
<scenario name="UAC Cancel">
<send retrans="500">
<![CDATA[
INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
To: <sip:[service]@[remote_ip]:[remote_port]>
From: <sip:sipp@[local_ip]:[local_port]; tag=[call_number]
Call-ID: [call_id]
CSeq: [cseq] INVITE
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Content-Length: [len]
]]>
</send>
<recv response="100" optional="true">
</recv>
<recv response="180">
</recv>
<pause milliseconds="4000"/>
<send>
<![CDATA[
CANCEL sip:[service]@[remote_ip]:[remote_port] SIP/2.0
[last_Via:]
To: sip:[service]@[local_ip]:[local_port]>[peer_tag_param]
From: sip:sipp@[local_ip]:[local_port];tag=[call_number]
Call-ID: [call_id]
[last_CSeq:]
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Content-length: [len]
]]>
</send>
<recv response="200" optional="true">
</recv>
<recv response="487" next="cancelACK">
</recv>
<label id="cancelACK"/>
<send>
<![CDATA[
ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
[last_Via:]
To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
From: <sip:sipp@[local_ip]:[local_port];tag=[call_number]
Call-ID: [call_id]
CSeq: [cseq] ACK
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Content-Length: [len]
]]>
</send>
<pause milliseconds="3000"/>
</scenario>发布于 2015-10-14 19:48:57
在我看来,您使用last_Via:的方式会有问题。
来自UAC的CANCEL请求应该在其Via头中有一个新的分支参数,因为它是一个新的事务。
此外,对UAS生成的INVITE请求的OK响应将使用来自CANCEL请求的Via报头。
由于Via标头对于SIP事务匹配至关重要,因此sipp在不能正确匹配事物时发出抱怨是可以理解的。
https://stackoverflow.com/questions/33103169
复制相似问题