El día 4 de febrero de 2009 15:43, Robert Contreras
<talfli64(a)gmail.com> escribió:
Gracias por su pronta respuesta, sin embargo sigo
obteniendo el mismo error,
ejecutando el enrutamiento de ambas formas. Segun veo las 3 maneras de
enviar la llamada ya las probé. El problema me parece es que no esta
cambiando el transporte a UDP. (Cuando cambio en eyebeam el transporte a UDP
todo funciona perfecto)
El problema está en que el eyeBeam manda el RURI con el parámetro
";transport=tcp":
T 2009/02/04 09:24:51.008047 192.168.1.112:4398 -> 192.168.1.80:5070 [AP]
INVITE sip:5000@192.168.1.80:5070;transport=tcp SIP/2.0
La elección del transporte a usar en un proxy se hace así:
- Primero se mira si el request que entra tiene un "Route".
- Si lo tiene y la URI de dicho Route no tiene parámetro "transport"
(o es "udp") entonces envía el request a dicha URI por UDP. Si tiene
"transport=tcp" lo envía por TCP.
- Si no tiene Route se mira el URI del Request Line.
- Si no tiene parámetro "transport" (o es "udp") entonces envía el
request a dicha URI por UDP. Si tiene "transport=tcp" lo envía por
TCP.
Kamailio respeta esto a rajatabla, así que si quieres forzar el
transporte de salida debes eliminar dicho parámetro del RURI.
Las soluciones que te habíamos dado antes de ver la traza no valían ya
que sólo cambiaban el host y port del RURI, dejando intactos los
posibles parámetros.
La forma sencillota de que funcione sería:
a) Usar alguna función que elimine el parámetro "transport" del RURI,
o mejor aún, que lo ponga a "udp" (no recuerdo qué función vale para
esto).
b) A lo bestia:
$ru = "sip:" + $rU + "@" + "IP_ASTERISK" + ":" +
"PORT_ASTERISK" +
";transport=udp" ;
t_relay();
Cuando lo pruebes, asegúrate de hacer otra captura y comprobar que el
INVITE sale por UDP y que no tiene "transport=tcp" en el RURI.
PD: Kamailio te daba error 477 porque:
- Estabas forzando un socket UDP de salida.
- El RURI exigía transporte TCP.
- => ¡Conflicto!
Saludos.
--
Iñaki Baz Castillo
<ibc(a)aliax.net>