[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