2015-10-13 33 views
0

我試圖模擬在取消場景中487到達200之前如何處理。但我得到「在發送(索引5)時收到呼叫標識的異常消息中止,收到'ACK sip:[email protected]:5060 SIP/2.0」錯誤。 這是我的服務器。 SIPp:在200之前取消場景487

<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:[email protected][local_ip]:[local_port]; tag=[call_number] 
    Call-ID: [call_id] 
    CSeq: [cseq] INVITE 
    Contact: sip:[email protected][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:[email protected][local_ip]:[local_port];tag=[call_number] 
    Call-ID: [call_id] 
    [last_CSeq:] 
    Contact: sip:[email protected][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:[email protected][local_ip]:[local_port];tag=[call_number] 
    Call-ID: [call_id] 
    CSeq: [cseq] ACK 
    Contact: sip:[email protected][local_ip]:[local_port] 
    Max-Forwards: 70 
    Content-Length: [len] 
]]> 
</send> 
<pause milliseconds="3000"/> 

</scenario> 
+0

您正在使用'[SIPp](http://sipp.sourceforge.net/)? – Wolf

+0

是的,我正在使用SIPp。 – mechulkalan

回答

1

在我看來像你必須與你正在使用的方式有問題[last_Via:]。

來自UAC的CANCEL請求在它的Via頭中應該有一個新的分支參數,因爲它是一個新的事務。

此外,對UAS生成的INVITE請求的OK響應將使用CANCEL請求中的Via頭。

由於Via標頭對於SIP事務匹配非常重要,因此sipp在抱怨無法正確匹配事件時是可以理解的。