Hola muchach@s, este es mi primer post en la lista a pesar de que ya tengo alrededor de 6 meses suscrito, especial saludo a los "Gurus" Iñaki, Saul. La situación que tengo que solventar con Kamailio es la integración entre Microsoft OCS (Sí, ya se M$ sucks) y Asterisk, usando como intermediario a OpenSER por el tema del transporte de SIP/TCP (usado por M$) a SIP/UDP (usado por *). Estoy haciendo una pequeña prueba usando eyebeam como softphone y seteando el transporte a TCP, este se registra sin problemas con Kamailio y puedo realizar llamadas entre extensiones Kamailio perfectamente, pero cuando trato de enviarle el INVITE al asterisk inmediatamente me retorna "Call Failed 477/TM" que segun entiendo es un problema de la capa de transporte. Estoy haciendo el enrutamiento con la instruccion t_relay() de la siguiente forma y parece que en ningun momento le llega nada a asterisk por el puerto 5060 (ya hice la captura con ngrep) :
if (is_method("INVITE")) { setflag(1); # do accounting if(uri=~"sip:5000@192.168.1.80:5070") #Para llamar a la extension 5000 en asterisk { t_relay("udp:192.168.1.107:5060"); #route(10); } }
Alguien me podria ayudar con esto ????
Gracias.
El Miércoles, 4 de Febrero de 2009, Robert Contreras escribió:
if (is_method("INVITE")) { setflag(1); # do accounting if(uri=~"sip:5000@192.168.1.80:5070") #Para llamar a la extension 5000 en asterisk { t_relay("udp:192.168.1.107:5060"); #route(10); } }
¿Puedes usar lo siguiente?:
$rd = "192.168.1.107"; $rp = 5060; t_relay();
También sería óptimo una captura con ngrep.
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)
1) t_relay("udp:192.168.1.107:5060");
2)$rd="192.168.1.107"; $rp=5060; t_relay();
3)rewritehostport("192.168.1.107:5060");
*** Adjunto la captura con ngrep en el puerto 5070 (el 5060 no muestra nada) ***
interface: any filter: (ip or ip6) and ( port 5070 ) # 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 Via: SIP/2.0/TCP 192.168.1.112:44714;branch=z9hG4bK-d87543-9d3c566fdc403439-1--d87543-;rport
Max-Forwards: 70 Contact: sip:1000@192.168.1.112:4398;transport=TCP To: "5000"sip:5000@192.168.1.80:5070 From: "Robert"sip:1000@192.168.1.80:5070;tag=ab66e77c Call-ID: 2430a230b532db7fOWYxNjU4YjAwOGI2OGU4YzZjODJlM2I3ZmNlM2ViOTQ. CSeq: 1 INVITE Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO Content-Type: application/sdp User-Agent: eyeBeam release 1003s stamp 31159 Content-Length: 600
v=0 o=- 5 2 IN IP4 192.168.1.112 s=CounterPath eyeBeam 1.5 c=IN IP4 192.168.1.112 t=0 0 m=audio 57656 RTP/AVP 107 100 106 6 0 105 18 3 5 101 a=alt:1 4 : aPtl3C/D 3W5T7M+K 192.168.1.112 57656 a=alt:2 3 : eVWq5uTY IpZ8M+i0 192.168.109.225 57656 a=alt:3 2 : KPku7YVD OZ4Rop+9 192.168.28.1 57656 a=alt:4 1 : 5snEu2kb 0xPPko0L 192.168.112.1 57656 a=fmtp:18 annexb=no a=fmtp:101 0-15 a=rtpmap:107 BV32/16000 a=rtpmap:100 SPEEX/16000 a=rtpmap:106 SPEEX-FEC/16000 a=rtpmap:105 SPEEX-FEC/8000 a=rtpmap:101 telephone-event/8000 a=sendrecv a=x-rtp-session-id:F33753243AF744D497790C5079BD54E5
# T 2009/02/04 09:24:51.008479 192.168.1.80:5070 -> 192.168.1.112:4398 [AP] SIP/2.0 100 Giving a try Via: SIP/2.0/TCP 192.168.1.112:44714;branch=z9hG4bK-d87543-9d3c566fdc403439-1--d87543-;rport=4398
To: "5000"sip:5000@192.168.1.80:5070 From: "Robert"sip:1000@192.168.1.80:5070;tag=ab66e77c Call-ID: 2430a230b532db7fOWYxNjU4YjAwOGI2OGU4YzZjODJlM2I3ZmNlM2ViOTQ. CSeq: 1 INVITE Server: Kamailio (1.4.3-notls (i386/linux)) Content-Length: 0
# T 2009/02/04 09:24:51.008762 192.168.1.80:5070 -> 192.168.1.112:4398 [AP] SIP/2.0 477 Send failed (477/TM) Via: SIP/2.0/TCP 192.168.1.112:44714;branch=z9hG4bK-d87543-9d3c566fdc403439-1--d87543-;rport=4398
To: "5000"sip:5000@192.168.1.80:5070;tag=23de66d6b9a34b2316f98bd4265c2e08-425c
From: "Robert"sip:1000@192.168.1.80:5070;tag=ab66e77c Call-ID: 2430a230b532db7fOWYxNjU4YjAwOGI2OGU4YzZjODJlM2I3ZmNlM2ViOTQ. CSeq: 1 INVITE Server: Kamailio (1.4.3-notls (i386/linux)) Content-Length: 0
# T 2009/02/04 09:24:51.008954 192.168.1.112:4398 -> 192.168.1.80:5070 [A]
# T 2009/02/04 09:24:51.113334 192.168.1.112:4398 -> 192.168.1.80:5070 [AP] ACK sip:5000@192.168.1.80:5070;transport=tcp SIP/2.0 Via: SIP/2.0/TCP 192.168.1.112:44714;branch=z9hG4bK-d87543-9d3c566fdc403439-1--d87543-;rport
To: "5000"sip:5000@192.168.1.80:5070;tag=23de66d6b9a34b2316f98bd4265c2e08-425c
From: "Robert"sip:1000@192.168.1.80:5070;tag=ab66e77c Call-ID: 2430a230b532db7fOWYxNjU4YjAwOGI2OGU4YzZjODJlM2I3ZmNlM2ViOTQ. CSeq: 1 ACK Content-Length: 0
********************************************************************************************************************************************
********************************************************************************************************************************************
2009/2/3 Iñaki Baz Castillo ibc@aliax.net
El Miércoles, 4 de Febrero de 2009, Robert Contreras escribió:
if (is_method("INVITE")) { setflag(1); # do accounting if(uri=~"sip:5000@192.168.1.80:5070") #Para llamar a la extension 5000 en asterisk { t_relay("udp:192.168.1.107:5060"); #route(10); } }
¿Puedes usar lo siguiente?:
$rd = "192.168.1.107"; $rp = 5060; t_relay();
También sería óptimo una captura con ngrep.
-- Iñaki Baz Castillo
Users-es mailing list Users-es@lists.kamailio.org http://lists.kamailio.org/cgi-bin/mailman/listinfo/users-es
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.
¡Interesante lo del error 477 del asterisk!
David Céspedes
-----Mensaje original----- De: users-es-bounces@lists.kamailio.org [mailto:users-es-bounces@lists.kamailio.org] En nombre de Iñaki Baz Castillo Enviado el: Miércoles, 04 de Febrero de 2009 09:58 a.m. Para: Lista de usuarios de Kamailio Asunto: Re: [Kamailio-Users-ES] SIP/TCP a SIP/UDP
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.
El día 5 de febrero de 2009 6:04, David A Céspedes ingdavidcespedes@cable.net.co escribió:
¡Interesante lo del error 477 del asterisk!
El error 477 no lo envía Asterisk sino Kamailio, por la razón que he explicado en mi último correo (conflicto con el tipo de transporte saliente requerido por el script y por el propio request entrante).
Saludos.
Prueba a usar rewritehostport(ip_del_asterisk) y luego t_relay() así sin parámetros.
sr-users-es@lists.kamailio.org