Cuenta de canales en Kamailio sin y con Parámetros Globales Personalizados

Dependiendo del escenario, necesitamos contar los canales que cada usuario/cliente está utilizando y al mismo tiempo queremos limitar ese numero de canales fijando un valor valido a nivel global. Claramente esta es solamente una forma de realizar ese tipo de configuración y seguramente la más sencilla ya que no vamos a diferenciar el numero de canales según el cliente. En este articulo veremos dos formas de hacerlo:

 

  1. utilizando un valor que si se modifica obliga a reiniciar el Proxy SIP

  2. utilizando un valor que se puede modificar utilizando el comando kamcmd y el modulo CFG_RPC

En el primer caso la configuración se realiza de la siguiente manera; se cargan los módulos DIALOG y CFG_RPG de Kamailio:

 

loadmodule "cfg_rpc.so"

loadmodule "dialog.so"

 

y entre los distintos parámetros del modulo DIALOG se añade (en negrita):

 

# ----- dialog params -----

modparam("dialog", "enable_stats", 1)

modparam("dialog", "rr_param", "did")

modparam("dialog", "timeout_avp", "$avp(dlg_timeout)")

modparam("dialog", "default_timeout", 21600)

modparam("dialog", "early_timeout", 300)

modparam("dialog", "noack_timeout", 30)

modparam("dialog", "end_timeout", 60)

modparam("dialog", "dlg_match_mode", 0)

modparam("dialog", "db_url", DBURL)

modparam("dialog", "db_mode", 1)

modparam("dialog", "send_bye", 1)

modparam("dialog", "profiles_with_value", "canales")

 

con este parámetro se dice a Kamailio que se va a crear un perfil de diálogos con nombre canales y que este perfil puede manejar valores (contar). Luego en este bloque presente en el archivo predefinido de Kamailio:

 

if (is_method("INVITE")) {

    setflag(FLT_ACC); # do accounting

}

 

se añade la linea en negrita:

 

if (is_method("INVITE")) {

    setflag(FLT_ACC); # do accounting

    dlg_manage();

}

 

que nos permite activar el modulo DIALOG para las llamadas y de este forma a toda una serie di variables y parámetros que se pueden leer o configurar por cada dialogo. Luego en el punto que nos interesa (normalmente antes de sacar llamadas salientes):

 

if(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$")) return;

 

se añade esta linea:

 

route(CANALES);

 

y normalmente al final del archivo se añade:

 

route[CANALES] {

    set_dlg_profile("canales","$fU");

    get_profile_size("canales","$fU","$avp(usados)");

    if($avp(usados) > 2) {

       sl_send_reply("503", "Has excedido el limite de canales");

       exit;

    }

}

 

Una explicación:

 

  • en la segunda linea se añade el dialogo (llamada) al perfil canales utilizando como referencia el numero de usuario contenido en la variable $fU

  • en la tercera linea se asigna a la variable $avp(usados) el valor del perfil canales para el usuario que está llamando

  • en la cuarta linea se envía la frase que aparece al LOG de Kamailio

  • en la quinta linea si el numero de canales usados por el usuario es más que 2, se continua con la linea que sigue sino se salta el bloque por completo

  • en la sexta linea se envía al LOG de Kamailio un comento notificando que se ha superado el numero de canales disponibles por el usuario contenido en la variable $fU

  • en la séptima linea se envía un mensaje de error SIP 503 indicando que se ha excedido el numero de canales disponibles

 

En este caso el numero máximo de canales es 2 pero podría ser cualquiera.

 

El segundo tipo de configuración se basa en los Parámetros Globales Personalizados que tienen la siguiente sintaxis:

 

group.variable = value desc "description"

 

si queremos configurar el numero de canales utilizando estos parámetros nada más poner en la parte del archivo de configuración dedicada a los parámetros globales:

 

canales.num_can = "2" desc "numero de canales"

 

luego el bloque anterior se modifica para que quede (en negrita los cambios):

 

route[CANALES] {

    set_dlg_profile("canales","$fU");

    get_profile_size("canales","$fU","$avp(usados)");

    if($avp(usados) > $sel(cfg_get.canales.num_can)) {

       sl_send_reply("503", "Has excedido el limite de canales");

       exit;

    }

}

 

Esa variable contendrá el valor 2 presente en la configuración del parámetro global personalizado. Si mientras Kamailio está funcionando queremos cambiar ese valor:

 

kamcmd cfg.set canales num_can nuevovalor

 

ejemplo para 10 canales:

 

kamcmd cfg.set canales num_can 10

 

si queremos saber en cualquier momento que valor tiene ese parámetro:

 

kamcmd cfg.get canales num_can

 

IMPORTANTE: ese valor se mantiene hasta que no se reinicie Kamailio ya que el Proxy a reiniciarse, leerá nuevamente el valor presente en el parámetro global personalizado.

 

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Cuenta de canales en Kamailio sin y con Parámetros Globales Personalizados" Suscribirse a VozToVoice - Todos los comentarios