< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index Next in Thread >

Re: [reSIProcate] Forked INVITEs


Chris -

The call flow you're seeing (through the INVITEs and CANCELs anyhow) is correct.

When a proxy forks it is only going to forward one final response (when that response is non-2xx) to an INVITE. It's possible to get more than one 2xx, but that's an edge case that is made as unlikely as possible by the rules in section 16 of 3261. You will never
see both a 2xx final response and some other non-2xx final response.

Now, for the BYE question. The protocol is doing the right thing given that a BYE was sent, but sending the BYE was (probably) silly. Are you using DUM or the stack directly
for this flow? Were the 180s using the 100rel extension?

RjS

On Jan 16, 2006, at 11:49 AM, Christian_Gavin@xxxxxxxxxxxx wrote:

Hi,

I am testing the following scenario with resip 0.9 on WinXP. Server is SER
0.9 on Solaris.

One client is registered as sip:chris@xxxxxxxxxx (server.com is a
placeholder for the SIP server I am using). Let's call this client A.

Two other clients are registered as sip:chris2@xxxxxxxxxx (let's call these client B and client C). Client A calls B and C and then cancels the INVITE:

- chris INVITEs chris2

- both clients registered under chris2 (client B and C) ring, send 180
Ringing to server which is turn sends both 180 Ringing to chris

- chris cancels the INVITE

- chris receives a 200 Canceling from the server

      - clients B and C receive a Cancel

- B and C send a 200 OK in response to the Cancel and a 487 Request
Terminated to the server

      - the server sends ACKs to B and C

- chris receives a 487 Request Terminated from the server (with same To: and From: tags as specified in the first 180 Ringing coming from client B)

- chris ACKs the 487 Request Terminated

At this time, B and C are done with canceling. However, chris (client A) has only received one 487 Request Terminated from the server, corresponding
to the call leg A <-> B. Client A thinks the extra call leg created by
forking (A <-> C) still exists, and 20 seconds later, reSIProcate on client A sends a BYE to client C to terminated this call leg. Client C replies
with a 481 Call / Transaction Does Not Exist.

Shouldn't reSIProcate automatically close all call legs once the initial INVITE has been canceled? Or should the server send an extra 487 to chris
to indicate that this second call leg was terminated?

Thanks,
Christian
_______________________________________________
resiprocate-devel mailing list
resiprocate-devel@xxxxxxxxxxxxxxxxxxx
https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel