From d50adefa0538a35ddb860356a0f8ca7b652df12c Mon Sep 17 00:00:00 2001
From: "Kevin P. Fleming" <kpfleming@digium.com>
Date: Wed, 5 Oct 2005 00:42:09 +0000
Subject: [PATCH] ensure that Remote-Party-ID is sent even on secondary INVITEs
 within a dialog (issue #5322)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6728 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_sip.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 35ac5a3546..407c0b46e3 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2083,7 +2083,7 @@ static void __sip_destroy(struct sip_pvt *p, int lockowner)
 	if (p->rpid)
 		free(p->rpid);
 
-	if (p->rpid_from)
+	if (p->rpid_from && (p->rpid_from != p->from))
 		free(p->rpid_from);
 
 	/* Unlink us from the owner if we have one */
@@ -4034,6 +4034,10 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, in
 	add_header(req, "CSeq", tmp);
 
 	add_header(req, "User-Agent", default_useragent);
+
+	if (ast_test_flag(p, SIP_OUTGOING) && (sipmethod == SIP_INVITE) && ast_test_flag(p, SIP_SENDRPID))
+		add_header(req, "Remote-Party-ID", p->rpid);
+
 	return 0;
 }
 
@@ -4748,14 +4752,15 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho
 	/* SLD: FIXME?: do Route: here too?  I think not cos this is the first request.
 	 * OTOH, then we won't have anything in p->route anyway */
 	/* Build Remote Party-ID and From */
-	if (ast_test_flag(p, SIP_SENDRPID)) {
+	if (ast_test_flag(p, SIP_SENDRPID))
 		build_rpid(p);
-		add_header(req, "From", p->rpid_from);
-	} else
-		add_header(req, "From", from);
+	else
+		p->rpid_from = p->from;
+
+	add_header(req, "From", (sipmethod == SIP_INVITE) ? p->rpid_from : p->from);
+	add_header(req, "To", to);
 	ast_copy_string(p->exten, l, sizeof(p->exten));
 	build_contact(p);
-	add_header(req, "To", to);
 	add_header(req, "Contact", p->our_contact);
 	add_header(req, "Call-ID", p->callid);
 	add_header(req, "CSeq", tmp);
-- 
GitLab