Module: kamailio
Branch: master
Commit: 0aae63818588952280e901ea2c529cb936ce5cf6
URL:
https://github.com/kamailio/kamailio/commit/0aae63818588952280e901ea2c529cb…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2018-03-14T13:00:23+01:00
core: added xflags field to sip_msg_t
- holds extended flags - 64 new flags in addition to the old 32 flags
---
Modified: src/core/flags.c
Modified: src/core/flags.h
Modified: src/core/parser/msg_parser.h
---
Diff:
https://github.com/kamailio/kamailio/commit/0aae63818588952280e901ea2c529cb…
Patch:
https://github.com/kamailio/kamailio/commit/0aae63818588952280e901ea2c529cb…
---
diff --git a/src/core/flags.c b/src/core/flags.c
index 5dbdd4ffbc..043824895f 100644
--- a/src/core/flags.c
+++ b/src/core/flags.c
@@ -317,5 +317,42 @@ static int fixup_t_flag(void** param, int param_no)
return E_CFG;
}
+/**
+ *
+ */
+int setxflag(struct sip_msg* msg, flag_t flag)
+{
+ uint32_t fi;
+ uint32_t fb;
+ fi = flag / (sizeof(flag_t)*CHAR_BIT);
+ fb = flag % (sizeof(flag_t)*CHAR_BIT);
+ msg->xflags[fi] |= 1 << fb;
+ return 1;
+}
+
+/**
+ *
+ */
+int resetxflag(struct sip_msg* msg, flag_t flag)
+{
+ uint32_t fi;
+ uint32_t fb;
+ fi = flag / (sizeof(flag_t)*CHAR_BIT);
+ fb = flag % (sizeof(flag_t)*CHAR_BIT);
+ msg->xflags[fi] &= ~ (1 << fb);
+ return 1;
+}
+
+/**
+ *
+ */
+int isxflagset(struct sip_msg* msg, flag_t flag)
+{
+ uint32_t fi;
+ uint32_t fb;
+ fi = flag / (sizeof(flag_t)*CHAR_BIT);
+ fb = flag % (sizeof(flag_t)*CHAR_BIT);
+ return (msg->xflags[fi] & (1<<fb)) ? 1 : -1;
+}
#endif
diff --git a/src/core/flags.h b/src/core/flags.h
index 3876082472..e1186dbf79 100644
--- a/src/core/flags.h
+++ b/src/core/flags.h
@@ -34,6 +34,10 @@ enum { FL_WHITE=1, FL_YELLOW, FL_GREEN, FL_RED, FL_BLUE, FL_MAGENTA,
typedef unsigned int flag_t;
+#define KSR_XFLAGS_SIZE 2
+#define KSR_MAX_XFLAG \
+ ((unsigned int)(KSR_XFLAGS_SIZE * sizeof(flag_t) * CHAR_BIT - 1 ))
+
#define MAX_FLAG ((unsigned int)( sizeof(flag_t) * CHAR_BIT - 1 ))
struct sip_msg;
@@ -43,6 +47,10 @@ int resetflag( struct sip_msg* msg, flag_t flag );
int isflagset( struct sip_msg* msg, flag_t flag );
+int setxflag(struct sip_msg* msg, flag_t flag);
+int resetxflag(struct sip_msg* msg, flag_t flag);
+int isxflagset(struct sip_msg* msg, flag_t flag);
+
/* Script flag functions. Script flags are global flags that keep their
* value regardless of the SIP message being processed.
*/
diff --git a/src/core/parser/msg_parser.h b/src/core/parser/msg_parser.h
index 41e6deeb33..9270e0bba9 100644
--- a/src/core/parser/msg_parser.h
+++ b/src/core/parser/msg_parser.h
@@ -359,6 +359,7 @@ typedef struct sip_msg {
to avoid unnecessary calculations */
unsigned int msg_flags; /*!< internal flags used by core */
flag_t flags; /*!< config flags */
+ flag_t xflags[KSR_XFLAGS_SIZE]; /*!< config extended flags */
str set_global_address;
str set_global_port;
struct socket_info* force_send_socket; /*!< force sending on this socket */