SIP Call Graph Diagram when Bug comes:
A = UAC
B = OpenSIPS
C = UAS
A ---------- INVITE ---------> B
A <-------- STATUS 100 TRYING ------- B
B ---------- INVITE ---------> C
B <-------- STATUS 100 TRYING --------- C
B <-------- STATUS 200 OK --------------- C
A <-------- STATUS 200 OK ------------- B
A ---------- CANCEL ------------------> B
A <-------- 200 CANCELING ----------- B
A ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B ---------- ACK ---------------> B
B <-------- STATUS 200 OK --------- C
A <-------- STATUS 200 OK --------- B
B <-------- STATUS 200 OK --------- C
A <-------- STATUS 200 OK --------- B
B <-------- STATUS 200 OK --------- C
A <-------- STATUS 200 OK --------- B
B <-------- STATUS 200 OK --------- C
B <-------- STATUS 200 OK --------- C
B <-------- STATUS 200 OK --------- C
B <-------- STATUS 200 OK --------- C
In my case problem is actually that the UAS never gets to know about the INVITE cancelled by the OpenSIP and it keeps on Pinging, but in the case where only 1XX (i.e provisional replies comes from UAS to OpenSIP it sends Cancel to UAS also). Is this the desired behaviour???????
From my point OpenSIP either should not send OK to UAC also when it is not sending CANCEL to UAS.
Steps to recreate issue :- I have used sipp to emulate the issue. The client xml for the sipp is as :-
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<scenario name="Basic Sipstone UAC">
<send retrans="500">
;tag=[pid]SIPpTag00[call_number] To: [service] Call-ID: [call_id] CSeq: 1 INVITE Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Type: application/sdp Content-Length: [len] v=0 o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] s=- c=IN IP[media_ip_type] [media_ip] t=0 0 m=audio [media_port] RTP/AVP 0 a=rtpmap:0 PCMU/8000 ]]>
</send>
<recv response="100"
optional="true">
</recv>
<recv response="180" optional="true">
</recv>
<recv response="183" optional="true">
</recv>
<recv response="200" rtd="true">
</recv>
<send retrans="500">
Call-ID: [call_id] CSeq: [cseq] CANCEL Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 10 Content-Length: 0 ]]>
</send>
<pause/>
<send retrans="1">
;tag=[pid]SIPpTag00[call_number] To: [service] [peer_tag_param] Call-ID: [call_id] CSeq: 2 BYE Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Length: 0 ]]>
</send>
<recv response="200" crlf="true">
</recv>
<ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
<CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
</scenario>