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.
--
Iñaki Baz Castillo