El Miércoles, 2 de Enero de 2008, Julian J. M. escribió:
On Jan 2, 2008 10:20 PM, Iñaki Baz Castillo
<ibc(a)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.
--
Iñaki Baz Castillo