[SR-Users] implementing call-quota with dialog module

Aft nix aftnix at gmail.com
Mon Oct 8 16:17:04 CEST 2012


On Mon, Oct 8, 2012 at 8:09 PM, Daniel-Constantin Mierla
<miconda at gmail.com> wrote:
> Hello,
>
> what version are you using? at some point it was an issue adding a call in a
> profile after creating its associated dialog.
>

i'm using 3.2 branch of the git repository.

> Also, it might be better to check the quota before creating the dialog,
> because if the limit is reached, then you will just reject the call, so you
> avoid quite some internal operations -- but it is not really something
> crucial.

I'm under the impression that my idea behind this implementation is
somewhat flawed.

The idea was to  count calls per "domain".  If the the idea is
reflected in my approach then
i will head for minor tweaking. But if my implementation is just plain
wrong, then i will have to
do it manually, like using sqlops and do the dialog accounting myself.

cheers.

>
> Cheers,
> Daniel
>
>
> On 10/8/12 11:40 AM, Aft nix wrote:
>>
>> Hi,
>>
>> I'm trying to implement a "callquota" based on destination domains.
>>
>> The idea is following:
>>
>> every destation domain has a limit of, say 50 calls.
>>
>> As the sip clients are registered with the "destination domains", i've
>> extracted
>> the domain using "$fd" because it results as same value as destination
>> domain.
>>
>> Problem is, i wanted to have separate quota for each domains. But it
>> seems,
>> that the quota is  reached "as total" not as per domain basis.
>>
>> Another thing is, the number of calls reported by it is also unusually
>> large than
>> actual calls.
>>
>> This is implemenated as bellow:
>>
>>
>> #!ifdef WITH_CALL_LIMIT
>>   modparam("dialog","enable_stats",1)
>>   modparam("dialog","dlg_flag", DLG_FLAG)
>>   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)
>>   #!endif
>>
>>   #!ifdef WITH_CALL_LIMIT
>>            if (is_method("INVITE")) {
>>                    dlg_manage();
>>                    $var(100) = 0;
>>                    get_profile_size("callquota", "$fd", "$var(100)");
>>                    if ($var(100) >= 50 ) {
>>                            xdbg("DEBUG: Simultaneous calls limit
>> reached");
>>                            sl_send_reply("503","Simultaneous calls
>> limit reached");
>>                            exit;
>>                    }
>>
>>                    set_dlg_profile("callquota","$fd");
>>                    if (get_profile_size("callquota","$fd", "$var(100)")) {
>>                            xdbg("DEBUG: there are $var(100) total calls
>> for $fd");
>>                    }
>>    }
>>    #!endif
>>
>> Thanks in advance.
>
>
> --
> 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
>



-- 
-aft



More information about the sr-users mailing list