Kamailio KEMI Framework

Kamailio para procesar las solicitudes SIP recibidas y devolver respuestas, utiliza un archivo de configuración que contiene una serie de Bloques:

  • parámetros globales

  • carga de módulos

  • parámetros de los módulos

  • bloques de enrutamiento

Esto es así desde el 2001-2002. Cada vez que se modifique un parámetro global, una configuración de un modulo o uno de los bloque de enrutamiento, el único modo para que Kamailio acepte la nueva configuración, es reiniciar el Proxy SIP. Esto porque el interprete que lee el archivo de configuración, se ejecuta solamente cuando Kamailio se inicia; esto permite al interprete mismo optimizar la lógica de enrutamiento de forma que todo el funcionamiento del Proxy sea lo más rápido y eficiente posible.

La solución que permite recargar en cualquier momento la lógica de enrutamiento se llama KEMI (Kamailio Embedded Interface); un Framework (entorno de trabajo) que interpreta la lógica de enrutamiento escrita en distintos lenguajes de programación.

Kemi hizo su primera aparición desde la versión 5.0.0 de Kamailio pero solo últimamente muchos programadores han empezado a utilizarlo. El Framework permite utilizar la gran mayoría de los lenguajes de programación, siguiendo una determinada sintaxis, para escribir la lógica de enturamiento de Kamailio; el Proxy SIP, cuando se inicia, utiliza los distintos interpretes de los distintos lenguajes de programación para leer y procesar el contenido de los archivos creados.

Con esta nueva funcionalidad, los únicos datos que Kamailio sigue leyendo desde el archivo de configuración kamailio.cfg, serían:

  • parámetros globales

  • carga de módulos

  • parámetros de los módulos

Como muchos de los parámetros globales y de los parámetros de los módulos pueden ser modificados, sin reiniciar Kamailio, utilizando comandos proveídos por las API RPC (Remote Procedure Call), se pueden dar cuenta de la gran potencialidad que representa el uso de KEMI.

Actualmente, los lenguajes soportados y los respectivos módulos son:

  • JavaScript (appjsdt)

  • Lua (app_lua)

  • Python (app_python)

  • Python3 (app_python3)

  • Ruby (app_ruby)

  • Squirrel (app_sqlang)

¿Cómo se carga el script en el archivo de configuración de Kamailio? Un ejemplo (para el lenguaje LUA) sería:

#!define WITH_CFGLUA

Esta linea tiene que estar después de la primera linea del archivo de configuración kamailio.cfg; en el mismo archivo se añade:

loadmodule "app_lua.so"

modparam("app_lua", "load", "/path/to/script.lua")

cfgengine "lua"

primero se carga el modulo, luego se indica donde se encuentra el archivo que contiene la lógica de entutamiento escrita en LUA y para terminar se indica el tipo de lenguaje utilizado.

Ya había hablado de KEMI, también en esta entrada. Me comentan