Subject: [SIP] Forking Proxy Behaviour Question

From: "Jo Hornsby" <[email-masked]>
Date: Mon, 12 Jun 2000 16:01:02 +0100

Hullo,

I have a couple of questions about section 12.4 in the June bis.

The first paragraph after the C fragment contains the following
sentence:
   "A proxy MAY send a CANCEL to all incomplete branches
    and return the best available final status to the
    client if not all responses have been received after
    60 seconds or the timeout period specified in the
    Timeout header field of the request."
    ^^^^^^^
s/Timeout/Expires/?

The next sentence says:
   "When forwarding responses, a proxy MUST forward all
    header fields of the selected response."
Shouldn't this read more along the lines of forwarding the whole
message, since there could be useful information in the message
body?

The next sentence says:
   "1xx: The proxy MAY forward the response upstream
         towards the client."
Would it be better to whack this up to "SHOULD" (as long as
the response is not 100)?  (I guess this also applies to section
10.1.2.)

Finally, is the notion of the "best response" strictly the lowest-
numbered response (excluding 1xx), or is it more about the class
of the response?  The reason I ask this is because if this is the
case, then I don't feel that the order of status codes (especially
in the 4xx region) is necessarily very helpful.

For instance, if a proxy forks to two locations, and one returns
486 and one returns 404, I would think that the 486 was a more
useful response to return?

Further, say a proxy receives an INVITE with a Request-URI that
is unknown (i.e., not in the proxy's domain/locationserver), and
thus the proxy just tries to route as best it can based on some
DNS resolution.  Now there's no server listening at the
transport:IP:port that the proxy tries, so the proxy times-out [0].
As per 12.4, I guess one would expect the proxy to return a 408
response, but perhaps something like a 404 would be better?

Comments?

Cheers,

 - Jo.

[0] Not particularly relevant for TCP, perhaps, but unfortunately
    it looks like we don't get the ICMP clues on Win32 Java. &:(
-- 
  Jo Hornsby; IT Professional         --       mailto:[email-masked]
 Ubiquity Software Corporation        --         http://www.ubiquity.net/

_______________________________________________
SIP mailing list
[email-masked]
http://lists.bell-labs.com/mailman/listinfo/sip

---

From: James Undery <[email-masked]>
Date: Mon, 12 Jun 2000 16:43:11 +0000 (GMT)

> of the response?  The reason I ask this is because if this is the

i.e. is the code fragment or the text to be taken as true. The code
fragment returns the first response from the lowest "hundred group" of the
responses. Yet the text says to return the lowest non 1xx error code seen.

> in the 4xx region) is necessarily very helpful.

Although baseing response codes on HTTP was never going to produce a
ordering of meaningful to SIP. Bearing this in mind the lowest non 1xx
response will produce a consistent result, however, the lack of meaning in
this makes it no better than using the first response from the lowest
category of codes (excluding 1xx).

Do other people feel this is a non-issue or something that ought to be
standardised.

James Undery

---

From: Henning Schulzrinne <[email-masked]>
Date: Mon, 12 Jun 2000 12:44:39 -0400

>     Timeout header field of the request."

Yes; the 'timeout' word just got propagated inappropriately.

> message, since there could be useful information in the message

Proxies always forward the body, but I guess it doesn't hurt to belabor
the (supposedly) obvious. Changed.

> the response is not 100)?  (I guess this also applies to section

I'm not sure it makes a big difference in practice, but I believe that's
what most implementations do, so SHOULD seems appropriate.

> useful response to return?

There are two cases: If the proxy "knows", it can apply whatever
optimization it deems desirable - this seems like an implementation
decision. In the absence of detailed status code knowledge, either
first-in-lowest-class or number seems about as good.

> response, but perhaps something like a 404 would be better?

I don't think you can distinguish the two with any degree of accuracy.
If I'm not in my office when you knock, and you wait five minutes, was I
"not found" or did you just "time out". Note that 404 indicates that you
have definitive information that I don't exist (at that address).
Proving the non-existence of people is hard. Just ask Elvis or the Loch
Ness monster.

-- 
Henning Schulzrinne   http://www.cs.columbia.edu/~hgs

---

From: Jonathan Rosenberg <[email-masked]>
Date: Tue, 13 Jun 2000 00:33:45 -0400

> what most implementations do, so SHOULD seems appropriate.

Actually, you really want to make this a SHOULD, since reliable
provisional responses may not work otherwise.

> > in the 4xx region) is necessarily very helpful.

Hmm... actually, I always thought that the ordering was:

200 better than 600 better than 300 better than 400 better than 500

which is different from the code. A 600 response is a fairly strong
statement, and I think it makes sense to make it higher than 300-599.

-Jonathan R.
-- 
Jonathan D. Rosenberg                       72 Eagle Rock Ave.
Chief Scientist                             First Floor
dynamicsoft                                 East Hanover, NJ 07936
[email-masked]                     FAX:   (973) 952-5050
http://www.cs.columbia.edu/~jdrosen         PHONE: (732) 741-7244
http://www.dynamicsoft.com

---

From: Henning Schulzrinne <[email-masked]>
Date: Tue, 13 Jun 2000 18:07:15 -0400

> provisional responses may not work otherwise.

Changed to SHOULD.

> statement, and I think it makes sense to make it higher than 300-599.

Maybe I'm missing something, but I read the code as: If a class '6'
arrives, best is set to this response and the search loop is terminated
by 'break', so that the 6xx is returned.

      else if (class == 6) {
        best = r;
        break;
      }

---

From: Jonathan Rosenberg <[email-masked]>
Date: Wed, 14 Jun 2000 00:23:20 -0400

> by 'break', so that the 6xx is returned.

You're right. Too much blood in my caffeine when I read that code again
;)

-Jonathan R.

---

From: Neil Deason <[email-masked]>
Date: Wed, 14 Jun 2000 12:01:40 +0100

> Jo Hornsby wrote:

[snip]

> first-in-lowest-class or number seems about as good.

Is it clear that this is the intention? The text in 12.4 about
sending back responses only refers to returning lowest-numbered
responses within the 3xx, 4xx, 5xx categories. While the "C-code
[which] describes the behaviour of a proxy" would send back the
last 4xx or 5xx class response it receives, if there was nothing
lower.

Cheers,
Neil
-- 
Ubiquity Software Corporation, UK          
http://www.ubiquity.net