Dear Kamailio Developers,
I am using Kamailio as a SIP server to facilitate a phone call, but I am encountering an issue where the call cannot be established due to Kamailio sending a 408 Request Timeout to the caller. Issue Details:
- A (Caller) sends an initial INVITE to Kamailio, which then forwards it to B (Callee). The INVITE contains the following Supported header:
Supported: timer,100rel,replaces,precondition,from-change,histinfo,tdialog
I suspect the *precondition* option may be relevant to the issue.
- *B* responds with a *183 Session Progress* message, which includes:
Require: 100rel,precondition
Kamailio correctly forwards this response to *A.*
- *A* then sends a *PRACK* request to Kamailio. However, this request contains:
Require: sec-agree Supported: timer
Notably, *precondition* is absent from both the *Require* and *Supported* headers.
- Kamailio forwards this *PRACK* to *B*, and *B* responds with *200 OK*, including:
Supported: 100rel,from-change,tdialog
- However, Kamailio does not seem to acknowledge *B's 200 OK* and instead *keeps retransmitting the PRACK* to *B*. B responds with *200 OK* again, but the cycle repeats.
- After three retransmissions of *PRACK*, Kamailio eventually sends *408 Request Timeout* to *A*, leading *A* to send a *CANCEL* request.
Device Used:
- *Caller (A):* Asus ROG Phone 5 - *Callee (B):* Asus ROG Phone 6
Both are commercially available mobile phones.
Possible Cause:
According to *3GPP TS 24.229, Subclause 5.1.3.1*,
If the received response with an SDP body includes a Require header with
the "precondition" option-tag, the originating UE shall include a Require header with the "precondition" option-tag in responses with an SDP body to subsequent requests that include an SDP body and include the "precondition" option-tag in either the Supported or Require header field received in-dialog.
In this case:
- The *183 Session Progress* from *B* contains Require: *precondition*. - The subsequent *PRACK* from *A* does not include *precondition* in either *Require* or *Supported*.
Could this mismatch be the reason Kamailio keeps retransmitting *PRACK* and ignoring *B's 200 OK*? Or could there be another factor causing Kamailio to behave this way?
If additional details are needed, please let me know.
Best regards, Ping Kuan Kao