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