The export of the functions to KEMI is done ok via sr_kemi_t structure array and mod_register(), but the implementation is not the right approach. In the KEMI script (e.g., python, lua, ...) should not be provided parameters with names of kamailio.cfg-variables, but string/int values computed from expressions in that language.

The fixup-free functions are not required for the functions exported to kamailio.cfg, because they are executed only once, at start-up, therefore is no risk of a memory leak if fixup-function allocates memory. But if it is called at run time during SIP packets processing, then it leaks memory. That's why KSR.x.modf() is considered unsafe.

Actually, what you implemented is more like KSR.x.modf(), but without using fixup-free.

I am not familiar at all with carrierroute module, but from C language approach, I pushed three commits to give an example of exporting cr_user_carrier() to KEMI. Only the last one (1e3f188) is relevant for KEMI exporting, the other two were to prepare (and somehow fix) the kamailio.cfg-exported function and update the docs for it because it also made it more flexible in terms of what is accepted as 3rd parameter -- the commits are: e84c194 and c32ce4d .

@lbalaceanu: with the commit e84c194 I tried to fix an improper approach of having a variable name as parameter, before the fixup_spve_null() was used, which is for dynamic strings (string that can combine static parts with variable names, like sip:$rU@$avp(newdomain)), relying on some hack to access first field expected to be a variable name, but that is not ensured.

There is a dedicated fixup for single variable name (fixup_pvar_null()), which is more appropriate in this case. With this change, the parameter can be any writable variable, which includes AVPs, so backward compatibility is ensured. Further restrictions can be added to allow only AVP by checking ((pv_spec_t *)(*param))->type==PVT_AVP inside cr_load_user_carrier_fixup() and similar in the newly exported KEMI function ki_cr_load_user_carrier().

If the changes I made are considered not ok, then they can be reverted, it's no problem for me, I coded to give a practical example and I was too lazy to go via a temporary branch considering it is the right approach to implement functions exported to KEMI.


Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.Message ID: <kamailio/kamailio/pull/3247/c1263363580@github.com>