[SR-Users] cnxcc

Carlos Ruiz Díaz carlos.ruizdiaz at gmail.com
Mon Apr 28 04:27:09 CEST 2014


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20140427/93c72c03/attachment.html>


More information about the sr-users mailing list