Skip to content

Commit

Permalink
pv_headers: fix t_resume scenario
Browse files Browse the repository at this point in the history
(cherry picked from commit af1d9c1)
(cherry picked from commit 0b52ac6)
  • Loading branch information
linuxmaniac committed Dec 6, 2022
1 parent fbb5e7a commit 6816f80
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions src/modules/pv_headers/pv_headers.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -315,6 +316,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");
Expand Down Expand Up @@ -392,6 +399,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;
Expand Down Expand Up @@ -421,11 +451,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;

Expand All @@ -444,6 +488,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);
Expand All @@ -462,7 +507,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);

if(tmb.t_check(msg, &_branch) == -1) {
LM_ERR("failed find UAC branch\n");
Expand Down

0 comments on commit 6816f80

Please sign in to comment.