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@gmail.com mailto:miconda@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@lists.kamailio.org <mailto:sr-users@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*