El Jueves, 6 de Septiembre de 2007, Saúl Ibarra escribió:
Entonces podría interesarme para los teléfonos que no
soportan PUBLISH
no?
Sí, pero como no hay una forma estándar de comunicar eso en los mensajes SIP
(por ejemplo en el REGISTER)...
Creo que tu anduviste en el tema pero no era posuible
saber cuales
soportaban y cuales no, no?
No, no hay.
Probé unos cuántos inventos, como por ejemplo examinar la tabla location
con "is_registered()" para aplicar sólo el pua_usrloc si el usuario no estaba
registrado, y más chapucillas así. Pero no son válidas porque es una carrera
de timers entre el tiempo de registro y el tiempo de caducidad del PUBLISH, y
paso de obligar a un intervalo de registro fijo sólo por la tontería del
pua_usrloc.
Es decir, me encontré con un montón de problemas.
Como solucionaste el tema?
Primeramente decir que realmente "no" debería ser un problema tan grande que
un cliente SIP envíe un PUBLISH cuando se inicia y que, como también envía un
REGISTER, resulte que OpenSer genera otro PUBLISH para él. Piensa que cuenta
el último que se genere (que es el que genera un nuevo NOTIFY acorde con su
contenido).
Un ejemplo de problema: Imagina que arrancas un softphone que envía un
REGISTER cada 1000 segundos y un PUBLISH cada 1500 (además de en el arranque,
claro).
- En el arranque se envían ambos mensajes y bueno, no pasa nada.
- Pero ahora el usuario se pone a mano en modo "offline".
- Entonces genera un PUBLISH que en OpenSer genera a su vez varios NOTIFY
con "offline" para todos los subscriptores de la presencia de nuestro
usuario.
- Es decir, ahora el resto le ven "offline".
- Pero entonces pasan 1000 segundos y mi cliente SIP envía un REGISTER con lo
que se genera un PUBLISH "online" y los consiguientes NOTIFY y nos ven
como "online".
- Esto se "arregla" a los 500 seg con mi próximo PUBLISH que
indicará "offline" (si es que el usuario no lo cambia manualmente antes).
Es decir, una carrera de "timers".
Lo suyo sería tener un listado de clientes que soporten PUBLISH o de los que
no, y comprobar el User-Agent antes de hacer el pua_usrloc, pero claro...
coñazo.
En fin, que yo digamos que dejé el tema un poco en el olvido.
Saludos.
--
Iñaki Baz Castillo