00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "sr_module.h"
00036 #include "dprint.h"
00037 #include "parser/msg_parser.h"
00038 #include "flags.h"
00039
00040
00041
00042 int setflag( struct sip_msg* msg, flag_t flag ) {
00043 msg->flags |= 1 << flag;
00044 return 1;
00045 }
00046
00047 int resetflag( struct sip_msg* msg, flag_t flag ) {
00048 msg->flags &= ~ (1 << flag);
00049 return 1;
00050 }
00051
00052 int isflagset( struct sip_msg* msg, flag_t flag ) {
00053 return (msg->flags & (1<<flag)) ? 1 : -1;
00054 }
00055
00056 int flag_in_range( flag_t flag ) {
00057 if ( flag > MAX_FLAG ) {
00058 LM_ERR("message flag (%d) must be in range %d..%d\n",
00059 flag, 1, MAX_FLAG );
00060 return 0;
00061 }
00062 return 1;
00063 }
00064
00065 int flag_idx2mask(int *flag)
00066 {
00067 if (*flag<0) {
00068 *flag = 0;
00069 } else if (*flag>(int)MAX_FLAG) {
00070 LM_ERR("flag %d out of range\n",*flag);
00071 return -1;
00072 } else {
00073 *flag = 1<<(*flag);
00074 }
00075 return 0;
00076 }
00077
00078
00079
00080
00081
00082 static unsigned int sflags = 0;
00083
00084 unsigned int fixup_flag(unsigned int idx)
00085 {
00086 if (idx>MAX_FLAG) {
00087 LM_ERR("flag (%d) out of range %d..%d\n",
00088 idx, 0, MAX_FLAG );
00089 return 0;
00090 }
00091 return (1<<idx);
00092 }
00093
00094 int setsflagsval( unsigned int val )
00095 {
00096 sflags = val;
00097 return 1;
00098 }
00099
00100 int setsflag( unsigned int mask )
00101 {
00102 sflags |= mask;
00103 return 1;
00104 }
00105
00106 int resetsflag( unsigned int mask )
00107 {
00108 sflags &= ~ mask;
00109 return 1;
00110 }
00111
00112 int issflagset( unsigned int mask )
00113 {
00114 return ( sflags & mask) ? 1 : -1;
00115 }
00116
00117 unsigned int getsflags(void)
00118 {
00119 return sflags;
00120 }
00121
00122