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

[reSIProcate] Forked INVITEs


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