Hi carlos,

sorry my ignorance, where is it the master link?

the test with only integers works perfect


On Sun, May 11, 2014 at 10:48 PM, Carlos Ruiz Díaz <carlos.ruizdiaz@gmail.com> 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@gmail.com> wrote:

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.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@gmail.com> wrote:



On Fri, May 9, 2014 at 3:52 PM, Rene Montilva <renemontilva@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@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




--

_______________________________________________
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




--



--

_______________________________________________
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


_______________________________________________
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




--

_______________________________________________
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




--

_______________________________________________
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