Gracias por la pronta respuesta, asi da gusto unirse a una comunidad,
he colocado varios xlog en onreply_route[1] y lo he dejado asi:
onreply_route[1] { xdbg("incoming reply\n");
xlog("L_INFO", "*** onreply_route antes de forzar rtpproxy ***"); if ((isflagset(5) || isbflagset(6)) && status=~"(183)|(2[0-9][0-9])") { xlog("L_INFO", "*** rtpproxy forzado en onreply_route ***"); force_rtp_proxy(); } if (isbflagset(6)) { xlog("L_INFO", "*** fix_nated_contact en onreply_route ***"); fix_nated_contact(); } }
haciendo un tail -f /var/log/syslog veo lo siguiente:
Jun 25 13:39:51 kamailio /usr/local/sbin/kamailio[22088]: *** onreply_route antes de forzar rtpproxy *** Jun 25 13:39:51 kamailio /usr/local/sbin/kamailio[22087]: *** onreply_route antes de forzar rtpproxy *** Jun 25 13:39:55 kamailio /usr/local/sbin/kamailio[22088]: *** onreply_route antes de forzar rtpproxy *** Jun 25 13:39:55 kamailio /usr/local/sbin/kamailio[22088]: *** rtpproxy forzado en onreply_route *** Jun 25 13:39:55 kamailio /usr/local/sbin/kamailio[22088]: ACC: transaction answered: timestamp=1245929995;method=INVITE;from_tag=5c805948a0455e5b;to_tag=c0a80101-3569b;call_id=d1b81cbb5fbb9e6e@192.168.254.110;code=200;reason=OK;src_user=20000004;src_domain=212.4.107.250;dst_ouser=20000000;dst_user=20000000;dst_domain=192.168.254.101 Jun 25 13:39:55 kamailio /usr/local/sbin/kamailio[22089]: ACC: request acknowledged: timestamp=1245929995;method=ACK;from_tag=5c805948a0455e5b;to_tag=c0a80101-3569b;call_id=d1b81cbb5fbb9e6e@192.168.254.110;code=200;reason=OK;src_user=20000004;src_domain=212.4.107.250;dst_ouser=20000000;dst_user=20000000;dst_domain=192.168.254.101 Jun 25 13:39:55 kamailio /usr/local/sbin/kamailio[22088]: *** onreply_route antes de forzar rtpproxy *** Jun 25 13:39:55 kamailio /usr/local/sbin/kamailio[22088]: *** rtpproxy forzado en onreply_route *** Jun 25 13:39:56 kamailio /usr/local/sbin/kamailio[22089]: *** onreply_route antes de forzar rtpproxy *** Jun 25 13:39:56 kamailio /usr/local/sbin/kamailio[22089]: *** rtpproxy forzado en onreply_route *** Jun 25 13:39:58 kamailio /usr/local/sbin/kamailio[22087]: *** onreply_route antes de forzar rtpproxy *** Jun 25 13:39:58 kamailio /usr/local/sbin/kamailio[22087]: *** rtpproxy forzado en onreply_route ***
por lo que veo si hace el force_rtp_proxy() pero no hace nunca el fix_nated_contact() en onreply_route
----- Mensaje original ----- De: "Iñaki Baz Castillo" ibc@aliax.net Para: users-es@lists.kamailio.org Enviados: Jueves, 25 de Junio de 2009 13:25:18 GMT +01:00 Amsterdam / Berlín / Berna / Roma / Estocolmo / Viena Asunto: Re: [SR-Users-ES] No Audio con clientes detras de una NAT, el audio funciona con clientes que usan IPs publicas (Estoy utilizando rtpproxy)
El Jueves, 25 de Junio de 2009, Iñaki Baz Castillo escribió:
El Jueves, 25 de Junio de 2009, rubenrojas - Trc.es escribió:
# Caller NAT detection route /* uncomment the whole following route for enabling Caller NAT Detection */ route[4]{ force_rport(); if (nat_uac_test("19")) { if (method=="REGISTER") { fix_nated_register(); } else { fix_nated_contact(); } setflag(5); } return; }
Lo anterior NO se está ejecutando. Fíjate que el Contact del 200 Ok llega con la IP provada al llamante, por lo que el ACK que envía llega al proxy con el RURI conteniendo una IP privada del llamado, así que el proxy ruta el ACK a la IP privada (que obiviamente no llega). Por eso no oyes audio, porque la negociación del INVITE no acaba (no llega el ACK al llamado, y por eso hay tantas retransmissiones del 200 OK que no pareces haber observado).
Perdona, lo de arriba sí se está ejecutando (el Contact del INVITE cambia). Lo que no cambia es el de la respuesta, o sea, no se ejecuta esto:
onreply_route[1] { xdbg("incoming reply\n");
if ((isflagset(5) || isbflagset(6)) && status=~"(183)|(2[0-9][0-9])") { force_rtp_proxy(); } if (isbflagset(6)) { fix_nated_contact(); } }
Lo que no sé es porqué no se ejecuta puesto que tienes puesto en t_onreply("1") en route[1]. Eso tendrás que descubrirlo a base de poner "xlog" para ver si se están eejcutando los bloques o no. Nadie garantiza que el config file que viene por defecto sea 100% correcto.
El Jueves, 25 de Junio de 2009, rubenrojas - Trc.es escribió:
por lo que veo si hace el force_rtp_proxy() pero no hace nunca el fix_nated_contact() en onreply_route
Sí, como dije el problema no es el SDP de las respuestas (la IP y puerto se ven claramente modificados por el proxy) sino en el Contact.
Pues te toca investigar lo mismo pero con el fix_nated_contact (añade xlogs a porrillo). Tal vez has descubierto un bug en el config por defecto de Kamailio.
Este es el fix adecuado para colocar en el kamailio.cfg qu eviene por defecto
en el main route en la sección de initial request hay que cambiar esta seccion: if (is_method("REGISTER")) { if (!save("location")) { sl_reply_error(); }
exit; }
por esta: if (is_method("REGISTER")) { if (isflagset(5)) { setbflag(6); }
if (!save("location")) { sl_reply_error(); }
exit; }
y dejar el onreply_route tal y como viene por defecto, ya no se perdera el flag(6) y se ejecutara el fix_nated_contact() del onreply_route
espero que les sirva a otros, seria bueno agregar esto al kamailio.cfg que viene por defecto
extiendo las gracias a la lista en ingles de kamailio por ayudarnos a conseguir el fix
----- Mensaje original ----- De: "Iñaki Baz Castillo" ibc@aliax.net Para: users-es@lists.kamailio.org Enviados: Jueves, 25 de Junio de 2009 13:44:55 GMT +01:00 Amsterdam / Berlín / Berna / Roma / Estocolmo / Viena Asunto: Re: [SR-Users-ES] No Audio con clientes detras de una NAT, el audio funciona con clientes que usan IPs publicas (Estoy utilizando rtpproxy)
El Jueves, 25 de Junio de 2009, rubenrojas - Trc.es escribió:
por lo que veo si hace el force_rtp_proxy() pero no hace nunca el fix_nated_contact() en onreply_route
Sí, como dije el problema no es el SDP de las respuestas (la IP y puerto se ven claramente modificados por el proxy) sino en el Contact.
Pues te toca investigar lo mismo pero con el fix_nated_contact (añade xlogs a porrillo). Tal vez has descubierto un bug en el config por defecto de Kamailio.
El 1 de julio de 2009 09:03, rubenrojas - Trc.esrubenrojas@trc.es escribió:
Este es el fix adecuado para colocar en el kamailio.cfg qu eviene por defecto
en el main route en la sección de initial request hay que cambiar esta seccion: if (is_method("REGISTER")) { if (!save("location")) { sl_reply_error(); }
exit; }
por esta: if (is_method("REGISTER")) { if (isflagset(5)) { setbflag(6); }
if (!save("location")) { sl_reply_error(); }
exit; }
y dejar el onreply_route tal y como viene por defecto, ya no se perdera el flag(6) y se ejecutara el fix_nated_contact() del onreply_route
espero que les sirva a otros, seria bueno agregar esto al kamailio.cfg que viene por defecto
extiendo las gracias a la lista en ingles de kamailio por ayudarnos a conseguir el fix
Hecho, muchas gracias: http://openser.svn.sourceforge.net/viewvc/openser?view=rev&revision=5887
sr-users-es@lists.kamailio.org