On 13/01/2017 17:30, Mititelu Stefan wrote:
1. What would be the best practice for porting module functions that read/write data from/to a pseudo-variable? ...At the moment I'm thinking of using str for input and return; probably this will lead to partially duplicating the code of the existing module functions.

The idea is to no longer pass names of variables to the functions in the embedded language, but the string value for it. 

The functions that get a variable name to set can have to receive it as string, then use pv_cache_get(name) to resolve to the PV strctures. These functions will need a wrapper that will call the function in C expecting already the PV structure.

Now there is a wrapping system that together with the fixups convert from the parameters given as string values in kamailio.cfg to the PV structure.
The idea is to no longer pass names of variables to the functions in the embedded language, but the string value for it.
2. Will kemi support some other types besides int/str/none? (i.e. SR_KEMIP_PV)

Of course the goal is to extend kemi and make it easier to use for common cases. If you have some proposal to make, just open a discussion about it.

The goal is to be able to have very small wrappers for native config language and kemi (and in many cases no wrappers) that will call a common C functions.

The common C function should accept only int, str* and pv_spec_t* (for functions that need to write in a pv) parameters.

The current fixup system for native config converts at some point to  int/str using fixup_get_ivalue() and fixup_get_svalue().

I will also have a look in apy_kemi.c for KSR.pv.get/set methods for a better understanding. Thanks! :D

Note that the KSR.pv and KSR.x submodules are the only ones implemented in the interpreter modules at this moment. All the other submodules are not tied to the interpreter modules. Probably the KSR.pv will get out of interpreter, the KSR.x is intended to be interpreter-specific extensions (right now is exporting the function to execute any kind of kamailio.cfg function exported by its modules and the implementation of an "exit" equivalent in the embedded languages -- Lua has an exit, but that does a kill of the interpreter and by that, of kamailio).



 

If something is not clear regarding kemi, just ask more, I am happy to try to clarify better.

3. From what I've understood so far, kamailio becomes the interpreter itself. This actually mean that in the scripts I can do something like this:
"
import myPythonFramework
import otherPythonLib
# play with myPythonFramework
# play with otherPythonLib
"
right?

Yes, you can import any Python lib/framwork available outside there, with no relation to Kamailio, and combine it with the KSR to build whatever python script you need.

As a side remark, I am not a common Python user/devel, I added the kemi support in an existing module and then did some basic tests, but the statement above should stay true. In my Lua scripts I used http/s, twitter, db and other Lua-specific libs.

Probably you already noticed the examples in misc/examples/kemi/ -- they are a good starting point.

Cheers,
Daniel
-- 
Daniel-Constantin Mierla
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Kamailio World Conference - May 8-10, 2017 - www.kamailioworld.com