Module: kamailio
Branch: 5.4
Commit: eae86ff8bf327b6ed0bcb83ee25c663cb97a02fc
URL:
https://github.com/kamailio/kamailio/commit/eae86ff8bf327b6ed0bcb83ee25c663…
Author: Stefan Mititelu <stefan-cristian.mititelu(a)1and1.ro>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2020-10-23T10:57:59+02:00
textops: fix append_hf function
Before: append_hf adds header after first header occurance
After: append_hf adds header after last header occurance
(cherry picked from commit 4adea97a4f8a9b35273d4d28b0518964abb7f0d8)
---
Modified: src/modules/textops/textops.c
---
Diff:
https://github.com/kamailio/kamailio/commit/eae86ff8bf327b6ed0bcb83ee25c663…
Patch:
https://github.com/kamailio/kamailio/commit/eae86ff8bf327b6ed0bcb83ee25c663…
---
diff --git a/src/modules/textops/textops.c b/src/modules/textops/textops.c
index 6dcbeedb0b..7f11999cc0 100644
--- a/src/modules/textops/textops.c
+++ b/src/modules/textops/textops.c
@@ -3361,7 +3361,7 @@ int add_hf_helper(struct sip_msg* msg, str *str1, str *str2,
gparam_p hfval, int mode, gparam_p hfanc)
{
struct lump* anchor;
- struct hdr_field *hf;
+ struct hdr_field *hf, *append_hf;
char *s;
int len;
str s0;
@@ -3372,6 +3372,7 @@ int add_hf_helper(struct sip_msg* msg, str *str1, str *str2,
}
hf = 0;
+ append_hf = 0;
if(hfanc!=NULL) {
for (hf=msg->headers; hf; hf=hf->next) {
if(hfanc->type==GPARAM_TYPE_INT)
@@ -3384,20 +3385,25 @@ int add_hf_helper(struct sip_msg* msg, str *str1, str *str2,
if (cmp_hdrname_str(&hf->name,&hfanc->v.str)!=0)
continue;
}
- break;
+ if (mode == 0) { /* append */
+ append_hf = hf;
+ continue;
+ } else { /* insert */
+ break;
+ }
}
}
if(mode == 0) { /* append */
- if(hf==0) { /* after last header */
+ if(append_hf==0) { /* after last header */
anchor = anchor_lump(msg, msg->unparsed - msg->buf, 0, 0);
- } else { /* after hf */
- anchor = anchor_lump(msg, hf->name.s + hf->len - msg->buf, 0, 0);
+ } else { /* after last hf */
+ anchor = anchor_lump(msg, append_hf->name.s + append_hf->len - msg->buf, 0,
0);
}
} else { /* insert */
if(hf==0) { /* before first header */
anchor = anchor_lump(msg, msg->headers->name.s - msg->buf, 0, 0);
- } else { /* before hf */
+ } else { /* before first hf */
anchor = anchor_lump(msg, hf->name.s - msg->buf, 0, 0);
}
}