Cuando se utiliza t_on_branch y desde un INVITE se generan varios branches porque hay varios contacs para un mismo AoR, se pasa por el bloque branch_route especificado en el t_on_branch y desde ahi se puede usar los otros bloques route que se hallan definido, hasta aquí todo bien.
Pero en cuestión de los flags, si en un route(n) se comprobaba un flag concreto con isflagset, ¿esa comprobación se hace sobre el request original (branch[0]) ó sobre cada uno de los branches que pasan por ahi?
El Sábado, 16 de Febrero de 2008, Raúl Alexis Betancor Santana escribió:
Pero en cuestión de los flags, si en un route(n) se comprobaba un flag concreto con isflagset, ¿esa comprobación se hace sobre el request original (branch[0]) ó sobre cada uno de los branches que pasan por ahi?
Depende de si haces la comprobación sobre un flag (isflagset) o sobre un bflag (isbflagset).
En el primer caso (flag) es para todos los branches a la vez, es decir, si activas un flag en el route inicial y luego lo testeas en cualquier on_branch_route lo verás activado. Incluso si te da por cambiarlo en un on_branch_route se cambiará para todos.
En cambio los bflags son independientes para cada branch que se cree, pero hay que tener cuidado:
Si estando en un "route" haces un lookup y te devuelve dos contactos, uno tras NAT y otro no, no se te ocurra hacer "isbflagset(FLAG_NATTED_CONTACT)" puesto que es una lotería (te dará sí o no dependiendo de si el primer contacto de la tabla está tras NAT o no. De igual forma si activas un bflag en el route inicial ese bflag se aplicará a todos los branches que crees, pero luego en el tratamiento individual de cada uno lo puedes cambiar.
En definitiva, las funciones "setbflag" y "isbflagset" sólo usarlas en un on_branch_route o en routes llamados desde él.
El Saturday 16 February 2008 14:35:42 Iñaki Baz Castillo escribió:
Si estando en un "route" haces un lookup y te devuelve dos contactos, uno tras NAT y otro no, no se te ocurra hacer "isbflagset(FLAG_NATTED_CONTACT)" puesto que es una lotería (te dará sí o no dependiendo de si el primer contacto de la tabla está tras NAT o no. De igual forma si activas un bflag en el route inicial ese bflag se aplicará a todos los branches que crees, pero luego en el tratamiento individual de cada uno lo puedes cambiar.
Es que precisamente estoy teniendo ese problema.
En un route hago t_on_branch(2) y luego lookup, como hay varios contactos, algunos tras de nat, eso llega a mi branch_route(2), desde donde yo llamaba a mi route(X) que se encargaba del outbound routing, pero se me ha montado un pollo bueno, porque ahora no fixea siempre las salidas y algunos contactos que están tras de nat se les aplica y a otros nó.
En definitiva, las funciones "setbflag" y "isbflagset" sólo usarlas en un on_branch_route o en routes llamados desde él.
Ok.
sr-users-es@lists.kamailio.org