[SR-Users] Dialog module not decrementing profile size

Daniel-Constantin Mierla miconda at gmail.com
Thu Nov 8 08:03:21 CET 2012


Hello,

On 10/30/12 10:51 AM, Grant Bagdasarian wrote:
>
> Hello Community,
>
> I've recently started to use the Dialog module to manage the amount of 
> incoming calls from our SIP provider allowed to pass through by using 
> profiles_with_values and setting the size of these profiles to a 
> certain amount.
>
> Most of the time this works as it should, but sometimes the 'slots' 
> available for a profile aren't cleared even though a dialog has 
> finished. This seems to happen when an high amount of regular traffic 
> is hitting kamailio.
>
> Has anyone else experienced this? Are there perhaps any other ways to 
> control the slots available for certain incoming SIP traffic?
>
> Below parts of my configuration file. Perhaps I'm doing something 
> wrong which causes this to happen.
>
> In my route[WITHINDLG] -> loose_route -> is_method("BYE") I'm not 
> calling dlg_manage(), could this be the problem?
>
is the dlg_manage() executed or not for BYE? You say no above, but the 
example has it. Because you have dlg_match_mode=2, you must call 
dlg_manage() for BYE explicitly.

Cheers,
Daniel
>
> Other comments are welcome too, as I'm fairly new to Kamailio.
>
> modparam("dialog", "enable_stats", 1)
>
> modparam("dialog", "dlg_flag", 4)
>
> modparam("dialog", "hash_size", 4096)
>
> modparam("dialog", "profiles_with_value", "318005004");
>
> modparam("dialog", "default_timeout", 43200)
>
> modparam("dialog", "dlg_match_mode",2)
>
> modparam("dialog", "detect_spirals", 1)
>
> request_route {
>
>         # per request initial checks
>
>         route(REQINIT);
>
>         # handle requests within SIP dialogs
>
>         route(WITHINDLG);
>
>         ### only initial requests (no To tag)
>
>         # CANCEL processing
>
>         if (is_method("CANCEL"))
>
>         {
>
>                 if (t_check_trans())
>
>                         t_relay();
>
>                 exit;
>
>         }
>
>         t_check_trans();
>
>         # record routing for dialog forming requests (in case they are 
> routed)
>
>         # - remove preloaded route headers
>
>         remove_hf("Route");
>
>        if (is_method("INVITE")) {
>
>               xlog("L_INFO", "Incoming request for $rU from $fU");
>
>               if ($rU == "318005004") {
>
>                      route(DIALOG);
>
>               }
>
>         }
>
>         # handle registrations
>
>         route(REGISTRAR);
>
>         if ($rU==$null)
>
>         {
>
>                 # request with no Username in RURI
>
>                 sl_send_reply("484","Address Incomplete");
>
>                 exit;
>
>         }
>
>         # dispatch destinations
>
>         route(DISPATCH);
>
>         route(RELAY);
>
> }
>
> route[DIALOG] {
>
>        dlg_manage();
>
>        record_route();
>
>        $var(SIZE) = 0;
>
>        sql_query("vf", "exec dbo.SelectAvailableSlots '00$rU'", "ra");
>
>        $avp(s:limit) = $dbr(ra=>[0,7]);
>
>        xlog("L_INFO", "Maximum simultaneous calls is configured at 
> $avp(s:limit) ....");
>
>        sql_result_free("ra");
>
>        if ($rU == "318005004") {
>
>               get_profile_size("318005004", "$rU", "$var(SIZE)");
>
>        }
>
>        xlog("L_INFO", "There are currently $var(SIZE) calls for $rU, 
> excluding the current call");
>
>        if($var(SIZE) >= $avp(s:limit)) {
>
>               xlog("L_INFO", "Simultaneous calls limit of 
> $avp(s:limit) reached for $rU: $var(SIZE)\n");
>
>               sl_send_reply("603", "Simultaneous calls limit reached");
>
>               exit;
>
>        }
>
>        if ($rU == "318005004") {
>
>               set_dlg_profile("318005004", "$rU");
>
>        }
>
>        if ($rU == "318005004") {
>
>               if(get_profile_size("318005004", "$var(SIZE)")) {
>
>                      xlog("L_INFO", "There are currently $var(SIZE) 
> calls for $rU, including the current call");
>
>               }
>
>        }
>
> }
>
> route[WITHINDLG] {
>
>         if (has_totag()) {
>
>                 # sequential request withing a dialog should
>
>                 # take the path determined by record-routing
>
>                 if (loose_route()) {
>
>                      #Used for call transfer
>
>                      if($fU == "318005004") {
>
>                         if (is_method("UPDATE")) {
>
> sl_send_reply("405","Method not allowed");
>
>                             xlog("L_INFO", "Dropping UPDATE 
> message...\n");
>
>                             exit;
>
>                         }
>
>                         if (is_method("INVITE")) {
>
>                             record_route();
>
>                         }
>
>                         if (is_method("BYE")) {
>
>                             dlg_manage();
>
>                         }
>
>                      }
>
>                         if (is_method("BYE")) {
>
>                                 setflag(1); # do accounting ...
>
>                                 setflag(3); # ... even if the 
> transaction fails
>
>                         }
>
>                         route(RELAY);
>
>                 } else {
>
>                         if (is_method("SUBSCRIBE") && uri == myself) {
>
>                                 # in-dialog subscribe requests
>
> route(PRESENCE);
>
>                                 exit;
>
>                         }
>
>                         if ( is_method("ACK") ) {
>
>                                 if ( t_check_trans() ) {
>
>                                         # non loose-route, but 
> stateful ACK;
>
>                                         # must be ACK after a 487 or 
> e.g. 404 from upstream server
>
>                  t_relay();
>
>                                         exit;
>
>                                 } else {
>
>                                         # ACK without matching 
> transaction ... ignore and discard.
>
>                                         exit;
>
>                                 }
>
>                         }
>
> sl_send_reply("404","Not here");
>
> }
>
> exit;
>
> }
>
> }
>
> Regards,
>
> Grant
>
>
>
> _______________________________________________
> 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

-- 
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio Advanced Training, Berlin, Nov 5-8, 2012 - http://asipto.com/u/kat
Kamailio Advanced Training, Miami, USA, Nov 12-14, 2012 - http://asipto.com/u/katu

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20121108/ea59b51b/attachment-0001.htm>


More information about the sr-users mailing list