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@gmail.comwrote:
Hi Carlos
kamailio version 4.1 El 11/05/2014 21:32, "Carlos Ruiz Díaz" carlos.ruizdiaz@gmail.com escribió:
What Kamailio version are you using?
On Sat, May 10, 2014 at 9:33 PM, Rene Montilva renemontilva@gmail.comwrote:
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@gmail.com> wrote:
On Fri, May 9, 2014 at 3:52 PM, Rene Montilva renemontilva@gmail.comwrote:
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@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@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@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@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@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@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@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@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
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@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@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@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@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@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@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users