> As per our internal design after receiving final response > from UA3, B2BUA will CANCEL the call towards UA2. > But we can't send 200OK to UA1 as a PRACK is pending > on dialog(c1+f1+t11). > > Thus I have few queries on it: > 1) Can B2BUA send a CANCEL to UA2 before PRACK > transaction is over?
Yes. > 2) If answer to above question is "yes" then how can > B2BUA send 200OK for dialog(c1+f1+t1) to UA1? There are several options; none are perfect. 1) You can keep your B2BUA connection to non answered dialog open longer for such race conditions. Similar to your PRACK question, you will also need to decide what to do if receive an INVITE's 2xx on this other dialog. 2) If B2BUA knows how to build the PRACK's 200 correctly, it builds and sends it. Since the PRACK can contain an offer, see RFC 6337 for the silly complications introduced by interpreting RFC 3262 as though only 2xx and 481 are valid responses. 3) If unsure how to build the PRACK's 200 correctly, B2BUA can wait until 2xx's ACK is received before attempting to complete the PRACK transaction on the other dialog. Hopefully by that time, the caller's SIP stack won't choke and release the call if it receives a PRACK final response (200 or something else) that it doesn't like. 4) Since RFC 4320 deprecated 408 for non-INVITE, ignore the PRACK's and cause UAC to uselessly retry, again, again, et cetera. Depending upon your RFC 3261/3262 interpretation, you may decide to send 481 after some delay. 5) Send a PRACK failure response. Hopefully the caller's SIP stack will allow it or at least only release the dialog instead of the call. Depending upon the selected failure response (and caller device's RFC 3262 interpretation), it may or may not be adequate to avoid subsequently receiving another PRACK with higher cseq. _______________________________________________ Sip-implementors mailing list [email protected] https://lists.cs.columbia.edu/cucslists/listinfo/sip-implementors
