From 7d730154e5b76e5309585d0ad466ae87926a21fc Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Mon, 5 Dec 2022 12:46:17 +0100 Subject: [PATCH] MT#55968 pv_headers: fix t_resume scenario * reset _branch value Change-Id: Id55b7b652f09c7fd444b9c4f9a586df7c96ac0c4 (cherry picked from commit ab29be6405954b921694fe537d7d47b8e434239c) --- debian/patches/series | 1 + .../pv_headers-fix-t_resume-scenario.patch | 109 ++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 debian/patches/sipwise/pv_headers-fix-t_resume-scenario.patch diff --git a/debian/patches/series b/debian/patches/series index 01bb5a3f4..44ea497e0 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -68,6 +68,7 @@ upstream/pv_headers-use-tm.t_find-API.patch upstream/tm-added-t_unset-intermodule-API-function.patch upstream/pv_headers-use-t_unset-based-on-vref-instead-of-rese.patch sipwise/pv_headers-rework-pvh_remove_header_param-take-two.patch +sipwise/pv_headers-fix-t_resume-scenario.patch # ### Don't just put stuff in any order ### use gbp pq import/export tooling to help maintain patches diff --git a/debian/patches/sipwise/pv_headers-fix-t_resume-scenario.patch b/debian/patches/sipwise/pv_headers-fix-t_resume-scenario.patch new file mode 100644 index 000000000..36f597873 --- /dev/null +++ b/debian/patches/sipwise/pv_headers-fix-t_resume-scenario.patch @@ -0,0 +1,109 @@ +From: Victor Seva +Date: Mon, 5 Dec 2022 12:43:11 +0100 +Subject: pv_headers: fix t_resume scenario + +--- + src/modules/pv_headers/pv_headers.c | 49 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +diff --git a/src/modules/pv_headers/pv_headers.c b/src/modules/pv_headers/pv_headers.c +index fd9a619..5afe2dc 100644 +--- a/src/modules/pv_headers/pv_headers.c ++++ b/src/modules/pv_headers/pv_headers.c +@@ -65,6 +65,7 @@ static void mod_destroy(void); + static int mod_init(void); + + static void handle_tm_t(tm_cell_t *t, int type, struct tmcb_params *params); ++static int handle_msg_failed_cb(struct sip_msg *msg, unsigned int flags, void *cb); + static int handle_msg_cb(struct sip_msg *msg, unsigned int flags, void *cb); + static int handle_msg_branch_cb( + struct sip_msg *msg, unsigned int flags, void *cb); +@@ -395,6 +396,12 @@ int mod_init(void) + LM_ERR("cannot register PRE_SCRIPT_CB ONREPLY_CB callbacks\n"); + return -1; + } ++ if(register_script_cb( ++ handle_msg_failed_cb, PRE_SCRIPT_CB | FAILURE_CB, 0) ++ < 0) { ++ LM_ERR("cannot register PRE_SCRIPT_CB FAILURE_CB callbacks\n"); ++ return -1; ++ } + } + + pvh_str_hash_init(&skip_headers, &skip_headers_param, "skip_headers"); +@@ -472,6 +479,29 @@ static inline char *tm_type_to_string(int type) + return "UNKNOWN"; + } + ++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"); ++} ++ + void handle_tm_t(tm_cell_t *t, int type, struct tmcb_params *params) + { + struct sip_msg *msg = NULL; +@@ -501,11 +531,25 @@ void handle_tm_t(tm_cell_t *t, int type, struct tmcb_params *params) + return; + } + ++int handle_msg_failed_cb(struct sip_msg *msg, unsigned int flags, void *cb) ++{ ++ print_cb_flags(flags); ++ ++ if(pvh_parse_msg(msg) != 0) ++ return 1; ++ ++ _branch = 0; ++ LM_DBG("msg:%p set branch:%d\n", msg, _branch); ++ return 1; ++} ++ + static int msg_cbs = + TMCB_REQUEST_FWDED | TMCB_RESPONSE_FWDED | TMCB_ON_BRANCH_FAILURE; + + int handle_msg_cb(struct sip_msg *msg, unsigned int flags, void *cb) + { ++ print_cb_flags(flags); ++ + if(pvh_parse_msg(msg) != 0) + return 1; + +@@ -524,6 +568,7 @@ int handle_msg_branch_cb(struct sip_msg *msg, unsigned int flags, void *cb) + { + + LM_DBG("msg:%p previous branch:%d\n", msg, _branch); ++ print_cb_flags(flags); + + if(flags & PRE_SCRIPT_CB) { + pvh_get_branch_index(msg, &_branch); +@@ -543,7 +588,11 @@ int handle_msg_reply_cb(struct sip_msg *msg, unsigned int flags, void *cb) + + if(pvh_parse_msg(msg) != 0) + return 1; ++ if(msg == FAKED_REPLY) { ++ LM_DBG("FAKED_REPLY\n"); ++ } + LM_DBG("msg:%p previous branch:%d\n", msg, _branch); ++ print_cb_flags(flags); + + t = tmb.t_find(msg, &_branch, &vref); + if(t != NULL && t != T_UNDEFINED) {