There is some subtlety here that's important to understand.

The restriction below is not actually in the text - I'm working
to try to find a way to make it harder for people to reach it and
welcome input.

First - we are talking about a proxy that is handling a transaction
statefully. If the transaction is being handled statelessy, it doesn't
deal with this whole "best" response concept.


When a stateful proxy sends any non-200 response (basically any
hop-hop response), it is really responding on its own as a UAS
using the various responses it received as inputs.

It MAY choose to reuse the To: tag from one of those inputs if
it chooses to forward it, but ->nothing<- will break if it chooses
to make up its own.

In fact, there are cases where its going to have to - if every
downstream proxy for this particular request returns a 503, this
proxy probably is probably going to return a 4xx and provide its
own tag (other requests going through other downstream proxies
may yet succeed). If the proxy determines that the whole world
has gone sour and wants to return its own 503 - it really is making
a statement about itself, not forwarding a statement about proxies
downstream from it.

Consider further a proxy that acts as a redirect aggregation service -
every place it sent this request to returns a 302. It chooses not to
recurse, but to pool all the contacts into one big collection and
send it upstream. The resulting 302 comes from _this_ element (acting
as a UAS). So does it add its own tag or reuse one from one of the
responses it received? It _doesn't matter_. An implementation could
just pick one of the received 302s, copy the contacts from all the
others into it and forward it. Or it could build its own response
from scratch, making its own tag in the process. The end result from
a system perspective is exactly the same.

The same is true for returning a 401/407 (where a proxy has to
aggregate all of the challenges from any other 401s or 407s its
seen into this one).

The main thing to remember is that as non-200 responses, they
are hop-hop. The tag information contained in them has _NO_CHANCE_
of being used to construct an ongoing dialog. An element could
munge the tag for _every_ forwarded non-200 replacing it with its
own value (globally unique to the transaction of course) and 
nothing breaks. From a system perspective, nobody could even tell.

Responses that might create a dialog are a whole different matter.
The restrictions on not touching the tags there are very important.

RjS





> Based on table 3 (Summary of Header fields), and on the text 
> in section
> 16.6, the proxy is not allowed to modify the To header in the 
> "best" non-2xx
> final response it sends to the UAC. Therefore, the proxy is 
> not allowed to
> add a tag, or change the tag in the response.
_______________________________________________
Sip-implementors mailing list
[EMAIL PROTECTED]
http://lists.cs.columbia.edu/mailman/listinfo/sip-implementors

Reply via email to