HOWTO: Presencia SIMPLE con OpenSER

Hoy vamos ha añadir presencia SIMPLE (Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions) a nuestro servidor OpenSER, de manera que podamos ver el estado de los dispositivos (si están online u ofline).

Para esto, lo primero que necesitamos es tener compilado el módulo ‘presence’ (si estáis instalando de paquetes deb saltaos esta parte:) ). El módulo ‘presence’ depende de la librería ‘libxml’, así que la instalamos:

#apt-get install libxml2 libxml2-dev

Editamos el Makefile de OpenSER y eliminamos ‘presence’ de la seción ‘exclude_modules’. Ahora, recompilamos:

#make clean
#make prefix=/
#make prefix=/ include_modules="mysql presence" modules
#make prefix=/ install

Ya tenemos los ficheros necesarios, ahora a configurar! Añadimos esto al principio del fichero, donde cargamos los módulos y ponemos los parámetros:

loadmodule «presence.so»
modparam(«presence», «db_url», «mysql://openser:openserrw@localhost/openser»)
modparam(«presence», «max_expires», 3600)
modparam(«presence», «force_active», 1)
modparam(«presence», «server_address», «sip:192.168.1.123:5060»)

Sustituye 192.168.1.123 por la IP de tu servidor OpenSER.

Tenemos que tratar la presencia, así que en la sección donde tratamos los mensajes de manera individual añadimos:

## Presencia
else if (method==»PUBLISH» || method==»SUBSCRIBE») {
route(8);
exit;
}

Y por último creamos ese route 8 donde trataremos los mensajes relativos a la presencia:

# —————————————————————–
# PRESENCE handler
# —————————————————————–

route[8]
{

## Auth check
route(22);

## Alias check
route(20);

## Location check
route(21);

if (method==»PUBLISH») {
handle_publish();
t_release();
}
else if (method==»SUBSCRIBE») {
handle_subscribe();
t_release();
}
}

Ya está! Con esto ya tenemos OpenSER listo para soportar presencia!

NOTA (si usas X-Lite): El modo de presencia que hay que seleccionar es «Presence Agent».

11 thoughts on “HOWTO: Presencia SIMPLE con OpenSER

  1. Si funciona en la version 1.3, pero cuando pasa una hora los clientes aparecen offline a pesar de que siguen registrados, alguna idea ?

  2. Buen día, al parecer a quedado resuelto y era problema de las tablas de mysql por la tabla de «presentity» no se guardaban correctamente solo recree las tablas y configure la siguiente lineas para su persistencia.

    modparam(«usrloc», «db_mode», 2)
    modparam(«usrloc», «db_url», «mysql://openser:openserrw@localhost/openser»)

    Lo curioso del caso es que hecho esto aun no se veían las actualización de los cambios en los clientes, hasta que reinicie los clientes xlite y se volvieron a registrar supongo que hasta ese entonces empezaron a hacer uso de la tablas presentity, active_watchers y watchers.

    Alguna idea o realidad de lo ocurrido ?

  3. OpenSER guarda datos en una cache en memoria, antes de usar la BD. Probablemente esos datos fueran inconsistentes…

  4. Hola,

    configurando Presencia, ¿podemos enviar la presencia a un servidor de OpenFire y que se actualice el estado en los clientes spark?.

    Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *