[SR-Users] Dialog: Keep-alive issue:

Vassilis Radis radisb at gmail.com
Wed Apr 9 00:11:48 CEST 2014


1. Ok I think I found the cause for the problem:

First of all I noticed that the dialog doesn't timeout if the ka_timer
module parameter is less or equal to 10 secs. If it is above 10 secs then
everything works.

I use the master branch and in the dialog module (
https://github.com/kamailio/kamailio/blob/master/modules/dialog/dlg_req_within.c)
in line 264 there is this code:

if(ps->code==408 || ps->code==481) {
if(update_dlg_timer(&dlg->tl, 10)<0) {
LM_ERR("failed to update dialog lifetime\n");
goto done;
}
dlg->lifetime = 10;
dlg->dflags |= DLG_FLAG_CHANGED;
}

This code is for updating the dialog's lifetime when a timeout occurs (by a
fake 408 reply) or a 481 is received.
But in the call of update_dlg_timer function above, the second argument is
a hardcoded 10, which causes the dialog to refresh its lifetime to 10 more
seconds, every time a timeout occurs, and because when ka_timer is < 10
secs this gets refreshed again before the dialog expires. I did a test with
a value of 1 and it correctly works for values of ka_timer >= 2

I cant say the correct value, propably should be 1, so that the dialog gets
expired the next second that the dlg_timer_routine runs. Also this value
should be less than the ka_timer value so there should be a minimum valid
ka_timer value.

I also looked in the 4.1.2 release and it is there too.

2. Is it possible to manually define the OPTIONS timeout when sending it?
Currently is around 30 secs, and I would like to make it less for this
specific use (dialog keep-alives)


Thanks.



On Tue, Apr 8, 2014 at 12:12 PM, Vassilis Radis <radisb at gmail.com> wrote:

> Thanks Kelvin, but I already have tried this. This is exactly what I wrote
> that the issue is: Despite having set those options, and the keep alives
> are sent, the dialog does not timeout as it should when no reply is sent to
> the keep-alive OPTIONS msg by the dst peer.
>
> I am using the master branch and I am trying to follow the source code to
> see how and where the dialog module should be called back when the timeout
> for the OPTIONS message occurs, but I am a little lost. If you think I am
> missing something and there is a simple configuration solution please do
> point it to me.
>
> Thanks a lot.
>
>
> On Mon, Apr 7, 2014 at 10:02 PM, Kelvin Chua <kelchy at gmail.com> wrote:
>
>> try this
>>
>> modparam("dialog", "ka_timer", 3)
>> modparam("dialog", "ka_interval", 10)
>>
>> these 2 will make sure it will disconnect within 30 seconds
>>
>>                 dlg_set_property("ka-src");
>>                 dlg_set_property("ka-dst");
>>
>> thesse 2 will make sure that keep alive timers will apply to the current
>> dialog
>>
>> Kelvin Chua
>>
>>
>> On Mon, Apr 7, 2014 at 1:43 AM, Vassilis Radis <radisb at gmail.com> wrote:
>>
>>> Hello,
>>>
>>> I am trying to use the dialog module for dealing with some cases where
>>> clients do not send BYE messages correctly and just disappear. For this
>>> reason i use the ka_timer and ka_interval along with ka-dst and ka-src
>>> attributes. I am using the master branch. I have setup the following test:
>>> I have setup a sipp instance as a callee uas configured to discard OPTIONS
>>> messages. Kamailio serves as a proxy between this sipp instance and a VoIP
>>> device registered to kamailio. Kamailio is also configured to send every
>>> call to the sipp uas with stateful proxing and dialog support:
>>>
>>> CALLER ------> KAMAILIO ----->  CALLEE (sipp / ignores OPTIONS msg)
>>>
>>> I have the following issue:
>>>
>>> 1. Dialog does send the OPTIONS messages to caller and callee, and as
>>> expected, only the caller responds (with a 200 OK response). But the dialog
>>> module never terminates the dialog as it should (because the callee never
>>> responds to the OPTIONS msg). Instead it keeps sending those OPTIONS for
>>> ever. It is like there is no timer entry in the timer list for those
>>> OPTIONS. I looked a bit in the source code and I am trying to find where a
>>> timeout for those keep alives is a)set and b)handled . I see that the
>>> dlg_timer_routine is called every second but after turning debugging on, i
>>> see that the only timer reported is the default timeout for the call which
>>> i ve set to 3600 secs in the module parameters.
>>>
>>> Any insight or advice?
>>>
>>> Thanks a lot.
>>>
>>>
>>>
>>> _______________________________________________
>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>>> sr-users at lists.sip-router.org
>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>
>>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>> sr-users at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20140409/dab6debb/attachment.html>


More information about the sr-users mailing list