Module: kamailio Branch: 5.4 Commit: eae86ff8bf327b6ed0bcb83ee25c663cb97a02fc URL: https://github.com/kamailio/kamailio/commit/eae86ff8bf327b6ed0bcb83ee25c663c...
Author: Stefan Mititelu stefan-cristian.mititelu@1and1.ro Committer: Daniel-Constantin Mierla miconda@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/eae86ff8bf327b6ed0bcb83ee25c663c... Patch: https://github.com/kamailio/kamailio/commit/eae86ff8bf327b6ed0bcb83ee25c663c...
---
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); } }