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.