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







May
Hola… Con que version de Openser estan trabajando en esta explicacion?
29 Abr 2008 a las 20:12
saghul
Lo hice en su día con la 1.2.0, aunque en la 1.3 debería funcionar
29 Abr 2008 a las 21:32
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 ?
17 Jun 2008 a las 23:15
Israel
Se me olvido esto pasa con Xlite
17 Jun 2008 a las 23:16
saghul
Has seleccionado el modo de presencia “Presence Agent”?
17 Jun 2008 a las 23:48
Israel
Si he seleccionado “Presence Agent”
18 Jun 2008 a las 0:30
saghul
Haciendo una captura con ngrep, ves los PUBLISH y SUBSCRIBE?
18 Jun 2008 a las 8:38
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 ?
18 Jun 2008 a las 15:02
saghul
OpenSER guarda datos en una cache en memoria, antes de usar la BD. Probablemente esos datos fueran inconsistentes…
18 Jun 2008 a las 22:50