[SR-Users] cnxcc

Carlos Ruiz Díaz carlos.ruizdiaz at gmail.com
Mon May 12 04:00:57 CEST 2014


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 <carlos.ruizdiaz at gmail.com>
>>> Wysłano: ‎2014-‎04-‎26 16:42
>>> Do: Andrzej Ciupek <andrzej.ciupek at hotmail.com>
>>> DW: Kamailio (SER) - Users Mailing List <sr-users at lists.sip-router.org>
>>> 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 <carlos.ruizdiaz at gmail.com>
>>> *Wysłano:* ‎sobota‎, ‎26‎ ‎kwietnia‎ ‎2014 ‎15‎:‎19
>>> *Do:* Kamailio (SER) - Users Mailing List<sr-users at lists.sip-router.org>,
>>> Andrzej Ciupek <andrzej.ciupek at hotmail.com>
>>>
>>>  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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20140511/a317d6d1/attachment.html>


More information about the sr-users mailing list