On 05/04/2016 09:34 AM, Daniel-Constantin Mierla wrote:
In the native configuration, event routes are executed if they are defined. Their names (as in event_route[name]) are not valid function names for the other programming languages to be used directly corresponding callback function name.
I was thinking of the alternative, next are the ones I came up with, more suggestions are welcome.
- add parameters for event route callback names, like:
modparam("htable", "evrtcb_mod_init", "ksr_htable_mod_init")
would define the name of the function for the alternative to event_route[htable:mod-init].
This has a benefit in speed, if the parameter is not defined, then there is no overhead in trying to execute a callback function in an embedded language.
The drawback is that there is need to code a bit of C to add those parameters to the components executing event routes.
- do a direct mapping using some translation rules, like:
- prefix with ksr_
- replace ':' and '-' with underscore '_'
So event_route[htable:mod-init] will have automatically the correspondent function ksr_htable_mod_init().
The drawback is that each time the even route should be called, a lookup on embedded language symbols table needs to be done to see if it exists, then execute it.
There is still some C code to do, but less than adding parameters like for 1).
- like 2), but instead of an automatic translation, keep a mapping table:
struct mapping { str kname; str ename; } table[] = { str_init("htable:mod-init"), str_init("ksr_htable_mod_init"),
}
Adding a new event route will require adding a new record in the mapping table. The benefit is that the function name in embedded language can be selected to be whatever, with or without ties to the event_route name.
Opinions?
I like Option 3, it is quite clear and flexible