Subject: RE: [Sip] 482 handling by proxies

From: Jonathan Rosenberg <[email-masked]>
Date: Tue, 20 Nov 2001 04:06:35 -0500

Old thread - please see inline.

> -----Original Message-----
> From: Fairlie-Cuninghame, Robert [mailto:[email-masked]]
> Sent: Wednesday, October 31, 2001 5:47 AM
> To: 'Christer Holmberg'; Gonzalo Camarillo
> Cc: Bob Penfield; [email-masked]
> Subject: RE: [Sip] 482 handling by proxies
> 
> 
> 
> > >>Yes. I was just worried about cases where it actually may take a
> > >>relatively long time before the 200 final response is sent, 
> > due to other
> > >>call setup actions (PRACK, INFO etc), because I guess the 
> > proxy won't
> > >>wait "forever" for the final response until it takes some 
> > actions (of
> > >>course, in a real-life situation the call setup probably 
> > won't be that
> > >>long) for the pending legs.
> > >>
> > > 
> > >The proxy has ACKed already the 482 response. The only thing 
> > it does is
> > >to store it in a buffer as one of the non-2xx final 
> > responses received
> > >so far. This way it will be able to choose the "best" one to 
> > send back.
> > > 
> > >I do not know why you are raising this now, because this has been
> > >standard SIP behavior since the beginning.
> > 
> > I just wanted to clarify the specific case where it takes a 
> long time
> > before the final response is received for a specific leg, 
> because the
> > use of call pre-setup transactions etc has NOT been standard SIP
> > behavious since the beginning...
> > 
> 
> Christer,
> 
> There are two alternatives: 
> 
> When a proxy forks a request it slaps on a proxy-selected "No-Answer
> Timeout" on INVITE requests, that is, a proxy will wait 
> around for a certain
> time for final responses from all branches and otherwise it 
> will just return
> the best non-2xx response received and CANCEL out other branches.
> Imposing local timers that affect answer timeouts is a bad thing !! 
> 
> The other alternative is that the proxy "never" times outs 
> and will only
> send a final response when _all_ branches have responded with 
> a non-2xx
> response (assuming that a 1xx has been received from each 
> branch) OR one
> branch has returned a 2xx response OR the caller CANCEL's. 

One of the things that has changed in bis-05 is that a proxy is generally
not supposed to send a non-2xx final response upstream unless its gotten
final responses to all requests that it proxied. This is to prevent the
condition where a proxy forwards a non-2xx upstream, only to receive a 2xx
on a pending branch. The poor UA would have to handle this awful case where
it gets a non-2xx followed by a 2xx. 

So, if a proxy wants to terminate a pending transaction, it should follow
Robert's second alternative - CANCEL its pending branches and then send a
408 or 487 upstream once all pending branches have responded. It should not
follow his first alternative, where it simply sends the 408 and then
CANCELs.

-Jonathan R.

---
Jonathan D. Rosenberg, Ph.D.                72 Eagle Rock Ave.
Chief Scientist                             First Floor
dynamicsoft                                 East Hanover, NJ 07936
[email-masked]                     FAX:   (973) 952-5050
http://www.jdrosen.net                      PHONE: (973) 952-5000
http://www.dynamicsoft.com

_______________________________________________
Sip mailing list  http://www1.ietf.org/mailman/listinfo/sip
This list is for NEW development of the core SIP Protocol
Use [email-masked] for questions on current sip
Use [email-masked] for new developments on the application of sip

---

From: "A Venkatraman" <[email-masked]>
Date: Tue, 20 Nov 2001 09:54:42 -0600

Jonathan
The proxy is going to send a non-2xx final response to the UAC after a timer
expires if all branches have not sent a final response.
1.Does this mean the proxy wait for the CANCEL to potentially time out if a
branch does not respond to it, before returning the non-2xx response?

2.Further, suppose the CANCEL gets a 200 Ok but the final response to the
INVITE was not received. Should the proxy start a timer for this before
forwarding a final response to the Uac?

Venkat

-----Original Message-----
From: [email-masked] [mailto:[email-masked]]On Behalf Of
Jonathan Rosenberg
Sent: Tuesday, November 20, 2001 3:07 AM
To: 'Fairlie-Cuninghame, Robert'; 'Christer Holmberg'; Gonzalo Camarillo
Cc: Bob Penfield; [email-masked]
Subject: RE: [Sip] 482 handling by proxies

-Jonathan R.

---

---

From: Christer Holmberg <[email-masked]>
Date: Wed, 21 Nov 2001 08:35:09 +0200

Hi,

Assume the proxy sends a non-2xx response to the UAC, and then it
terminates all (if any) pending legs. So, it sends CANCEL. But, if there
is a race condition the proxy MAY still get a 2xx final response from
one or more of the legs. What is it supposed to do now? Since it has
already sent a non-2xx final response to the UAC it COULD of course
forward the other 2xx final responses to the UAC too - but isn't that
the situation we want to prevent?

Another option would be that the proxy ACK/BYE, but I think we have
earlier agreed that a proxy won't do that.

A third option is that the proxy terminates the pending legs BEFORE it
sends the final response to the UAC. In that case, IF 2xx final
responses are received for the legs it tries to CANCEL those can still
be forwarded to the UAC (since the CANCEL will not affect the call state
in the UAS that sent the 2xx response before it received the CANCEL).

Regards,

Christer Holmberg
Ericsson Finland