[SR-Users] CNXCC PrePaid module

Daniel-Constantin Mierla miconda at gmail.com
Mon May 12 09:33:16 CEST 2014


reply to wrong thread by mistake -- ignore previous message in the 
context of this discussion.

On 12/05/14 09:30, Daniel-Constantin Mierla wrote:
> Hello,
>
> if you look to remove the users from location, then you can use:
>
> kamctl ul rm USERID
>
> Cheers,
> Daniel
>
> On 12/05/14 05:18, Carlos Ruiz Díaz wrote:
>> Yep, assignment failed because the variables contain floating point 
>> values and Kamailio does not handle well this kind of precision.
>>
>> I patched the module to add the check before initiating the call, it 
>> is in master.
>>
>> As a way of testing your code, replace those values with integer 
>> ones, like 5 and 6, and check if the call is actually terminated or 
>> even initiated. This will give you a quick diagnosis of your routing 
>> script.
>>
>> Regards,
>> Carlos
>>
>>
>> On Sun, May 11, 2014 at 9:04 PM, Rene Montilva 
>> <renemontilva at gmail.com <mailto:renemontilva at gmail.com>> wrote:
>>
>>     Hi Carlos
>>
>>     kamailio version  4.1
>>
>>     El 11/05/2014 21:32, "Carlos Ruiz Díaz"
>>     <carlos.ruizdiaz at gmail.com <mailto:carlos.ruizdiaz at gmail.com>>
>>     escribió:
>>
>>         What Kamailio version are you using?
>>
>>
>>         On Sat, May 10, 2014 at 9:33 PM, Rene Montilva
>>         <renemontilva at gmail.com <mailto:renemontilva at gmail.com>> wrote:
>>
>>             Hi Carlos
>>
>>             kamailio config:
>>
>>             log("L_INFO", "saldo:$var(credit) y
>>             seg:$var(cost_per_sec) ");
>>
>>
>>             if($var(cost_per_sec) > $var(credit)) {
>>
>>             sl_send_reply("402","payment required");
>>                             exit;
>>                     }
>>
>>
>>             if (!cnxcc_set_max_credit("$var(client)",
>>             "$var(credit)",
>>             "$var(cost_per_sec)",
>>             "$var(i_pulse)",
>>             "$var(f_pulse)")) {
>>
>>                     sl_send_reply("503", "something's wrong in the
>>             server");
>>                     exit;
>>
>>                     }
>>
>>
>>
>>
>>
>>             i got this by syslog
>>
>>             $var(credit) = "0.0005";
>>             $var(cost_per_sec) = "0.0006";
>>
>>
>>
>>             #$var(credit) = $dbr(ra=>[0,0]); # 30$ of credit
>>             #$var(cost_per_sec) = $dbr(ra=>[0,1]); # 1$ per sec
>>
>>             $var(i_pulse) = "1"; # 1$ to establish the call
>>             $var(f_pulse) = "1"; # 1$ per second
>>
>>             if (!cnxcc_set_max_credit("$var(client)",
>>             "$var(credit)",
>>             "$var(cost_per_sec)",
>>             "$var(i_pulse)",
>>             "$var(f_pulse)")) {
>>                     sl_send_reply("402", "Sin saldo PAPA");
>>                     xlog("Error setting up credit control");
>>                     exit;
>>                     }
>>
>>
>>
>>             /usr/sbin/kamailio[13336]: INFO: <script>: Setting up
>>             money based credit control
>>             /usr/sbin/kamailio[13336]: INFO: <script>: saldo:0.0005 y
>>             seg:0.0006
>>             /usr/sbin/kamailio[13336]: WARNING: <core>
>>             [rvalue.c:1016]: rval_get_int(): automatic string to int
>>             conversion for "0.0005" failed
>>             /usr/sbin/kamailio[13336]: WARNING: <core>
>>             [rvalue.c:1920]: rval_expr_eval_int(): rval expression
>>             conversion to int failed (707,17-707,17)
>>             /usr/sbin/kamailio[13336]: WARNING: <core>
>>             [rvalue.c:1016]: rval_get_int(): automatic string to int
>>             conversion for "0.0006" failed
>>             /usr/sbin/kamailio[13336]: WARNING: <core>
>>             [rvalue.c:1920]: rval_expr_eval_int(): rval expression
>>             conversion to int failed (707,19-707,36)
>>
>>
>>             it still established the call
>>
>>
>>             with the function, kamailio doesn't evaluate the variable
>>
>>             if($var(cost_per_sec) > $var(credit)) {
>>
>>             sl_send_reply("402","payment required");
>>                             exit;
>>                     }
>>
>>
>>
>>
>>
>>             On Fri, May 9, 2014 at 4:41 PM, Carlos Ruiz Díaz
>>             <carlos.ruizdiaz at gmail.com
>>             <mailto:carlos.ruizdiaz at gmail.com>> wrote:
>>
>>
>>
>>
>>                 On Fri, May 9, 2014 at 3:52 PM, Rene Montilva
>>                 <renemontilva at gmail.com
>>                 <mailto:renemontilva at gmail.com>> wrote:
>>
>>                     these are the values before the function call:
>>
>>                      /usr/sbin/kamailio[24933]: INFO: <script>:
>>                     saldo:0.0005000000 y seg:0.000666666666666667
>>
>>
>>                 You are printing then before the assigment.
>>
>>                 /xlog("L_INFO", "saldo:$dbr(ra=>[0,0]) y
>>                 seg:$dbr(ra=>[0,1]) ");/
>>
>>                 use
>>
>>                 /xlog("L_INFO", "saldo:$var(credit) y
>>                 seg:$var(cost_per_second) ");/
>>
>>                 I just run a test with your values, and they did work.
>>
>>                 $var(credit) = "0.0005";
>>                 $var(cost_per_second) = "0.0006";
>>
>>                 /if (!cnxcc_set_max_credit("$var(client)",..../
>>
>>
>>                     this function doesn't work, maybe are the long
>>                     value:
>>
>>                     /if ($var(credit) *<* $var(cost_per_second)) {/
>>                     /  sl_send_reply("402", "payment required");/
>>                     /      exit;/
>>                     /}/
>>
>>
>>                 Did not get that, what does not work?
>>
>>
>>
>>
>>                     On Fri, May 9, 2014 at 3:48 PM, Carlos Ruiz Díaz
>>                     <carlos.ruizdiaz at gmail.com
>>                     <mailto:carlos.ruizdiaz at gmail.com>> wrote:
>>
>>                         Oops, correction:
>>
>>                         /if ($var(credit) *<* $var(cost_per_second)) {/
>>                         /  sl_send_reply("402", "payment required");/
>>                         /      exit;/
>>                         /}/
>>                         /
>>                         /
>>                         By the way, please inform of your results
>>                         after doing your tests.
>>
>>                         Thanks,
>>                         Carlos
>>
>>
>>                         On Fri, May 9, 2014 at 3:17 PM, Carlos Ruiz
>>                         Díaz <carlos.ruizdiaz at gmail.com
>>                         <mailto:carlos.ruizdiaz at gmail.com>> wrote:
>>
>>                             Hello,
>>
>>                             "i_pulse" and "f_pulse" are direct
>>                             translations of the Spanish (I noticed
>>                             you speak it) phrases "pulso inicial" and
>>                             "pulso final", which I don't think have
>>                             the same meaning in English. Updating the
>>                             docs and using the proper terminology are
>>                             pending matters on this module.
>>
>>                             Both values represent the initial and
>>                             interim costs of the call, in your case,
>>                             it is being billed second by second
>>                             (1:1), subtracting "0.000666666666666667"
>>                             every second from a pool of credit that
>>                             is equal to "0.0006500000".
>>
>>                             The message that's being shown, looks
>>                             like a precision loss error, which is
>>                             unlikely because I used numbers even
>>                             smaller than yours. Please print the
>>                             values of $var(credit) and
>>                             $var(cost_per_sec) before calling the
>>                             cnxcc function.
>>
>>                             Furthermore, you should also consider
>>                             checking your values before passing them
>>                             to the function. For example:
>>
>>                             *1. check if the credit is greater than
>>                             the cost per second, *before*.*
>>
>>                             /if ($var(credit) > $var(cost_per_second)) {/
>>                             /sl_send_reply("402", "payment required");/
>>                             /exit;/
>>                             /}/
>>
>>                             There's no reason to call the function
>>                             when the conditions are not met. Cnxcc
>>                             will authorize the call and hang it
>>                             immediately (1 second later).
>>
>>                             I may need to add this check myself
>>                             inside the module.
>>
>>                             *2. make sure you are rejecting the call
>>                             in case of module's error. *
>>
>>                             /if (!cnxcc_set_max_credit("$var(client)",
>>                             "$var(credit)",
>>                             "$var(cost_per_sec)",
>>                             "$var(i_pulse)",
>>                             /
>>                             /"$var(f_pulse)") {
>>                             /
>>                             /sl_send_reply("503", "something's wrong
>>                             in the server");
>>                             /
>>                             /exit;
>>                             /
>>                             /}/
>>                             /
>>                             /
>>                             Regards,
>>                             Carlos
>>
>>
>>
>>
>>                             On Fri, May 9, 2014 at 2:45 PM, Rene
>>                             Montilva <renemontilva at gmail.com
>>                             <mailto:renemontilva at gmail.com>> wrote:
>>
>>                                 Hi Carlos
>>
>>                                 This my kamailio config:
>>
>>                                 #!ifdef CNXCC_MONEY
>>                                 sql_query("ca", "select * from
>>                                 billing.sel_customer_credit('pepe','xxxxxxx","ra");
>>
>>                                 xlog("L_INFO", "Setting up money
>>                                 based credit control");
>>
>>                                 if($dbr(ra=>rows)> 0){
>>                                 xlog("L_INFO", "saldo:$dbr(ra=>[0,0])
>>                                 y seg:$dbr(ra=>[0,1]) ");
>>
>>                                 $var(credit) = $dbr(ra=>[0,0]); # 30$
>>                                 of credit
>>                                 $var(cost_per_sec) = $dbr(ra=>[0,1]);
>>                                 # 1$ per sec
>>                                 $var(i_pulse) = "1"; # 1$ to
>>                                 establish the call
>>                                 $var(f_pulse) = "1"; # 1$ per second
>>
>>
>>                                 }
>>
>>                                 sql_result_free ("ra");
>>
>>                                 # 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)",
>>
>>
>>
>>                                 And this are the values by syslog info
>>
>>                                 INFO: <script>: saldo:0.0006500000 y
>>                                 seg:0.000666666666666667
>>                                 ERROR: cnxcc [cnxcc_mod.c:1425]:
>>                                 set_max_credit(): credit value must
>>                                 be > 0: 0.000000
>>
>>
>>
>>
>>
>>
>>                                 On Fri, May 9, 2014 at 3:08 PM,
>>                                 Carlos Ruiz Díaz
>>                                 <carlos.ruizdiaz at gmail.com
>>                                 <mailto:carlos.ruizdiaz at gmail.com>>
>>                                 wrote:
>>
>>                                     Hi,
>>
>>                                     Can you paste the code you are
>>                                     using, with the values that each
>>                                     variable contain at the moment of
>>                                     initiating the call?
>>
>>                                     Regards,
>>
>>
>>                                     On Fri, May 9, 2014 at 2:35 PM,
>>                                     Rene Montilva
>>                                     <renemontilva at gmail.com
>>                                     <mailto:renemontilva at gmail.com>>
>>                                     wrote:
>>
>>                                         Hi list
>>
>>                                         I don't understand prepaid
>>                                         logic calculation, because
>>                                         when my credit is 0 or lees
>>                                         than cost per second, the
>>                                         call is established equal
>>
>>                                         $var(i_pulse) and
>>                                         $var(f_pulse) how this works????
>>
>>
>>
>>                                         _______________________________________________
>>                                         SIP Express Router (SER) and
>>                                         Kamailio (OpenSER) - sr-users
>>                                         mailing list
>>                                         sr-users at lists.sip-router.org
>>                                         <mailto: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
>>                                     <tel:%2B52%2055%203048%203303>
>>
>>                                     _______________________________________________
>>                                     SIP Express Router (SER) and
>>                                     Kamailio (OpenSER) - sr-users
>>                                     mailing list
>>                                     sr-users at lists.sip-router.org
>>                                     <mailto: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
>>                                 <mailto: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
>>                             <tel:%2B52%2055%203048%203303>
>>
>>
>>
>>
>>                         -- 
>>                         Carlos
>>                         http://caruizdiaz.com
>>                         http://ngvoice.com
>>                         +52 55 3048 3303 <tel:%2B52%2055%203048%203303>
>>
>>                         _______________________________________________
>>                         SIP Express Router (SER) and Kamailio
>>                         (OpenSER) - sr-users mailing list
>>                         sr-users at lists.sip-router.org
>>                         <mailto: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
>>                     <mailto: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 <tel:%2B52%2055%203048%203303>
>>
>>                 _______________________________________________
>>                 SIP Express Router (SER) and Kamailio (OpenSER) -
>>                 sr-users mailing list
>>                 sr-users at lists.sip-router.org
>>                 <mailto: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
>>             <mailto: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 <tel:%2B52%2055%203048%203303>
>>
>>         _______________________________________________
>>         SIP Express Router (SER) and Kamailio (OpenSER) - sr-users
>>         mailing list
>>         sr-users at lists.sip-router.org
>>         <mailto: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 <mailto: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
>
> -- 
> Daniel-Constantin Mierla -http://www.asipto.com
> http://twitter.com/#!/miconda  -http://www.linkedin.com/in/miconda

-- 
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20140512/b09c5e0c/attachment.html>


More information about the sr-users mailing list