El Domingo, 17 de Febrero de 2008, Raúl Alexis Betancor Santana escribió:
El Sunday 17 February 2008 15:20:45 Iñaki Baz Castillo
escribió:
No, podrías usar un único t_on_reply en el cual
miras haces:
on_replyroute(1) {
ifbflagset(NAT) {
use_media_proxy();
...
}
}
No funciona, lo he comprobado, puesto que si solo UNO de los branches tiene
el bflag(NAT) activado .. ese if será TRUE para todos los branches.
Bien, vale más una captura que mil palabras XDDD
He registrado un usuario tras NAT y sin NAT. He puesto más o menos este código:
route {
t_on_branch("ON_BRANCH_DEFAULT");
t_on_reply("ON_REPLY_DEFAULT");
...
lookup("location");
t_relay();
}
branch_route[ON_BRANCH_DEFAULT] {
xlog("*********************** branch_route[ON_BRANCH_DEFAULT] \n");
xlog("----------------------- branch con RURI = $ru \n");
xlog("----------------------- $rr \n");
if (isbflagset(BFLAG_NAT_CALLED))
xlog("----------------------- bflag(BFLAG_NAT_CALLED) activo \n");
}
onreply_route[ON_REPLY_DEFAULT] {
xlog("*********************** onreply_route[ON_REPLY_DEFAULT] \n");
xlog("----------------------- branch con RURI = $ru \n");
xlog("----------------------- $rr \n");
if (isbflagset(BFLAG_NAT_CALLED))
xlog("----------------------- bflag(BFLAG_NAT_CALLED) activo \n");
}
Como ves es exactamente de lo que estamos hablando.
Ahora llamo a ese usuario y estos son los xlogs que veo:
*********************** onreply_route[1] desde CONTACTO_CON_NAT
----------------------- branch con RURI = <null>
-----------------------Trying
----------------------- bflag(6) activo
*********************** onreply_route[1] desde CONTACTO_SIN_NAT
----------------------- branch con RURI = <null>
----------------------- Trying
*********************** onreply_route[1] desde CONTACTO_SIN_NAT
----------------------- branch con RURI = <null>
----------------------- Ringing
*********************** onreply_route[1] desde CONTACTO_CON_NAT
----------------------- branch con RURI = <null>
----------------------- Ringing
----------------------- bflag(6) activo
Como ves la función "isbflagset(XX)" sólo me devuelve true en onreply_route y en
branch_route para los branches con
dicho bflag activado trasel lookup(location).
http://66.102.9.104/search?q=cache:7_2_51k69wcJ:openser.org/pipermail/users
/2006-July/005982.html+t_on_reply+inside+branch_route&hl=es&ct=clnk&cd=1&cli
ent=iceweasel-a
No, lo que ese hilo dice es que si durante el route inicial haces "setbflag(X)"
entonces ese bflag se activará
para todos los branches que se creen, pero recuerda que TODAVIA no existen esos branches
(existirán
después de hacer t_relay).
Ese comportamiento lo he visto usarse para el NAT de la siguiente forma:
- Un usuario "pepe"está registrado tras NAT y sin NAT.
- "carlos" le llama.
- Como "carlos" está tras NAT (lo cual se detecta en el route inicial) se activa
el bflag(NAT). Este bflag
se activará por tanto en todos los branches que se creen.
- A su vez ese bflag se activaría tras el lookup para el contacto "pepe" sin
NAT, pero
como carlos está tras NAT el escenario es que hay que hacer el tratamiento de NAT aunque
"pepe"
esté con IP pública.
En caso de que "carlos" estuviese con IP pública, el bflag(NAT) sólo se
activaría para el contacto nateado.
A mí de todas formas no me gusta ese planteamiento y lo hago diferente, pero lo he visto
en mucho ejemplos.
Saludos.
--
Iñaki Baz Castillo