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

Re: [reSIProcate] problems with race condition between CANCEL and anegative response


Hi Hagai,

In RFC3261 [Page 52]
9 Canceling a Request
   ...
   The CANCEL request, as the name implies, is used to cancel a previous
   request sent by a client.  Specifically, it asks the UAS to cease
   processing the request and to generate an error response to that
   request.  CANCEL has no effect on a request to which a UAS has
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   already given a final response.  
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

9.1 Client Behavior
   ...
   If no provisional response has been received, the CANCEL request MUST
   NOT be sent; rather, the client MUST wait for the arrival of a
   provisional response before sending the request.  If the original
                                                     ^^^^^^^^^^^^^^^^
   request has generated a final response, the CANCEL SHOULD NOT be
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   sent, as it is an effective no-op, since CANCEL has no effect on
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   requests that have already generated a final response.
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

As you can see, the server will just ignore the CANCEL request after 
generating a class 6xx(603 in this case) final response.

Instead of sending a CANCEL, the UAC should send an ACK to terminate the 
transaction on receiving a 6xx response.

Regards,
Jinke Jiang

________________________________________
From: resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx 
[mailto:resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Hagai Sela 
(TA)
Sent: Monday, October 23, 2006 10:30 PM
To: resiprocate-devel@xxxxxxxxxxxxxxxxxxx
Subject: [reSIProcate] problems with race condition between CANCEL and 
anegative response

Hi,
I make a call from my resiprocate based client to a certain proxy. I have a 
problem if the client receives a negative response and tries to send CANCEL at 
approx. the same time (see attached capture file). The problem is that I 
receive the onTerminated() callback about 30 seconds after the call is 
terminated instead of receiving it immediatly. Does anybody know why this 
happens?
 
Hagai.