[OpenSER-Users-ES] Problema usando t_on_reply desde branch_route

Iñaki Baz Castillo ibc at aliax.net
Sun Feb 17 18:28:32 CET 2008


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




More information about the Users-es mailing list