Hi all.
I'm trying to use the dialog module's keep alive feature (ka_interval()
and dlg_set_property()), and the documentation (under dlg_set_property)
says this:
If keep alive is enabled for a dialog, the module will send SIP OPTIONS
requests with CSeq lower or equal than last request within dialog
This is seems really weird to me, but the problem is worse than that - when
setting dlg_set_property("ka-src"), the OPTIONS messages sent to the caller
always have CSeq set to "0", regardless of what CSeq the UA sent on its
invite.
The problem is that while some UAs respond to these purposefully broken
messages with some kind of a 5xx reply (for example, Linphone funnily sends
"500 Internal Server Error"), several UAs don't respond at all. Worse than
that - some of the UAs that send back 5xx replies to OPTIONS with a
non-zero but invalid CSeq will completely ignore the OPTIONS keep-alive
message that is sent to the caller with a CSeq 0 - for example, PJSIP
responds with "503 Invalid CSeq" to a "ka-dst" OPTIONS message but
will
ignore a "ka-src" OPTIONS message with CSeq 0.
My questions:
1. Why are keep-alive messages sent with a wrong CSeq?
2. If we're keeping the "wrong CSeq" approach, can we at least not send
CSeq "0"?
3. Is there a way to change any of the above behaviors with a configuration
(i.e. without patching the sources)?
Thanks in advance
--
Oded Arbel
odeda(a)cloudonix.io