He estado "limpiando" un poco el código, metiendo el auth, el alias y el location en distintos routes, y ahora me queda más "legible" xD
Lo que no me ha quedado muy claro es la utenticación del REFER. Yo actualmente hago esto:
## Con el has_totag sabemos si son "in-dialog" if ((method=="INVITE" || method=="REFER") && !has_totag()) { sl_send_reply("403", "Forbidden"); xlog("L_INFO","$Crx ** INVITE o REFER sin TO tag ** $Cxx\n"); exit; }
Así vale? O debería añadir a continuación algo como:
if (method=="REFER") { route(22); route(1); }
Donde route 22 es:
# ----------------------------------------------------------------- # Auth check # -----------------------------------------------------------------
route[22] { ## Es necesario autenticarse if (!proxy_authorize("","subscriber")) { xlog("L_INFO","$CbxSe necesita autenticacion para $rm $Cxx\n"); proxy_challenge("","0"); exit; } ## Tienen que coincidir el nombre de usuario con el de la cabecera FROM else if (!check_from()) { xlog("L_INFO","$Crx*** check_from() = NO!! ***$Cxx\n"); sl_send_reply("403", "Use From=ID"); exit; } xlog("L_INFO","$Cbx*** Autenticacion Correcta para $rm ***$Cxx\n"); consume_credentials(); }
??
El 23/08/07, Saúl Ibarra saghul@gmail.com escribió:
Muchas gracias por las matizaciones xD voy a ver si "limpio" un poco el cfg y quito lo del REFER, pruebo el OPTIONS... Thnx!
El 23/08/07, Iñaki Baz Castillo ibc@aliax.net escribió:
El 21/08/07, Saúl Ibarra saghul@gmail.com escribió:
Luego al final, si no ha entrado por ninguno de los if se comprueba el alias, el location, y se hace relay. Esa parte no me gusta, y quiero tratar cada mensaje explicitamente, por lo tanto, que pasaria si no dejo los UPDATE y PRACK? Parecen "opcionales"...
Desconozco de momento para qué sirven el UPDATE y PRACK (tengo cierta idea pero no la suficiente), pero algo me dice que son mensajes "in-dialog" en cuyo caso recuerda que no hay ni que comprobar "alias", ni "location", sólo hacer relay (o pedir auth en caso del REFER).
Es decir, te digo algo que seguro ya sabes, pero por si acaso:
Los mensajes fuera de diálogo van a la dirección "bonita" del usuario en plan:
INVITE sip:500@dominio.org MESSAGE sip:500@dominio.org SUBSCRIBE sip:dominio.org PUBLISH sip:500@dominio.org OPTIONS sip:500@dominio.org
Pero los mensajes dentro de diálogo van directamente a la URI indicada previamente en la cabecera "Contact":
ACK sip:500@82.84.173.243:5080 REFER sip:800@82.84.173.243:5080 BYE sip:800@82.84.173.243:5080 INVITE sip:800@82.84.173.243:5080 <-- re-INVITE (poner en espera) INFO sip:800@82.84.173.243:5080 (envío de un DTMF) NOTIFY sip:800@82.84.173.243:5080 (para notificar el resultado de una transferencia solicitada previamente con un REFER)
Es decir, estos mensajes dentro de diálogo ya van directamente a la dirección exacta del destino y no hace falta investigar si son alias o si están en location.
Saludos.
-- Iñaki Baz Castillo ibc@aliax.net
Users-es mailing list Users-es@openser.org http://openser.org/cgi-bin/mailman/listinfo/users-es
-- Saúl -- "Some people say why, other just say, why not."