From b8bf3e2fefc867e3679a1a02577c23179f42118d Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Thu, 19 Nov 2020 21:44:03 +0100
Subject: [PATCH] main/kamailio: backport upstream fix

---
 main/kamailio/APKBUILD                        |  4 +-
 ...-From-To-URI-tag-values-using-parsed.patch | 73 +++++++++++++++++++
 2 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100644 main/kamailio/tm-proper-fill-of-From-To-URI-tag-values-using-parsed.patch

diff --git a/main/kamailio/APKBUILD b/main/kamailio/APKBUILD
index 1d58167cc11b..ede0c0e5270a 100644
--- a/main/kamailio/APKBUILD
+++ b/main/kamailio/APKBUILD
@@ -5,7 +5,7 @@
 
 pkgname=kamailio
 pkgver=5.3.7
-pkgrel=0
+pkgrel=1
 
 # If building from a git snapshot, specify the gitcommit
 # If building a proper release, leave gitcommit blank
@@ -33,6 +33,7 @@ makedepends="bison db-dev flex freeradius-client-dev expat-dev
 	ruby-dev libmaxminddb-dev libunistring-dev"
 source="kamailio-${pkgver}$_suffix.tar.gz::https://github.com/kamailio/kamailio/archive/$_gitcommit.tar.gz
 	jsonrcc-use-extern-not-to-declare-global-variables-many-times.patch
+	tm-proper-fill-of-From-To-URI-tag-values-using-parsed.patch
 	kamailio.initd
 	"
 
@@ -535,4 +536,5 @@ sipdump() {
 
 sha512sums="d0c97003a9058192f86f79665a31dd576459502574af4eddda36a551413064c0b9cdcf4d75e3273a0bf85d335e520c8a0bf5e0b3899b9887b310b5fc41357a9e  kamailio-5.3.7.tar.gz
 98a8fd556cc0c0b1af3da236ea67690f57fd063e24468e5dc3f33a4b0b61f8a6a464117d6bad83b6ac257eb1cd9f328c172e789d42174c15272aaf5aaa922028  jsonrcc-use-extern-not-to-declare-global-variables-many-times.patch
+b82dc389dc294cc09b0089ef2e846d308b937a9984a53574f0a434180341725dc025222d2bd9d9b0bb01b05bebd106412cfaf81e3150e338393a6a4012f1deb0  tm-proper-fill-of-From-To-URI-tag-values-using-parsed.patch
 0c87bfb78481568c03e603049eb8597a90d24ae2941fc81694181b2326fa9db89fbddaaa3cf08c7bc2f5fa0e7ffac4cf4e2d010d08c4faa6cf6df98593432539  kamailio.initd"
diff --git a/main/kamailio/tm-proper-fill-of-From-To-URI-tag-values-using-parsed.patch b/main/kamailio/tm-proper-fill-of-From-To-URI-tag-values-using-parsed.patch
new file mode 100644
index 000000000000..694d94a425aa
--- /dev/null
+++ b/main/kamailio/tm-proper-fill-of-From-To-URI-tag-values-using-parsed.patch
@@ -0,0 +1,73 @@
+From aa6e9963b2725c1b6b7e5ff995a77c222d95fa3c Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda@gmail.com>
+Date: Thu, 19 Nov 2020 17:06:06 +0100
+Subject: [PATCH] tm: proper fill of From/To URI/tag values using parsed
+ structure in t_uac_send()
+
+---
+ src/modules/tm/rpc_uac.c | 24 ++++++++++++++++++------
+ 1 file changed, 18 insertions(+), 6 deletions(-)
+
+diff --git a/src/modules/tm/rpc_uac.c b/src/modules/tm/rpc_uac.c
+index cc50274f0c..dfe99d1390 100644
+--- a/src/modules/tm/rpc_uac.c
++++ b/src/modules/tm/rpc_uac.c
+@@ -593,7 +593,7 @@ void rpc_t_uac_wait(rpc_t* rpc, void* c)
+ 
+ static int t_uac_check_msg(struct sip_msg* msg,
+ 		str* method, str* body,
+-		int* fromtag, int *cseq_is, int* cseq,
++		str *fromtag, int *cseq_is, int* cseq,
+ 		str* callid)
+ {
+ 	struct to_body* parsed_from;
+@@ -628,7 +628,13 @@ static int t_uac_check_msg(struct sip_msg* msg,
+ 	}
+ 
+ 	parsed_from = (struct to_body*)msg->from->parsed;
+-	*fromtag = parsed_from->tag_value.s && parsed_from->tag_value.len;
++	if(parsed_from->tag_value.s && parsed_from->tag_value.len) {
++		fromtag->s = parsed_from->tag_value.s;
++		fromtag->len = parsed_from->tag_value.len;
++	} else {
++		fromtag->s = NULL;
++		fromtag->len = 0;
++	}
+ 
+ 	*cseq = 0;
+ 	if (msg->cseq && (parsed_cseq = get_cseq(msg))) {
+@@ -676,7 +682,8 @@ int t_uac_send(str *method, str *ruri, str *nexthop, str *send_socket,
+ 	struct socket_info* ssock;
+ 	str saddr;
+ 	int sport, sproto;
+-	int ret, fromtag, cseq_is, cseq;
++	int ret, cseq_is, cseq;
++	str fromtag;
+ 	dlg_t dlg;
+ 	uac_req_t uac_req;
+ 
+@@ -749,7 +756,9 @@ int t_uac_send(str *method, str *ruri, str *nexthop, str *send_socket,
+ 	 */
+ 
+ 	/* Generate fromtag if not present */
+-	if (!fromtag) {
++	if (fromtag.s && fromtag.len) {
++		dlg.id.loc_tag = fromtag;
++	} else {
+ 		generate_fromtag(&dlg.id.loc_tag, &dlg.id.call_id, ruri);
+ 	}
+ 
+@@ -758,8 +767,11 @@ int t_uac_send(str *method, str *ruri, str *nexthop, str *send_socket,
+ 	else dlg.loc_seq.value = DEFAULT_CSEQ;
+ 	dlg.loc_seq.is_set = 1;
+ 
+-	dlg.loc_uri = faked_msg.from->body;
+-	dlg.rem_uri = faked_msg.to->body;
++	dlg.loc_uri = get_from(&faked_msg)->uri;
++	dlg.rem_uri = get_to(&faked_msg)->uri;
++	if(get_to(&faked_msg)->tag_value.len > 0) {
++		dlg.id.rem_tag = get_to(&faked_msg)->tag_value;
++	}
+ 	dlg.rem_target = *ruri;
+ 	dlg.dst_uri = *nexthop;
+ 	dlg.send_sock=ssock;
-- 
GitLab