[sr-dev] git:5.4:eae86ff8: textops: fix append_hf function

Daniel-Constantin Mierla miconda at gmail.com
Fri Oct 23 11:09:28 CEST 2020


Module: kamailio
Branch: 5.4
Commit: eae86ff8bf327b6ed0bcb83ee25c663cb97a02fc
URL: https://github.com/kamailio/kamailio/commit/eae86ff8bf327b6ed0bcb83ee25c663cb97a02fc

Author: Stefan Mititelu <stefan-cristian.mititelu at 1and1.ro>
Committer: Daniel-Constantin Mierla <miconda at 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/eae86ff8bf327b6ed0bcb83ee25c663cb97a02fc.diff
Patch: https://github.com/kamailio/kamailio/commit/eae86ff8bf327b6ed0bcb83ee25c663cb97a02fc.patch

---

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);
 		}
 	}




More information about the sr-dev mailing list