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.