Thanks for your helpful input. It's much clear to me now.
Would you please confirm my understanding as following:

Proxy:  1. forward all 1xx responses
        2. if a 2xx arrives, forward it, CANCEL all other branches,
           drop all non 2xx final responses already received
        3. if no 2xx received, pick the best among all 3xx/4xx/5xx/6xx
           responses and forward to UAC
        4. if final responses arrives after a 2xx is forwarded
           (this is caused by CANCEL and the response cross on the wire),
           send ACK for non-2xx and forward 2xx to UAC
        5. proxy could add To tag to responses generates by its own

UAC:    1. create dialog when receives state-invoking provisional response
           (e.g 180), if receives several provisional responses with
           different To tag, multiple dialogs will be created
        2. non-2xx final response arrives when all the dialogs in 1xx
state,
           terminate all dialogs, the transaction is finished
        3. 2xx response arrives on one dialog when all the dialogs in 1xx
state,
           a timer starts to make sure all the other dialogs will terminate
           after some time and no 2xx arrives on them
        4. if another 2xx arrives on another dialog before the timer
triggers,
           the UAC is free to keep multiple dialogs going or it could send
BYE
           on it after ACK the 2xx
        5. it's impossible for multiple non-2xx final responses reach UAC
since
           the proxy will only pick the best one among them
        6. it's impossible for a non-2xx final responses reach UAC after
UAC
           receives a 2xx since all the non-2xx final responses are eaten
by
           the proxy after 2xx arrives at proxy

-Lu Wei


_______________________________________________
Sip-implementors mailing list
[EMAIL PROTECTED]
http://lists.cs.columbia.edu/mailman/listinfo/sip-implementors

Reply via email to