2011/5/10 Bob Penfield <[email protected]>: > I think that the text does apply because it applies to ANY response on ANY > client transaction and that would include the "completed" client transaction. > If the request was forked by a downstream proxy, your proxy would see > multiple responses on the same branch. The reason for this is the same as the > reason given on page 107 in that it ensures that a "late" 2xx gets forwarded > back to the UAC.
Yes but just for 2XX responses as you say. > Imagine a downstream proxy has forked to two targets A and B. It gets a 480 > from A and then times out on B a fraction of a second before B answers and > sends a 200-OK. The downstream proxy would send the 480, and then when the > 200 OK was received on the other branch it would forward it upstream. Your > proxy would see a 480 and then a 200 on the same branch. The proxy cannot > know the state of the UAs and in keeping with the end-to-end principle, it > should forward the 2xx back to the UAC and let it decide what to do (such as > ACK and BYE). If the proxy ignores the 2xx, it will likely receive 2xx > retransmission from B. That should not occur. A *single* client transaction cannot accept both a 480 followed by a 200 (with same branch so same client transaction as stated before). Please check RFC 6026 section 8.4 (figure 5). There is no transation from "completed" to "accepted", neither it's covered the case in whcih a client transaction receives a 2XX after receiving a 4XX response (check yourself in the diagram). And note that this RFC improves/fixes RFC 3261 so when a client transaction receives a 200 it doesn't terminate the transaction but enters it into "accepted" state to absorb any other late response retranmission. But it's not possible to receive a 4XX in a client transaction (so state becomes "completed") and then receive a 200. This is en error (as the transaction cannot pass to "accepted" from "completed") and should be ignored. The example you show above clearly exposes a possible bug in the specification. Basically it's the same question I've done before: what happens if a 200 with branch "1234" arrives after a 480 with same branch (so the client transaction was in "completed" state)? Thanks a lot. -- Iñaki Baz Castillo <[email protected]> _______________________________________________ Sip-implementors mailing list [email protected] https://lists.cs.columbia.edu/cucslists/listinfo/sip-implementors
