I appreciate the knowledge you have shared with me Alex, thank you, but I think there
might be a misunderstanding of our setup.
Our deployment with Kamailio involves a direct call flow with a single callee
"UAS" and no forking. Here's a clearer explanation of the issue we're
facing:
"Caller" <-> "B2BUA" <-> "Kamailio" <->
"Only one single callee"
1. Current Behavior with Kamailio:
- After our UAS sends a final negative SIP Response "greater than 4XX",
Kamailio's failure_route[ID]{...} is trigered via the t_on_failure(ID) method and
processes this rejected SIP request (in our case the INVITE).
- In the failure_route[ID]{...}, I extract the response code and reason phrase from the
last SIP reply of this rejected Request "in this case, the 486 Busy here", then
we construct some headers and do some processing and we use t_send_reply(code,
"reason phrase") to respond. However, Kamailio sends this reply with a different
"To tag" parameter, because it holds the rejected request INVITE which has no To
tag.
2. Expected Behavior:
Ideally, these messages should belong to the same SIP transaction and dialog, meaning
there should be no need to change the To tag parameter when sending the response. This is
the same behavior when we used onreply_route[ID]{...} as well.
3. Impact of PRACK Integration:
Previously, our tests without PRACK (e.g., "INVITE, 100, 180, 200 OK, ACK" or
"INVITE, 100, 180, 486, ACK") did not highlight this issue "The To tag is
changed in the case of receipts of negative SIP Response because we use always the
failure_route[ID]{...}" the B2BUA relay it directly to the other leg to UAC. However,
integrating PRACK has exposed problems. When our B2BUA receives a negative SIP Response
after the "180, PRACK, 200 to this PRACK" with a different To tag from these
previous messages, it becomes confused.
Thank you for your understanding and assistance.