El Miércoles, 2 de Enero de 2008, Julian J. M. escribió:
On Jan 2, 2008 10:20 PM, Iñaki Baz Castillo ibc@aliax.net wrote:
Lo malo es que, como decía en otro correo de este hilo, usando RealTime la lista en memoria de peers está vacía al arrancar Asterisk, y éste sólo va añadiendo peers a dicha lista cuando recibe un INVITE o REGISTER de alguno de esos peers y debe hacer una consulta SQL a la tabla del Realtime. En ese momento añade el peer a la lista interna.
En mi caso, no tengo usuarios registrados en Asterisk, no se registran en él sino en OpenSer, así que no llega ningún REGISTER y cada peer sólo se añade a la lista cuando envía un INVITE a Asterisk (para consultar su buzón por ejemplo).
Es decir, que me tendré que currar algún script con sipsak o similares que recorra la tabla de usuarios y envíe un OPTIONS o INVITE a Asterisk al arrancar, para que todos los usuarios se añadan a la lista interna.
Hombre, en mi opinión veo más fiable modificar el código para que consulte la tabla de la BD y genere del tirón todos los peers en la lista interna que guarda en memoria. De hecho, comentabas que había un parche pero que no funcionaba... Sería cuestión de echarle un ojo.
Cierto, lo haré.
Lo que no sabría es como gestionar los cambios que se produzcan en la base de datos, ya que asterisk cachearía la información hasta el siguiente reload... Aunque bueno, aquí un cron que cada hora recargue la tabla no sería tan traumático ;)
No no, en realidad no hay nada que hacer, la tabla de usuarios RealTime que ve Asterisk es una vista que no cambia nunca, es **completamente** estática y de hecho ni siquiera ataca a la tabla "location" donde OpenSer guarda los registros de los usuarios, sino que ataca a la tabla "subscriber" donde simplemente figuran los usuarios existentes.
En realidad es un engaño en toda regla a Asterisk, porque le dices que TODOS los usuarios están registrados en la IP de OpenSer, de tal forma que Asterisk no tiene ni idea de dónde están realmente registrados los usuarios y envía los mensajes a OpenSer. De hecho pego la creación de la vistadonde se ve claro lo que digo (fíjate en los campos "ipaddr" o "defaultip"):
CREATE VIEW asterisk_sip_users AS SELECT CONCAT(username,'_',domain) as name, CONCAT(username,'_',domain) as username, 'friend' as type, NULL as secret, domain as host, CONCAT(rpid, ' ','<',username,'>') as callerid, 'from_openser' as context, CONCAT(username,'@',domain) as mailbox, 'yes' as nat, 'no' as qualify, username as fromuser, NULL as authuser, domain as fromdomain, NULL as insecure, 'no' as canreinvite, NULL as disallow, NULL as allow, NULL as restrictcid, '__IP_OPENSER__' as defaultip, '__IP_OPENSER__' as ipaddr, '5060' as port, NULL as regseconds FROM subscriber;
Nota: en Voip-Info e incluso en los apuntes del Von de Roma del año pasado figuraba "domain as defaultip" y "domain as ipaddr". Eso es un error ya que si se trata de un registro SRV Asterisk morirá al localizarlo (esos campos indican la IP donde un usuario está registrado, no su dominio).
PD: Y perdón a todos por el offtopic ;) A ver si este 2008 me meto con Openser de una vez.
A ver si es verdad, que no participa mucha gente últimamente y aquí hay mucho que compartir ;)
Saludos.