diff --git a/debian/patches/series b/debian/patches/series index 04deb548f..7adc621bb 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -50,6 +50,7 @@ sipwise/pua_dialoginfo-local_identity_dlg_var.patch sipwise/pua_dialoginfo-use-dlg_api.get_dlg_varval.patch sipwise/dialplan-don-t-stop-loading-rules-on-error.patch sipwise/cfgt-skip_unknown.patch +sipwise/cfgt-skip_duplicate_dump.patch sipwise/db_redis_skip_empty_keys.patch sipwise/db_redis_graceful_scan.patch sipwise/db_redis_sscan.patch diff --git a/debian/patches/sipwise/cfgt-skip_duplicate_dump.patch b/debian/patches/sipwise/cfgt-skip_duplicate_dump.patch new file mode 100644 index 000000000..fec1e7018 --- /dev/null +++ b/debian/patches/sipwise/cfgt-skip_duplicate_dump.patch @@ -0,0 +1,91 @@ +From: Victor Seva +Date: Fri, 17 Mar 2023 16:08:00 +0100 +Subject: cfgt: don't dump same node + +--- + src/modules/cfgt/cfgt_int.c | 41 ++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 40 insertions(+), 1 deletion(-) + +diff --git a/src/modules/cfgt/cfgt_int.c b/src/modules/cfgt/cfgt_int.c +index 4eda949..683b39f 100644 +--- a/src/modules/cfgt/cfgt_int.c ++++ b/src/modules/cfgt/cfgt_int.c +@@ -32,6 +32,7 @@ + #include "../../core/rpc.h" + #include "../../core/rpc_lookup.h" + #include "../../core/parser/msg_parser.h" ++#include "../../core/script_cb.h" + + #include "cfgt_int.h" + #include "cfgt_json.h" +@@ -459,11 +460,25 @@ void _cfgt_print_node(cfgt_node_p node, int json) + + int _cfgt_set_dump(struct sip_msg *msg, cfgt_node_p node, str *flow) + { ++ int len; ++ char v; + srjson_t *f, *vars; + + if(node == NULL || flow == NULL) + return -1; + ++ /* don't generate two same nodes */ ++ if((len = srjson_GetArraySize(&node->jdoc, node->flow)) >= 1) { ++ f = srjson_GetArrayItem(&node->jdoc, node->flow, len - 1); ++ STR_VTOZ(flow->s[flow->len], v); ++ f = srjson_GetObjectItem(&node->jdoc, f, flow->s); ++ STR_ZTOV(flow->s[flow->len], v); ++ if(f != NULL) { ++ LM_DBG("node[%.*s] flow already there\n", flow->len, flow->s); ++ return 0; ++ } ++ } ++ + vars = srjson_CreateObject(&node->jdoc); + if(vars == NULL) { + LM_ERR("cannot create json object\n"); +@@ -762,11 +777,35 @@ int cfgt_msgin(sr_event_param_t *evp) + return -1; + } + ++static inline void print_cb_flags(unsigned int flags) ++{ ++ LM_DBG("flags:"); ++ if(flags & REQUEST_CB) ++ LM_DBG("REQUEST_CB"); ++ if(flags & FAILURE_CB) ++ LM_DBG("FAILURE_CB"); ++ if(flags & ONREPLY_CB) ++ LM_DBG("ONREPLY_CB"); ++ if(flags & BRANCH_CB) ++ LM_DBG("BRANCH_CB"); ++ if(flags & ONSEND_CB) ++ LM_DBG("ONSEND_CB"); ++ if(flags & ERROR_CB) ++ LM_DBG("ERROR_CB"); ++ if(flags & LOCAL_CB) ++ LM_DBG("LOCAL_CB"); ++ if(flags & EVENT_CB) ++ LM_DBG("EVENT_CB"); ++ if(flags & BRANCH_FAILURE_CB) ++ LM_DBG("BRANCH_FAILURE_CB"); ++} ++ + int cfgt_pre(struct sip_msg *msg, unsigned int flags, void *bar) + { + str unknown = {"unknown", 7}; + int get_hdr_result = 0, res; + ++ print_cb_flags(flags); + if(_cfgt_node) { + if(_cfgt_node->msgid == 0) { + LM_DBG("new node\n"); +@@ -811,7 +850,7 @@ int cfgt_pre(struct sip_msg *msg, unsigned int flags, void *bar) + int cfgt_post(struct sip_msg *msg, unsigned int flags, void *bar) + { + str flowname = STR_NULL; +- ++ print_cb_flags(flags); + if(_cfgt_node) { + if(cfgt_skip_unknown && strncmp(_cfgt_node->uuid.s, "unknown", 7) == 0) { + return 1;