@ -1,3 +1,14 @@
From: Sipwise Development Team <support@sipwise.com>
Date: Fri, 29 Nov 2019 11:23:36 +0100
Subject: fix_error_in_cfgt_module
Change-Id: I5deab153a0c17117be1d2f4de8ca84f9134a5d00
---
src/modules/cfgt/cfgt_int.c | 101 ++++++++++++++++++++++++++++++++++++++++----
1 file changed, 93 insertions(+), 8 deletions(-)
diff --git a/src/modules/cfgt/cfgt_int.c b/src/modules/cfgt/cfgt_int.c
index 0e3bfec..971222f 100644
--- a/src/modules/cfgt/cfgt_int.c
+++ b/src/modules/cfgt/cfgt_int.c
@@ -29,6 +29,11 @@
@ -20,7 +31,7 @@
static int shm_str_hash_alloc(struct str_hash_table *ht, int size)
{
@@ -187,7 +193,7 @@ int _cfgt_get_hdr_helper(struct sip_msg
@@ -187,7 +193,7 @@ int _cfgt_get_hdr_helper(struct sip_msg *msg, str *res, int mode)
return STR_EQ(tmp, *res);
}
}
@ -29,7 +40,7 @@
}
int _cfgt_get_hdr(struct sip_msg *msg, str *res)
@@ -394,15 +400,21 @@ int _cfgt_set_dump(struct sip_msg *msg,
@@ -394,15 +400,21 @@ int _cfgt_set_dump(struct sip_msg *msg, cfgt_node_p node, str *flow)
if(node == NULL || flow == NULL)
return -1;
@ -51,23 +62,23 @@
f = srjson_CreateObject(&node->jdoc);
if(f == NULL) {
LM_ERR("cannot create json object\n");
@@ -5 45,6 +557,31 @@ int _cfgt_node_get_flowname(cfgt_str_lis
@@ -5 31,6 +543,31 @@ int _cfgt_node_get_flowname(cfgt_str_list_p route, int *indx, str *dest)
return 0;
}
+int _cfgt_parse_msg(sip_msg_t *msg)
+{
+ if (parse_msg(msg->buf, msg->len, msg) !=0) {
+ if (parse_msg(msg->buf, msg->len, msg) != 0) {
+ LM_ERR("outbuf buffer parsing failed!");
+ return 1;
+ }
+
+ if(msg->first_line.type ==SIP_REQUEST) {
+ if(msg->first_line.type == SIP_REQUEST) {
+ if(!IS_SIP(msg)) {
+ LM_DBG("non sip request message\n");
+ return 1;
+ }
+ } else if(msg->first_line.type ==SIP_REPLY) {
+ } else if(msg->first_line.type == SIP_REPLY) {
+ if(!IS_SIP_REPLY(msg)) {
+ LM_DBG("non sip reply message\n");
+ return 1;
@ -83,7 +94,7 @@
int cfgt_process_route(struct sip_msg *msg, struct action *a)
{
str routename;
@@ -5 60,6 +597,10 @@ int cfgt_process_route(struct sip_msg *m
@@ -5 46,6 +583,10 @@ int cfgt_process_route(struct sip_msg *msg, struct action *a)
return 0;
}
LM_DBG("route from action:[%s]\n", a->rname);
@ -94,7 +105,7 @@
routename.s = a->rname;
routename.len = strlen(a->rname);
switch(_cfgt_add_routename(_cfgt_node, a, &routename)) {
@@ - 605,22 +646,33 @@ int cfgt_process_route(struct sip_msg *m
@@ - 591,22 +632,35 @@ int cfgt_process_route(struct sip_msg *msg, struct action *a)
/*
TODO:
@ -115,9 +126,11 @@
+ memset(&msg, 0, sizeof(sip_msg_t));
+ msg.buf = buf->s;
+ msg.len = buf->len;
+ if(_cfgt_parse_msg(&msg) !=0) {
+ if(_cfgt_parse_msg(&msg) != 0) {
+ LM_DBG("set 'not_sip' flag\n");
+ not_sip = 1;
+ } else {
+ not_sip = 0;
+ }
+
if(_cfgt_node) {
@ -130,7 +143,7 @@
_cfgt_node = cfgt_create_node(NULL);
if(_cfgt_node) {
jobj = srjson_CreateStr(&_cfgt_node->jdoc, buf->s, buf->len);
@@ -6 38,14 +690 ,23 @@ int cfgt_msgin(sr_event_param_t *evp)
@@ -6 24,14 +678 ,23 @@ int cfgt_msgin(sr_event_param_t *evp)
int cfgt_pre(struct sip_msg *msg, unsigned int flags, void *bar)
{
str unknown = {"unknown", 7};
@ -158,7 +171,7 @@
pkg_str_dup(&_cfgt_node->uuid, &unknown);
}
return _cfgt_get_uuid_id(_cfgt_node);
@@ -6 75,7 +736,9 @@ int cfgt_post(struct sip_msg *msg, unsig
@@ -6 61,7 +724,9 @@ int cfgt_post(struct sip_msg *msg, unsigned int flags, void *bar)
if(_cfgt_node) {
LM_DBG("dump last flow\n");
@ -169,7 +182,7 @@
LM_ERR("cannot create flowname\n");
else
_cfgt_set_dump(msg, _cfgt_node, &flowname);
@@ -6 89,11 +752,22 @@ int cfgt_post(struct sip_msg *msg, unsig
@@ -6 75,11 +740,24 @@ int cfgt_post(struct sip_msg *msg, unsigned int flags, void *bar)
int cfgt_msgout(sr_event_param_t *evp)
{
srjson_t *jobj;
@ -184,21 +197,23 @@
+ memset(&msg, 0, sizeof(sip_msg_t));
+ msg.buf = buf->s;
+ msg.len = buf->len;
+ if(_cfgt_parse_msg(&msg) !=0) {
+ if(_cfgt_parse_msg(&msg) != 0) {
+ LM_DBG("set 'not_sip' flag\n");
+ not_sip = 1;
+ } else {
+ not_sip = 0;
+ }
+
if(_cfgt_node) {
jobj = srjson_CreateStr(&_cfgt_node->jdoc, buf->s, buf->len);
if(jobj == NULL) {
@@ - 703,6 +77 7,13 @@ int cfgt_msgout(sr_event_param_t *evp)
@@ - 689,6 +76 7,13 @@ int cfgt_msgout(sr_event_param_t *evp)
srjson_AddItemToArray(&_cfgt_node->jdoc, _cfgt_node->out, jobj);
return 0;
}
+
+ // Skip OPTION messages internally generated
+ if(buf->len >7 && strcasestr(buf->s, "OPTIONS")) {
+ if(buf->len > 7 && strcasestr(buf->s, "OPTIONS")) {
+ LM_DBG("OPTIONS message internally generated, skip it\n");
+ return 0;
+ }