[SR-Users] Kamailio + dialog + dispatcher (limiting calls)

George Breahna george at polarismail.com
Fri Jul 13 05:46:49 CEST 2012


I am trying to limit the total number of concurrent calls processed by
Kamailio and I'm having a world of trouble.

We are running Kamailio 3.2.3 on Debian Squeeze with the dispatcher module
and recently enabled the dialog module. The call flow is extremely simple.
We have two Asterisk servers to which we load balance the incoming calls to,
nothing more. 

Our dialog configuration is the default kamailio config, with the following
additions:

modparam("dialog", "enable_stats", 1)
modparam("dialog", "dlg_flag", FLD_DLG)
modparam("dialog", "hash_size", 4096)
modparam("dialog", "profiles_with_value", "callquota")
modparam("dialog", "default_timeout", 300)
modparam("dialog", "dlg_match_mode",2)
modparam("dialog", "detect_spirals", 1)
modparam("dialog", "db_mode", 0)

in request_route we have:

if ( method=="INVITE" ) {
                t_on_failure("FAIL_ONE");
                ds_select_dst("1","4");
                # sl_send_reply("100","Trying");
                t_reply("100", "Trying");

                dlg_manage();
                setflag(FLT_ACC); # do accounting
                $var(SIZE) = 0;
                get_profile_size("callquota", "$rU", "$var(SIZE)");
                if( $var(SIZE) >= MAX_NUMBER_OF_CALLS ){
                        xlog("DEBUG: Simultaneous calls limit reached for
$rU: $var(SIZE)\n");
                        sl_send_reply("503", "Simultaneous calls limit
reached");
                        exit;
                }

                set_dlg_profile("callquota","$rU");

                if (get_profile_size("callquota","$var(SIZE)")) {
                        xlog("DEBUG: there are $var(SIZE) total calls for
$rU\n");
                }


                forward();#uri:host, uri:port);
                exit();
}

We also added a dlg_manage() in WITHINDLG

if (is_method("BYE")) {
	dlg_manage();
	setflag(FLT_ACC); # do accounting ...
	setflag(FLT_ACCFAILED); # ... even if the transaction fails
}

The problem is that some dialogs never get erased. Their total number always
increases and their state is always 1

kamctl fifo profile_list_dlgs callquota
dialog::  hash=2161:28334339
        state:: 1
        ref_count:: 1
        timestart:: 0
        timeout:: 0
In the debug logs I see these entries for the dialog module:

### Starting Call

Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: ERROR: *** cfgtrace:
c=[/etc/kamailio/kamailio.cfg] l=515 a=25 n=dlg_manage
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:523]: no dialog callid='1560428909_26358995 at 4.55.13.227' found
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:523]: no dialog callid='1560428909_26358995 at 4.55.13.227' found
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:553]: no dialog callid='1560428909_26358995 at 4.55.13.227' found
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:309]: new dialog on hash 2161
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_handlers.c:271]: route_set <sip:1.2.3.4;lr=on>, contact
sip:+118884936245 at 4.55.13.227:5060, cseq 402 and bind_addr
udp:10.10.10.1:5060
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:583]: ref dlg 0x7feb80ef0ae8 with 1 -> 1
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:603]: ref dlg 0x7feb80ef0ae8 with 1 -> 2
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:621]: unref dlg 0x7feb80ef0ae8 with 1 -> 1
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: ERROR: *** cfgtrace:
c=[/etc/kamailio/kamailio.cfg] l=525 a=27 n=set_dlg_profile
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:459]: ref dlg 0x7feb80ef0ae8 with 1 -> 2
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:461]: dialog id=28334339 found on entry 2161
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:621]: unref dlg 0x7feb80ef0ae8 with 1 -> 1
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:514]: ref dlg 0x7feb80ef0ae8 with 1 -> 2
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:517]: dialog callid='1560428909_26358995 at 4.55.13.227' found#012
on entry 2161, dir=1
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: CRITICAL: dialog
[dlg_hash.c:650]: bogus event 6 in state 1 for dlg 0x7feb80ef0ae8
[2161:28334339] with clid '1560428909_26358995 at 4.55.13.227' and tags
'gK0251b91f' ''
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:808]: dialog 0x7feb80ef0ae8 changed from state 1 to state 1, due
event 6 (ref 2)
Jul 12 22:38:34 debian1 /usr/sbin/kamailio[25452]: DEBUG: dialog
[dlg_hash.c:621]: unref dlg 0x7feb80ef0ae8 with 1 -> 1


### Hanging up now

Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25456]: DEBUG: tm [uac.c:182]:
DEBUG: dlg2hash: 29877
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25456]: DEBUG: tm [uac.c:182]:
DEBUG: dlg2hash: 29874
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25455]: DEBUG: dialog
[dlg_hash.c:514]: ref dlg 0x7feb80ef0ae8 with 1 -> 2
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25455]: DEBUG: dialog
[dlg_hash.c:517]: dialog callid='1560428909_26358995 at 4.55.13.227' found#012
on entry 2161, dir=1
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25455]: CRITICAL: dialog
[dlg_hash.c:650]: bogus event 7 in state 1 for dlg 0x7feb80ef0ae8
[2161:28334339] with clid '1560428909_26358995 at 4.55.13.227' and tags
'gK0251b91f' ''
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25455]: DEBUG: dialog
[dlg_hash.c:808]: dialog 0x7feb80ef0ae8 changed from state 1 to state 1, due
event 7 (ref 2)
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25455]: DEBUG: dialog
[dlg_hash.c:621]: unref dlg 0x7feb80ef0ae8 with 1 -> 1
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25455]: ERROR: *** cfgtrace:
c=[/etc/kamailio/kamailio.cfg] l=625 a=25 n=dlg_manage
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25455]: DEBUG: dialog
[dlg_hash.c:459]: ref dlg 0x7feb80ef0ae8 with 1 -> 2
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25455]: DEBUG: dialog
[dlg_hash.c:461]: dialog id=28334339 found on entry 2161
Jul 12 22:38:46 debian1 /usr/sbin/kamailio[25455]: DEBUG: dialog
[dlg_hash.c:621]: unref dlg 0x7feb80ef0ae8 with 1 -> 1


Is my config wrong ? Am I missing anything here ? Any advice would be much
appreciated

Thank you,
George




More information about the sr-users mailing list