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

Raúl Alexis Betancor Santana rabs at dimension-virtual.com
Sun Feb 17 02:44:44 CET 2008


El Saturday 16 February 2008 22:58:33 Iñaki Baz Castillo escribió:
> El Sábado, 16 de Febrero de 2008, Raúl Alexis Betancor Santana escribió:
> > Me contesto yo mismo ..., parece haber un bug desde el año 2006 y no se
> > puede usar t_on_reply "per branch", pues bendita putada ... menos mal que
> > los flags si se respetan.
>
> Yo no sabía que eso era un bug, siempre he pensado que es lo lógico. Me
> explico:
>
> Usar t_on_reply, t_on_branch o t_on_failure implica que una vez creada la
> transacción (t_relay) cada branch pasará por onbranch_route, las respuestas
> pasarán, individualmente claro, por onreply_route, y si el resultado final
> (la mejor de las respuestas) es un error ([3456]XX), entonces se puede
> haceralgo al respecto en onfailure_route (como por ejemplo crear un nuevo
> branch con "append_branch" y poner la URI al voicemail...).
>
> Es decir, sólo tiene sentido poner t_on_reply antes de un t_relay, pero da
> igual que se ponga antes o después de generar los branches. Ejemplo:

No, tiene mucho sentido poder decidir a que onreply_route va cada branch ... y 
que se pudiese fijar los branchflags de un branch concreto sin tener que 
especificarlo en setbflag, me explico con un ejemplo:

branch_route[2]
{
  if(isbflagset(NAT)) # Ver nota2
  {
    t_on_reply(2);  # Ver nota1
   }
  else
  {
    t_on_reply(1);
  }
}

Nota1: quiero poder tratar los replies de NAT de forma diferente, con el 
código actual no se puede y has de volver a hacer los nat_uac_test en un 
ÚNICO onreply_route

Nota2: esto peta que da gusto, porque solo comprueba si para TODOS los 
branches esta seteado el flag, si quieres hacer una comprobación individual 
por branch, simplemente no puedes, porque nisiquiera soporta la sintaxis 
isbflagset($T_branch_idx,NAT), que para mí entender debería de ser el 
comportamiento implícito de isbflagset dentro de un branch_route, porque si 
estás tratando cada branch por separado, ¿que demonios me importa el flag 
global de todos los branches?, me importa el del branch que estoy tratando.

> Esto:
>
>   t_on_reply("2");
>   lookup("locaiont");
>   t_relay;
>
> es lo mismo que est:
>
>   lookup("locaiont");
>   t_on_reply("2");
>   t_relay;

Esto sí,  pero desde que pones un t_on_brach antes del lookup .. se jodió el 
invento, no funciona el t_on_reply y has de usar el onreply_route[1] PARA 
TODO lo que se genere desde un branch.

> Lo que tú pretendes es que, además, cada branch tenga un onreply_route
> distinto, cosa que yo nunca había pensado que se podía hacer, ¿puedes
> indicarme el bug que has visto al respecto?

Si y no lo veo tan raro, no hablo de onreply_route dinámicos por branch ni 
cosas de esas ... simplemente poder decirle en función del estado de 
determinados flags, que las respuestas de ese branch las trata una ruta 
concreta, si se puede hacer cuando no se usa branching, ¿por qué se pierde 
esa funcionalidad cuando se usa branching?, no le veo una explicación lógica, 
aunque puede que la tenga.

El bug es este:

http://sourceforge.net/tracker/index.php?func=detail&aid=1530057&group_id=139143&atid=743020

No es exactamente este, pero a partir de él encontré una discursión en una 
lista de Ser/OpenSer sobre que no se podía hacer t_on_reply en branch_route 
ni en ningún request_route que se llame desde el branch_route 
correspondiente.


-- 
Saludos.

Raúl Alexis Betancor Santana
Dimensión Virtual S.L.




More information about the Users-es mailing list