Hi Hennig, thanks for the review so far.
Q: "you want to unify the flag manipulation and also fix some bugs this way?" A: Correct, to fix the bug we need to change inconsitant flag manipulation creating the bug
Q: This should be identically, according to the definition of isflagset. I don't see any big advantage of one format to the other, or I am wrong? A: They are not identical :
The first one is expecting an input we the integer contain the bit mask `if((type==1) && (msg->flags&(e->missed_flag))) {` will with with the input of : 1,2,4,8,...,4294967296
The second one is expecting an input where integer contain the bit position `if((type==1) && isflagset(msg, e->missed_flag) == 1) {` will do the bit shifting and will work with the input : 1,2,3,..,32
``` int isflagset( struct sip_msg* msg, flag_t flag ) { return (msg->flags & (1<<flag)) ? 1 : -1; // << notice the bit shifting } ```
`resetflag` and `setflag` are also doing the bit shifthing, seems like at one point someone got confused and introduce a mix which endedup doing resetflag on an alredy bit shifted input. I guess this is also why acc_mod is not doing bit shifting on the module param while acc_diameter, acc_raduis and acc_json are (I am changing this in the patch)