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

Iñaki Baz Castillo ibc at aliax.net
Sun Feb 17 16:20:45 CET 2008


El Domingo, 17 de Febrero de 2008, Raúl Alexis Betancor Santana escribió:
> 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

Sí sí, claro que tiene sentido. Me refería a que yo pensaba que no se podía 
hacer a nivel de 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

No, podrías usar un único t_on_reply en el cual miras haces:

on_replyroute(1) {
  ifbflagset(NAT) {
      use_media_proxy();
      ...
  }
}

Recuerda que un bflag persiste durante toda la transacción de su branch, lo 
cual incluye las respuestas. O sea, si envías un INVITE en cuyo branch tenía 
activado el bflag(NAT) verás ese bflag activo en el on_replyroute 
correspondiente.


>
> 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.

No te entiendo. Si haces:

 branch_route[2]
{
   if(isbflagset(NAT))

Sencillamente comprobarás para cada branch si está activo ese bflag, no sé a 
qué te refieres con "solo comprueba si para TODOS los branches esta seteado 
el flag". Por ejemplo:

branch_route[2]
{
   if(isbflagset(NAT)) {
       xlog("bflag(NAT) activado para este branch con RURI $ru \n");
   }
}

Ese xlog sólo lo verás para los branches pertenecientes a localizaciones del 
usuario tras NAT.


-- 
Iñaki Baz Castillo




More information about the Users-es mailing list