El día 4 de febrero de 2009 15:43, Robert Contreras talfli64@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.