Hello all,
I'm using Kamailio with native script and KEMI in Javascript.
I noticed that functions from the TM module can have different results if I call them on KEMI or Native script. Is this intended behaviour? Don't they share the state?
In order to test this i made the following code :
KEMI Code : function ksr_request_route() {
try{ if ( KSR.is_method("BYE") ) {
print.error("BYE Request KEMI BYE")
KSR.route("exists_test")
if(KSR.tm.t_exists()) { print.error("KEMI : Transaction exists") } else { print.error("KEMI : Transaction does not exist") }
Native Code : route[exists_test] {
if( t_exists()) { xerr("Native Script : Transaction exists \n"); } else { xerr("Native Script : Transaction does not exist \n"); } }
I've also tried to change function call order but every time I get "Transaction does not exist" on native and "Transaction Exists" on KEMI.
Is this intended behaviour? Should I only call tm functions in native or Kemi in order to have consistency ?
Thanks in advance,
Best Regards,
Hello Duarte,
I wonder if this is down to differences in JS vs. config script in how truthiness is evaluated in `if` statements.
In JavaScript, if(...) evaluates to true if the returned value is a non-zero number (positive or negative). In Kamailio config script[1], in contrast, a value less than 0 is false, while only a positive value > 0 is evaluated as true.
I'm not sure offhand what t_exists() actually returns. According to the documentation, it is a boolean, but it may be that the boolean isn't being propagated properly in the KEMI environment and is being turned into a negative value, which still evaluates as true, in JS.
-- Alex
On Jul 17, 2024, at 1:37 PM, Duarte Rocha via sr-users sr-users@lists.kamailio.org wrote:
Hello all,
I'm using Kamailio with native script and KEMI in Javascript.
I noticed that functions from the TM module can have different results if I call them on KEMI or Native script. Is this intended behaviour? Don't they share the state?
In order to test this i made the following code :
KEMI Code : function ksr_request_route() { try{ if ( KSR.is_method("BYE") ) {
print.error("BYE Request KEMI BYE")
KSR.route("exists_test")
if(KSR.tm.t_exists()) { print.error("KEMI : Transaction exists") } else { print.error("KEMI : Transaction does not exist") }
Native Code : route[exists_test] {
if( t_exists()) { xerr("Native Script : Transaction exists \n"); } else { xerr("Native Script : Transaction does not exist \n"); } }
I've also tried to change function call order but every time I get "Transaction does not exist" on native and "Transaction Exists" on KEMI.
Is this intended behaviour? Should I only call tm functions in native or Kemi in order to have consistency ?
Thanks in advance,
Best Regards, __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions To unsubscribe send an email to sr-users-leave@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
[1] https://www.kamailio.org/wikidocs/tutorials/faq/main/#how-is-the-function-re...