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