[SR-Users] kemi with lua and dispatcher - attempt to index field 'dispatcher' (a nil value)

Daniel-Constantin Mierla miconda at gmail.com
Thu Nov 23 08:46:22 CET 2017


Hello,


On 22.11.17 16:45, Karsten Horsmann wrote:
> Hello Daniel,
>
> yes after playing around under kamailio-5.0.x, i understand that kemi
> exports are not complete.
>
> For example the KSR.hdr.append_hf dont work in kamailio-5.0.x
> attempt to call field 'append_hf' (a nil value)
> KSR.hdr.append_hf("P-Hint: outbound\r\n");
> But i found KSR.hdr.append("P-Hint: outbound\r\n"); (without _hf) -
> that did the same and works.

append_hf() function is part of textops module. KSR.hdr subpackage is
from core, somehow inspired from old app_lua sr.hdr subpackage. That was
the reason to have different name, not to have a confusion on dependencies.

>
> The hardest part with kemi seems to be "find the new kemi
> (function)name in your config-language" and also the module dependencies.

The functions available in KSR module and submodules are listed by:

kamctl rpc app_lua.api_list

>
> A few questions to kemi and kemi-docu:
>
> * Are all config-language on the same level with the kemi-exports or
> are some "more ahead" - for example python or javascript?

In terms of functions, they should be pretty much in pair, in the way
that any kemi function exported by core or a module is available
immediately in all kemi languages. The only difference can be in the
kemi functions implemented by the kemi-interpreter modules, respectively
KSR.x subpackage.

KSR.pv is also implemented by each kemi-interpreter module, but that is
because of KSR.pv.get() which needs special code for each interpreter,
otherwise the functions in KSR.pv must be the same in all kemi
languages, with the same behaviour in the script.

KSR.x is supposed to collect per kemi-interpreter specific functions or
have code that is specific per interpeter. For example KSR.x.exit() has
an implementation that reuses various tricks of the interpreter to stop
execution of the kemi script.
 
>
> * the behavior of "config-language exit - then exit kamailio" in lua
> makes me fear.

Indeed, the native-lua 'exit' is stopping the lua interpreter
completely, which in this case is kamailio, so it stops kamailio.

You have to use KSR.x.exit() instead.

> With the old-school kamailio-cfg you cannot break kamailio itself.

Again, here is about the functions of the interpreter. I think that also
in Python there is an system exit function that stops compeltely the
interpreter (kamailio in this case).

So, the importat thing here is that the scripting language interpreter
is kamailio itself, so the native functions for that scripting language
behave as being run by the standalone interpreter.

> Pointing to nil values in app_lua / cfgengine lua or request nathelper
> module
> in kemi-lua without load nathelper - breaks your kamailio. huuuu. so
> many kamailio-cores today in my testlab.
> Are there changes in the future for this?

I do not really get the above? If you do not load natherlper module,
kamailio crashes of used with kemi lua engine? If yes, can you provide
the backtrace with gdb from the core file? It needs to be fixed.

>
> * Is it better to say "if you want kemi, then go to 5.1.x or master
> branch"?

Not necessarily. Kemi framework code from core is more or less the same
in 5.0 and 5.1, but the 5.1 has lot more kamailio functions exported to
kemi. Based on your needs, using 5.0 with kemi can be sufficient.

Cheers,
Daniel
>
> Thanks!
>
>
> 2017-11-22 14:40 GMT+01:00 Daniel-Constantin Mierla <miconda at gmail.com
> <mailto:miconda at gmail.com>>:
>
>     Hello,
>
>
>     On 22.11.17 12:42, Karsten Horsmann wrote:
>>     Hello List,
>>
>>     i dunno why this happen :) after i write an email to the list -
>>     but now i found it.
>>
>>     the app_lua/kemi function name is sr.dispatcher.select for
>>     ds_select_dst
>
>     as wrote on my previous response to your initial email in this
>     discussion, this is not via KEMI, the "sr" module in Lua is old
>     style implementation, when for each function exported to Lua, new
>     C code had to be written inside app_lua. But you can still use it,
>     as in v5.0 many modules didn't export their functions to kemi.
>
>     Cheers,
>     Daniel
>
>>     The source-code documentation guides me to this point after
>>     greping around in app_lua.
>>
>>
>>         # dst_select( "GROUP", "HASH METHOD")
>>         if(!ds_select_dst($avp(routing_target), "4")) {
>>             send_reply("404", "No destination");
>>             exit;
>>         }
>>
>>     In lua part it looks like this (the nil part maybe broken per
>>     default, lua dont like vars with nil)
>>
>>     --- dispatcher route
>>     function ksr_route_dispatch(direction, routing_target)
>>
>>         KSR.xlog.xinfo("new $fU -> $rU in routing_target
>>     ksr_route_dispatch");
>>         KSR.info(routing_target);
>>         if (routing_target == nil) then
>>             KSR.xlog.xinfo("routing_target nil");
>>             KSR.sl.sl_send_reply(604, "Does Not Exist Anywhere");
>>             KSR.x.exit();
>>         end
>>
>>         -- return code dispatcher.select NOT true - then 404
>>         if (sr.dispatcher.select(routing_target, 4) ~= 1) then
>>             KSR.sl.sl_send_reply(404, "No destination");
>>             KSR.x.exit();
>>         end
>>         ksr_route_myheader(pathinfo);
>>         ksr_route_relay();
>>         KSR.x.exit();
>>     end
>>
>>
>>
>>     -- 
>>     Kind Regards
>>     *Karsten Horsmann*
>>
>>
>>     _______________________________________________
>>     Kamailio (SER) - Users Mailing List
>>     sr-users at lists.kamailio.org <mailto:sr-users at lists.kamailio.org>
>>     https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>>     <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users>
>
>     -- 
>     Daniel-Constantin Mierla
>     www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda>
>     Kamailio Advanced Training - www.asipto.com <http://www.asipto.com>
>     Kamailio World Conference - May 14-16, 2018 - www.kamailioworld.com <http://www.kamailioworld.com>
>
>
>
>
> -- 
> Kind Regards
> *Karsten Horsmann*

-- 
Daniel-Constantin Mierla
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Kamailio Advanced Training - www.asipto.com
Kamailio World Conference - May 14-16, 2018 - www.kamailioworld.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20171123/84f61b6f/attachment.html>


More information about the sr-users mailing list