From 7c2b4381cff41d4cf284dcf4a3059c946e766ddd Mon Sep 17 00:00:00 2001
From: Anthony Minessale <anthm@freeswitch.org>
Date: Tue, 27 May 2014 20:39:53 +0500
Subject: [PATCH] FS-6446 --resolve

---
 src/mod/endpoints/mod_sofia/sofia.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c
index ea4ed5544e..454e7109fb 100644
--- a/src/mod/endpoints/mod_sofia/sofia.c
+++ b/src/mod/endpoints/mod_sofia/sofia.c
@@ -5464,10 +5464,8 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status
 		tech_pvt->mparams.last_sdp_str = NULL;
 		if (sip->sip_payload && sip->sip_payload->pl_data) {
 			switch_core_media_set_sdp_codec_string(session, sip->sip_payload->pl_data, SDP_TYPE_RESPONSE);
-			
-			if (!sofia_use_soa(tech_pvt)) {
-				tech_pvt->mparams.last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data);
-			}
+
+			tech_pvt->mparams.last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data);
 		}
 
 
@@ -6152,7 +6150,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
 		}
 	}
 
-	if (status > 100 && status < 300 && tech_pvt && !sofia_use_soa(tech_pvt) && !r_sdp && tech_pvt->mparams.last_sdp_str) {
+	if (tech_pvt && (status > 100 || switch_channel_test_flag(channel, CF_ANSWERED)) && status < 300 && !r_sdp && tech_pvt->mparams.last_sdp_str) {
 		r_sdp = tech_pvt->mparams.last_sdp_str;
 	}
 
@@ -8193,9 +8191,11 @@ void sofia_handle_sip_i_reinvite(switch_core_session_t *session,
 {
 	char *call_info = NULL;
 	switch_channel_t *channel = NULL;
+	private_object_t *tech_pvt = NULL;
 
 	if (session) {
 		channel = switch_core_session_get_channel(session);
+		tech_pvt = switch_core_session_get_private(session);
 	}
 
 	if (session && profile && sip && sofia_test_pflag(profile, PFLAG_TRACK_CALLS)) {
@@ -8236,8 +8236,10 @@ void sofia_handle_sip_i_reinvite(switch_core_session_t *session,
 	}
 
 	if (channel) {
+		tech_pvt->mparams.last_sdp_str = NULL;
 		if (sip->sip_payload && sip->sip_payload->pl_data) {
 			switch_channel_set_variable(channel, "sip_reinvite_sdp", sip->sip_payload->pl_data);
+			tech_pvt->mparams.last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data);
 		}
 		switch_channel_execute_on(channel, "execute_on_sip_reinvite");
 	}