devel:kamailio-5.0-design
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
devel:kamailio-5.0-design [2016/03/01 08:49] – [Routing Logic In Embedded Interpreters Scripting] miconda | devel:kamailio-5.0-design [2016/05/03 16:33] (current) – miconda | ||
---|---|---|---|
Line 15: | Line 15: | ||
Initial content for this document is listing also ideas popped up during discussions at Fosdem 2016 and Kamailio Development Workshop - among participants: | Initial content for this document is listing also ideas popped up during discussions at Fosdem 2016 and Kamailio Development Workshop - among participants: | ||
- | ===== Configuration File ===== | + | ===== Configuration File Interpreters |
Goals: | Goals: | ||
Line 24: | Line 24: | ||
* reloading routing rules at runtime | * reloading routing rules at runtime | ||
- | To achieve the above, following sub-sections collects the proposals for configuration file language. | + | Ongoing implementation that enables writing routing blocks in Lua and Python as alternative to native |
+ | * [[devel: | ||
- | ==== Exporting Functions To Embedded Interpreters ==== | ||
- | * define and implement an export interface from modules to embedded interpreters to automatically add new functions to embedded interpreters | ||
- | * it should be in a similar fashion as for adding functions to configuration file, but without fixup mechanism, so bare string/ | ||
- | |||
- | Interface fields: | ||
- | |||
- | * submodule name in embedded interpreter | ||
- | * function name in embedded interpreter | ||
- | * parameter types | ||
- | * pointer to c function | ||
- | |||
- | Example: | ||
- | |||
- | <code c> | ||
- | // export t_reply(200, | ||
- | |||
- | sr_exapi_t mod_exapi[] = { | ||
- | { " | ||
- | { 0, 0, {0}, 0} | ||
- | }; | ||
- | </ | ||
- | |||
- | ==== Routing Logic In Embedded Interpreters Scripting ==== | ||
- | |||
- | * writing the routing logic only in a scripting language supported via embedded interpreters | ||
- | * eventually setting core parameters, loading modules and setting modules' | ||
- | * routing logic in an embedded language should allow reloading at runtime without kamailio restart | ||
- | |||
- | === Implementation Ideas === | ||
- | |||
- | |||
- | Example kamailio.cfg for native interpreter: | ||
- | |||
- | < | ||
- | # core parameters | ||
- | ... | ||
- | |||
- | # load modules | ||
- | ... | ||
- | |||
- | # modules parameters | ||
- | ... | ||
- | |||
- | routing=" | ||
- | |||
- | request_route { | ||
- | ... | ||
- | } | ||
- | ... | ||
- | reply_route { | ||
- | ... | ||
- | } | ||
- | ... | ||
- | </ | ||
- | |||
- | Example kamailio.cfg for lua interpreter: | ||
- | |||
- | < | ||
- | # core parameters | ||
- | ... | ||
- | |||
- | # load modules | ||
- | ... | ||
- | |||
- | # modules parameters | ||
- | ... | ||
- | |||
- | routing=" | ||
- | |||
- | </ | ||
- | |||
- | The script / | ||
- | |||
- | < | ||
- | function request_route() | ||
- | ... | ||
- | sr.t_on_branch(" | ||
- | end | ||
- | |||
- | function reply_route() | ||
- | ... | ||
- | end | ||
- | |||
- | function my_branch_route() | ||
- | ... | ||
- | end | ||
- | ... | ||
- | </ | ||
- | |||
- | Expected changes: | ||
- | * each module that offers an interpreter for config will advertise a special structure with functions to be executed on various events (e.g., request received, reply received, etc...) | ||
- | * keep the name of routing blocks for failure/ | ||
- | * define the function names for routing blocks that are executed automatically | ||
- | * such as: | ||
- | * request_route | ||
- | * reply_route | ||
- | * onsend_route | ||
- | * various event_route blocks (e.g., htable: | ||
- | * eventually there can be a mapping of names used inside kamailio native config and functions inside the embedded interpreter that is inside each module, so each can have a naming pattern more suitable/ | ||
- | * for event routes executed automatically (not the one armed for tm branch failure which sets the name at runtime), the pattern can be: | ||
- | * modname_event_route(eventname) -- for example: | ||
- | |||
- | < | ||
- | // event_route[htable: | ||
- | function htable_event_route(evname) | ||
- | if evname==" | ||
- | ... | ||
- | else | ||
- | ... | ||
- | end | ||
- | </ | ||
===== Source Tree Structure ===== | ===== Source Tree Structure ===== | ||
Line 179: | Line 69: | ||
Reviving the exiting unit testing or selecting another framework. | Reviving the exiting unit testing or selecting another framework. | ||
+ | |||
+ | Available frameworks: | ||
+ | |||
+ | * http:// | ||
==== Minimal Unit Tests ==== | ==== Minimal Unit Tests ==== |
devel/kamailio-5.0-design.1456822186.txt.gz · Last modified: 2016/03/01 08:49 by miconda