[SR-Users] cnxcc

Kelvin Chua kelchy at gmail.com
Tue Jun 3 04:49:12 CEST 2014


hi guys,
just to close this issue, i figured the problem only affects scenarios
where dlg_manage() comes before cnxcc_set_max_credits()
Kelvin Chua


On Mon, May 12, 2014 at 10:00 AM, Carlos Ruiz Díaz
<carlos.ruizdiaz at gmail.com> wrote:
> Hi,
>
> Check this commitdiff [1], it has some subtle lines of code that remove the
> deadlock.
>
> Rtimer is not required, it is only used in the sample configuration file to
> display the amount of concurrent calls and to grant more time when needed,
> but strictly in the business logic sense. Internally, dialog is the only
> module that is a dependency.
>
> [1]
> http://git.sip-router.org/cgi-bin/gitweb.cgi?p=sip-router;a=commitdiff;h=d0f0ba702bd44524bc9f52e07341db03267b15f7
>
> Regards,
> Carlos
>
>
>
> On Sun, May 11, 2014 at 9:57 AM, Kelvin Chua <kelchy at gmail.com> wrote:
>>
>> hi carlos,
>>
>> i'm looking at the commitdiff, seems like it's just indentations
>>
>> http://git.sip-router.org/cgi-bin/gitweb.cgi?p=sip-router;a=commitdiff;h=d0f0ba702bd44524bc9f52e07341db03267b15f7
>> is there something i am missing?
>>
>> by the way, based on the module documentation, the only dependency is the
>> dialog module, shouldn't it include the rtimer module?
>> is it really required? what if i would only use CNXCC_MONEY and not
>> CNXCC_TIME or CNXCC_CHANNEL? should i still load
>> rtimer.so before loading cnxcc.so?
>>
>> Kelvin Chua
>>
>>
>> On Mon, Apr 28, 2014 at 9:13 PM, Carlos Ruiz Díaz
>> <carlos.ruizdiaz at gmail.com> wrote:
>>>
>>> I'm glad that it worked.
>>>
>>> Please don't forget to "git pull" to update your cnxcc copy.
>>>
>>> Regards,
>>> Carlos
>>>
>>>
>>> On Mon, Apr 28, 2014 at 3:17 AM, Andrzej Ciupek
>>> <andrzej.ciupek at hotmail.com> wrote:
>>>>
>>>> Hello again
>>>>
>>>> It works perfect, I was missing "setflag(DLG_FLAG);" in my main route.
>>>>
>>>> Thank You very much for help.
>>>>
>>>> Greetings
>>>> Andrzej Ciupek
>>>>
>>>> ________________________________
>>>> From: andrzej.ciupek at hotmail.com
>>>> To: carlos.ruizdiaz at gmail.com
>>>> CC: sr-users at lists.sip-router.org
>>>> Subject: RE: [SR-Users] cnxcc
>>>> Date: Mon, 28 Apr 2014 09:54:30 +0200
>>>>
>>>>
>>>> Hello
>>>>
>>>> You are amazing !!
>>>>
>>>> Your example work perfect, but I have to work with mine cfg, because
>>>> when I use part of Your route into my config it doesn't work like it should.
>>>> I think I have some problems with dialog module, because when I start
>>>> Your script I get:
>>>>
>>>> Apr 28 09:47:31 kamailio /usr/local/sbin/kamailio[3060]: INFO: <script>:
>>>> dialog started
>>>>
>>>> I don't see it using my config, so it looks like dialog module doesn't
>>>> work in my config file in proper way.
>>>> I will let You know when I find a bug in my script.
>>>>
>>>> Now when I have working example it will be easier.
>>>>
>>>> Greetings
>>>> Andrzej Ciupek
>>>>
>>>> ________________________________
>>>> Date: Sun, 27 Apr 2014 21:29:34 -0500
>>>> Subject: Re: [SR-Users] cnxcc
>>>> From: carlos.ruizdiaz at gmail.com
>>>> To: andrzej.ciupek at hotmail.com
>>>> CC: sr-users at lists.sip-router.org
>>>>
>>>> Kelvin,
>>>>
>>>> can you update your copy and try again? Maybe your problem was related
>>>> to this, or maybe not. In either case, I will try to reproduce your issue
>>>> later this week :).
>>>>
>>>> Regards,
>>>>
>>>>
>>>> On Sun, Apr 27, 2014 at 9:27 PM, Carlos Ruiz Díaz
>>>> <carlos.ruizdiaz at gmail.com> wrote:
>>>>
>>>> Hi Andrzej,
>>>>
>>>> I found a deadlock situation using the script you posted, thanks to an
>>>> unusual way of using the functions that the module exports.
>>>>
>>>> About the script itself: I found a few inconsistencies that would have
>>>> caused a problem with handing the calls even if there was no bug in the
>>>> software. For example:
>>>>
>>>> - if you want to set the maximum amount of calls per user, use the
>>>> function "cnxcc_set_max_channel"
>>>>
>>>> - the "call-shutdown" event route is only executed if the call runs out
>>>> of credit, never for "normal call clearing". For that, use "dialog:end" or
>>>> "dialog:failed" instead.
>>>>
>>>> - you cannot access "$var(client)" from outside the process that created
>>>> it. This means that when the call is killed, "$var(client)" will have a NULL
>>>> value since this event is processed by a completely different process. If
>>>> you want to have this information available everywhere, use a shared memory
>>>> variable instead ($sht).
>>>>
>>>> I created a sample script [1] that applies your requirements in a
>>>> slightly different way:
>>>>
>>>> - it authorizes the call by checking the balance
>>>> - it kills the call when the credit is over
>>>> - it doesn't allow more than one call per customer
>>>>
>>>> [1] https://gist.github.com/caruizdiaz/11359122
>>>>
>>>> In this example I used a shared memory variable, to give you an idea of
>>>> how to persist the customer's ID across processes.
>>>>
>>>> Regards,
>>>> Carlos
>>>>
>>>> -
>>>>
>>>>
>>>>
>>>>
>>>> On Sat, Apr 26, 2014 at 10:34 AM, Carlos Ruiz Díaz
>>>> <carlos.ruizdiaz at gmail.com> wrote:
>>>>
>>>> I did find a bug, using your config script, I will fix it this weekend.
>>>> Try with this configuration file [1].
>>>>
>>>> [1] https://gist.github.com/caruizdiaz/11323017
>>>>
>>>> In summary, you can't use more than one check mechanisms. It has to be
>>>> credit, time or channels, exclusively.
>>>>
>>>> Also, I need to test your config with Kam 4.1. I am using the trunk
>>>> version.
>>>>
>>>> Regards,
>>>>
>>>>
>>>> On Sat, Apr 26, 2014 at 10:23 AM, Andrzej Ciupek
>>>> <andrzej.ciupek at hotmail.com> wrote:
>>>>
>>>> Yes. I want prepaid subscribers be able to create only one channel to
>>>> prevent frauds for simultaneous calls.
>>>>
>>>> Greetings
>>>> Andrzej Ciupek
>>>> ________________________________
>>>> Od: Carlos Ruiz Díaz
>>>> Wysłano: ‎2014-‎04-‎26 16:42
>>>> Do: Andrzej Ciupek
>>>> DW: Kamailio (SER) - Users Mailing List
>>>> Temat: Re: [SR-Users] cnxcc
>>>>
>>>> Hi Andrzej,
>>>>
>>>> are you trying to setup cnxcc to check both credit and maximum
>>>> simultaneous calls?
>>>>
>>>> Regards,
>>>>
>>>>
>>>>
>>>> On Sat, Apr 26, 2014 at 9:26 AM, Andrzej Ciupek
>>>> <andrzej.ciupek at hotmail.com> wrote:
>>>>
>>>> Hello
>>>>
>>>> I’am using default config with options from an example. It looks like
>>>> event route isn’t execuded after hangup.
>>>>
>>>> Apr 26 16:26:14 kamailio /usr/local/sbin/kamailio[4611]: INFO: <script>:
>>>> 1000 has 1 call(s)
>>>> Apr 26 16:26:15 kamailio /usr/local/sbin/kamailio[4611]: INFO: <script>:
>>>> 1000 has 1 call(s)
>>>> Apr 26 16:26:16 kamailio /usr/local/sbin/kamailio[4611]: INFO: <script>:
>>>> 1000 has 1 call(s)
>>>> Apr 26 16:26:17 kamailio /usr/local/sbin/kamailio[4611]: INFO: <script>:
>>>> 1000 has 1 call(s)
>>>> Apr 26 16:26:18 kamailio /usr/local/sbin/kamailio[4611]: INFO: <script>:
>>>> 1000 has 1 call(s)
>>>> Apr 26 16:26:19 kamailio /usr/local/sbin/kamailio[4611]: INFO: <script>:
>>>> 1000 has 1 call(s)
>>>> Apr 26 16:26:20 kamailio /usr/local/sbin/kamailio[4611]: INFO: <script>:
>>>> 1000 has 1 call(s)
>>>> Apr 26 16:26:20 kamailio /usr/local/sbin/kamailio[4604]: INFO: <script>:
>>>> Setting up money based credit control
>>>> Apr 26 16:26:20 kamailio /usr/local/sbin/kamailio[4604]: INFO: <script>:
>>>> Setting up channel based credit control
>>>> Apr 26 16:26:20 kamailio /usr/local/sbin/kamailio[4604]: INFO: <script>:
>>>> CNXCC ROUTE: 1000 has 2 call(s)
>>>>
>>>> kamailio.cfg
>>>>>>>>>>>> # ----- prepaid call controll -----
>>>>
>>>> #!define DLG_FLAG 28
>>>> #!define CC_FLAG 29
>>>>
>>>> loadmodule "dialog.so"
>>>>
>>>> modparam("dialog", "hash_size", 2048)
>>>> modparam("dialog", "default_timeout", 3600)
>>>> modparam("dialog", "db_mode", 0)
>>>> modparam("dialog", "dlg_flag", DLG_FLAG)
>>>>
>>>> modparam("rtimer", "timer", "name=ta;interval=1;mode=1;")
>>>> modparam("rtimer", "exec", "timer=ta;route=SHOW_CHANNEL_COUNT")
>>>>
>>>> loadmodule "cnxcc.so"
>>>>
>>>> modparam("cnxcc", "dlg_flag", CC_FLAG)
>>>> modparam("cnxcc", "credit_check_period", 1) #check every 1 second
>>>>
>>>>>>>>>>>>>>>> route {
>>>>>>>>>>>>  if (!allow_source_address("2") and !allow_source_address("1")){
>>>>         route(CNXCC);
>>>>         route(PSTN);
>>>>         }
>>>>>>>> }
>>>>
>>>> route[CNXCC]
>>>> {
>>>>
>>>>         $var(client)            = "1000";
>>>>
>>>>         xlog("L_INFO", "Setting up money based credit control");
>>>>
>>>>         $var(credit)            = "10"; # 10$ of credit
>>>>         $var(cost_per_sec)      = "1";  # 1$ per sec
>>>>         $var(i_pulse)           = "1";  # 1$ to establish the call
>>>>         $var(f_pulse)           = "1";  # 1$ per second
>>>>
>>>>         # if only one call is established, that call should last 9
>>>> seconds.
>>>>
>>>>         if (!cnxcc_set_max_credit("$var(client)",
>>>>                                   "$var(credit)",
>>>>                                   "$var(cost_per_sec)",
>>>>                                   "$var(i_pulse)",
>>>>                                   "$var(f_pulse)")) {
>>>>                 xlog("Error setting up credit control");
>>>>                 return;
>>>>         }
>>>>         $var(count)     = -1;
>>>>
>>>>         if (!cnxcc_get_channel_count("$var(client)", "$var(count)")) {
>>>>                 xlog("Error getting customer's channel count");
>>>>         }
>>>>
>>>>         xlog("L_INFO", "CNXCC ROUTE: $var(client) has $var(count)
>>>> call(s)");
>>>>
>>>>         if ($var(retcode) < -1) {
>>>>                 xlog("Too many channels for customer");
>>>>                 sl_send_reply(403, "Forbidden");
>>>>
>>>>                 if (!cnxcc_terminate_all("$var(client)")) {
>>>>                         xlog("Error terminating customer's calls");
>>>>                 } else {
>>>>                         xlog("Terminating customer's call");
>>>>                 }
>>>>
>>>>                 exit;
>>>>         }
>>>> }
>>>>
>>>> route[SHOW_CHANNEL_COUNT]
>>>> {
>>>>         $var(count) = @cnxcc.channels["1000"].count;
>>>>         xlog("L_INFO", "1000 has $var(count) call(s)");
>>>> }
>>>>
>>>> event_route[dialog:failed]
>>>> {
>>>>         xlog("dialog failed");
>>>> }
>>>>
>>>> event_route[cnxcc:call-shutdown]
>>>> {
>>>>         xlog("L_INFO", "Shutting down channel by callcontroll");
>>>>         xlog("L_INFO", "[$ci]: call killed");
>>>>         $var(count)     = $var(count)-1;
>>>>         if (!cnxcc_get_channel_count("$var(client)", "$var(count)")) {
>>>>                 xlog("Error getting customer's channel count");
>>>>         }
>>>>         xlog("L_INFO", "CNXCC ROUTE: $var(client) has $var(count)
>>>> call(s)");
>>>>         # perform some kind of notification, database update, email
>>>> sending, etc
>>>> }
>>>>
>>>> Greetings
>>>> Andrzej Ciupek
>>>>
>>>> Od: Carlos Ruiz Díaz
>>>> Wysłano: ‎sobota‎, ‎26‎ ‎kwietnia‎ ‎2014 ‎15‎:‎19
>>>> Do: Kamailio (SER) - Users Mailing List, Andrzej Ciupek
>>>>
>>>> Hi,
>>>>
>>>> sorry guys, I forgot about this. I will make my own tests and post the
>>>> results.
>>>>
>>>> Andrzej, can you post the configuration file you are using?
>>>>
>>>> Regards,
>>>> Carlos
>>>>
>>>>
>>>> On Sat, Apr 26, 2014 at 4:15 AM, Kelvin Chua <kelchy at gmail.com> wrote:
>>>>
>>>> No, I have not yet found the solution for this issue on my setup.
>>>>
>>>> Maybe Carlos can help us out
>>>>
>>>> On Apr 26, 2014 5:10 PM, "Andrzej Ciupek" <andrzej.ciupek at hotmail.com>
>>>> wrote:
>>>>
>>>> Hello
>>>>
>>>> Have You solved this issue ?
>>>> I’am using Kamailio 4.1.3 and I’am getting the same results.
>>>>
>>>> Greetings
>>>> Andrzej Ciupek
>>>>
>>>>
>>>> _______________________________________________
>>>> 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
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Carlos
>>>> http://caruizdiaz.com
>>>> http://ngvoice.com
>>>> +52 55 3048 3303
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Carlos
>>>> http://caruizdiaz.com
>>>> http://ngvoice.com
>>>> +52 55 3048 3303
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Carlos
>>>> http://caruizdiaz.com
>>>> http://ngvoice.com
>>>> +52 55 3048 3303
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Carlos
>>>> http://caruizdiaz.com
>>>> http://ngvoice.com
>>>> +52 55 3048 3303
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Carlos
>>>> http://caruizdiaz.com
>>>> http://ngvoice.com
>>>> +52 55 3048 3303
>>>
>>>
>>>
>>>
>>> --
>>> Carlos
>>> http://caruizdiaz.com
>>> http://ngvoice.com
>>> +52 55 3048 3303
>>>
>>> _______________________________________________
>>> 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
>>>
>>
>>
>> _______________________________________________
>> 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
>>
>
>
>
> --
> Carlos
> http://caruizdiaz.com
> http://ngvoice.com
> +52 55 3048 3303
>
> _______________________________________________
> 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
>



More information about the sr-users mailing list