User Tools

Site Tools


devel:kamailio-5.0-design

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
devel:kamailio-5.0-design [2016/02/24 23:20]
miconda created
devel:kamailio-5.0-design [2016/03/01 09:25]
miconda [Exporting Functions To Embedded Interpreters]
Line 1: Line 1:
 ====== Kamailio v5.0 Design ====== ====== Kamailio v5.0 Design ======
 +
 +===== Overview =====
  
 After 15 years of development, it is time for Kamailio v5.0. After 15 years of development, it is time for Kamailio v5.0.
 +
 +This page collects suggestions and ideas for major refactoring of various components to make the leap to v5.0.
 +
 +When adding a remark that needs to be tracked by author, use initials in front of the paragraph. The list of contributors to this document and initials:
 +
 +  * Daniel-Constantin Mierla (dcm)
 +
 +===== Initial Remarks =====
 +
 +Initial content for this document is listing also ideas popped up during discussions at Fosdem 2016 and Kamailio Development Workshop - among participants: Camille Oudout, Daniel-Constantin Mierla, Federico Cabiddu, Giacomo Vacca, Henning Westerholt, Olle E. Johansson, Torrey Searle, Victor Seva.
  
 ===== Configuration File ===== ===== Configuration File =====
 +
 +Goals:
 +
 +  * have at least one option of an optimized configuration file interpreter targeting high performance SIP routing deployments
 +  * have at least one option of a more flexible configuration language that allows:
 +    * extended language syntax
 +    * reloading routing rules at runtime
 +
 +To achieve the above, following sub-sections collects the proposals for configuration file language.
 +
  
 ==== Exporting Functions To Embedded Interpreters ==== ==== Exporting Functions To Embedded Interpreters ====
  
-  * define and implement an export interface from modules to embedded interpreters to automatically add new functions to embedded interpretersin a similar fashion as for adding functions to configuration file+  * 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/integer parameters can be provided by embedded interpreters 
 + 
 +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, "OK"
 + 
 +sr_exapi_t mod_exapi[] = { 
 +  { "sr.tm", "reply", {PARAM_INT, PARAM_STR, 0}, t_reply }, 
 +  { 0, 0, {0}, 0} 
 +}; 
 +</code>
  
 ==== Routing Logic In Embedded Interpreters Scripting ==== ==== Routing Logic In Embedded Interpreters Scripting ====
Line 16: Line 57:
  
 ===== Source Tree Structure ===== ===== Source Tree Structure =====
 +
 +Goals:
 +
 +  * group files per components to be easier to spot their role, especially the core, include files and utilities
 +
 +==== Reorganizing Source Files Location ====
  
 It was discussed in the past: It was discussed in the past:
  
   * source code files should be relocated to have a better structure for include headers, core files, modules and internal libraries as well as utilities   * source code files should be relocated to have a better structure for include headers, core files, modules and internal libraries as well as utilities
 +
 +Two models proposed:
 +
 +  * a) only move core files in a new 'core' folder in the root directory
 +  * b) move all source code files for Kamailio in a new 'src' folder, with further re-organization with subfolders inside 'src'
  
 ===== Build System ===== ===== Build System =====
  
-Revising the build system based on Makefiles.+Goals: 
 + 
 +  * revising the build system based on Makefiles. 
 + 
 +==== Reviewing Alternative Build Systems ====
  
 Alternatives to analyze: Alternatives to analyze:
Line 30: Line 86:
   * cmake   * cmake
  
 +===== Continuous Integration =====
 +
 +Goals:
 +
 +  * attempt to make a more consistent and "easy to contribute to" continuous integration eco-system 
 +
 +
 +==== Unit Test Framework ====
 +
 +Reviving the exiting unit testing or selecting another framework.
 +
 +==== Minimal Unit Tests ====
 +
 +Defining a minimum set of automatic tests that needs to be provided by each module:
 +
 +  * a minimal config for loading the module, to be sure it doesn't have missing linking symbols
 +  * can be done with a config as simple as:
 +
 +<code>
 +
 +loadmodule "foo.so"
 +
 +request_route {
 +  ;
 +}
 +</code>
  
 +  * or can require setting some module parameters or even loading other modules
devel/kamailio-5.0-design.txt · Last modified: 2016/05/03 18:33 by miconda