diff --git a/debian/patches/sipwise/add_pv_headers_module.patch b/debian/patches/sipwise/add_pv_headers_module.patch index 8ca15d2cd..39f217014 100644 --- a/debian/patches/sipwise/add_pv_headers_module.patch +++ b/debian/patches/sipwise/add_pv_headers_module.patch @@ -481,7 +481,7 @@ + --- /dev/null +++ b/src/modules/pv_headers/pv_headers.c -@@ -0,0 +1,1806 @@ +@@ -0,0 +1,1810 @@ +/* + * pv_headers + * @@ -713,11 +713,13 @@ + char hvals[header_name_size][header_value_size]; + int idx = 0, d_size = 0; + str val_part = STR_NULL; ++ int br_idx; + -+ if (isbflagset(0, FL_PV_HDRS_COLLECTED) == 1 && -+ isflagset(msg, FL_PV_HDRS_COLLECTED) == 1) { -+ LM_ERR("headers are already collected\n"); -+ return -1; ++ pv_get_branch_index(msg, &br_idx); ++ ++ if (isbflagset(br_idx, FL_PV_HDRS_COLLECTED) == 1) { ++ LM_ERR("headers are already collected\n"); ++ return -1; + } + + if (parse_headers(msg, HDR_EOH_F, 0) < 0) { @@ -764,8 +766,7 @@ + pv_str_free(&name); + pv_str_free(&val); + -+ setbflag(0, FL_PV_HDRS_COLLECTED); -+ setflag(msg, FL_PV_HDRS_COLLECTED); ++ setbflag(br_idx, FL_PV_HDRS_COLLECTED); + + return 1; + @@ -786,10 +787,11 @@ + str br_xname = STR_NULL; + int br_idx; + -+ if (isbflagset(0, FL_PV_HDRS_APPLIED) == 1 && -+ isflagset(msg, FL_PV_HDRS_APPLIED) == 1) { -+ LM_ERR("headers are already applied\n"); -+ return -1; ++ pv_get_branch_index(msg, &br_idx); ++ ++ if (isbflagset(br_idx, FL_PV_HDRS_APPLIED) == 1) { ++ LM_ERR("headers are already applied\n"); ++ return -1; + } + + if (parse_headers(msg, HDR_EOH_F, 0) < 0) { @@ -801,7 +803,6 @@ + if (pv_str_new(&uri, header_value_size) < 0) goto err; + if (pv_str_new(&br_xname, header_value_size) < 0) goto err; + -+ pv_get_branch_index(msg, &br_idx); + pv_get_branch_xname(msg, &xavp_name, &br_xname); + + if ((xavp = xavp_get(&br_xname, NULL)) == NULL && @@ -911,13 +912,14 @@ + } + } while ((sub = sub->next) != NULL); + ++ if (br_idx > 0) ++ setbflag(br_idx, FL_PV_HDRS_APPLIED); ++ + pv_str_free(&display); + pv_str_free(&uri); + pv_str_free(&br_xname); + pv_str_hash_free(&rm_hdrs); + -+ setbflag(0, FL_PV_HDRS_APPLIED); -+ setflag(msg, FL_PV_HDRS_APPLIED); + + return 1; + @@ -932,20 +934,20 @@ +int pv_reset_headers(struct sip_msg *msg, char *_s1, char *_s2) +{ + str br_xname = STR_NULL; ++ int br_idx; + + if (pv_str_new(&br_xname, header_name_size) < 0) + return -1; + ++ pv_get_branch_index(msg, &br_idx); + pv_get_branch_xname(msg, &xavp_name, &br_xname); + + pv_free_xavp(&br_xname); + pv_get_branch_xname(msg, &xavp_parsed_xname, &br_xname); + pv_free_xavp(&br_xname); + -+ resetbflag(0, FL_PV_HDRS_COLLECTED); -+ resetflag(msg, FL_PV_HDRS_COLLECTED); -+ resetbflag(0, FL_PV_HDRS_APPLIED); -+ resetflag(msg, FL_PV_HDRS_APPLIED); ++ resetbflag(br_idx, FL_PV_HDRS_COLLECTED); ++ resetbflag(br_idx, FL_PV_HDRS_APPLIED); + + pv_str_free(&br_xname); + @@ -2212,13 +2214,15 @@ +{ + qvalue_t q; + int br_len; -+ str ruid; ++ str ruid = STR_NULL; + + *br_idx = 0; + while ((get_branch(*br_idx,&br_len,&q,0,0,0,0,&ruid,0,0))) { -+ if (strcmp(msg->ruid.s, ruid.s) == 0) -+ break; + (*br_idx)++; ++ if (br_len == 0 || msg->ruid.s == NULL || ruid.s == NULL || ++ strcmp(msg->ruid.s, ruid.s) == 0) { ++ break; ++ } + } + + return 1;