Mi Brain-Training Personal

Para que no se me olviden las cosas…

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”.

  • http://www.tribulinux.com May

    Hola… Con que version de Openser estan trabajando en esta explicacion?

  • saghul

    Lo hice en su día con la 1.2.0, aunque en la 1.3 debería funcionar :)

  • Israel

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

  • Israel

    Se me olvido esto pasa con Xlite

  • saghul

    Has seleccionado el modo de presencia “Presence Agent”?

  • Israel

    Si he seleccionado “Presence Agent”

  • saghul

    Haciendo una captura con ngrep, ves los PUBLISH y SUBSCRIBE?

  • Israel

    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 ?

  • saghul

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

  • Jose Luis

    Hola,

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

    Saludos.

  • http://saghul.net saghul

    Hay un gateway IM de presencia SIMPLE, pero no lo he probado y no se si será eso lo que hace…