From 137b45da5520427a2e0d658873365f6c0718a81c Mon Sep 17 00:00:00 2001
From: Anthony Minessale <anthm@freeswitch.org>
Date: Thu, 31 Oct 2013 10:36:06 -0500
Subject: [PATCH] FS-5844

---
 src/mod/endpoints/mod_sofia/sofia.c | 73 ++++++++++++++---------------
 1 file changed, 36 insertions(+), 37 deletions(-)

diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c
index 4b80d0938a..ee03d68876 100644
--- a/src/mod/endpoints/mod_sofia/sofia.c
+++ b/src/mod/endpoints/mod_sofia/sofia.c
@@ -5755,9 +5755,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
 		if (r_sdp) {
 			sdp_parser_t *parser;
 			sdp_session_t *sdp;
-
+			tech_pvt->remote_sdp_str = NULL;
 			switch_channel_set_variable(channel, SWITCH_R_SDP_VARIABLE, r_sdp);
-
+			printf("WTF %d\n---\n%s\n---\n%s", (profile->ndlb & PFLAG_NDLB_ALLOW_NONDUP_SDP), tech_pvt->remote_sdp_str, r_sdp);
 			if (!(profile->ndlb & PFLAG_NDLB_ALLOW_NONDUP_SDP) || (!zstr(tech_pvt->remote_sdp_str) && !strcmp(tech_pvt->remote_sdp_str, r_sdp))) {
 				switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Duplicate SDP\n%s\n", r_sdp);
 				is_dup_sdp = 1;
@@ -5855,6 +5855,39 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
 
 		if (r_sdp) {
 			if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
+				char ibuf[35] = "", pbuf[35] = "";
+				const char *ptr;
+				
+				if ((ptr = switch_stristr("c=IN IP4", r_sdp))) {
+					int i = 0;
+					
+					ptr += 8;
+					
+					while(*ptr == ' ') {
+						ptr++;
+					}
+					while(*ptr && *ptr != ' ' && *ptr != '\r' && *ptr != '\n') {
+						ibuf[i++] = *ptr++;
+					}
+					
+					switch_channel_set_variable(channel, SWITCH_REMOTE_MEDIA_IP_VARIABLE, ibuf);
+				}
+				
+				if ((ptr = switch_stristr("m=audio", r_sdp))) {
+					int i = 0;
+					
+					ptr += 7;
+					
+					while(*ptr == ' ') {
+						ptr++;
+					}
+					while(*ptr && *ptr != ' ' && *ptr != '\r' && *ptr != '\n') {
+						pbuf[i++] = *ptr++;
+					}
+					
+					switch_channel_set_variable(channel, SWITCH_REMOTE_MEDIA_PORT_VARIABLE, pbuf);
+				}
+
 				if (switch_channel_test_flag(channel, CF_PROXY_MEDIA) &&  switch_channel_direction(tech_pvt->channel) == SWITCH_CALL_DIRECTION_INBOUND) {
 					switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "PROXY MEDIA");
 				}
@@ -6331,41 +6364,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
 			}
 		break;
 	case nua_callstate_ready:
-
-		if (switch_channel_test_flag(channel, CF_PROXY_MODE) && r_sdp) {
-			char ibuf[35] = "", pbuf[35] = "";
-			const char *ptr;
-			
-			if ((ptr = switch_stristr("c=IN IP4", r_sdp))) {
-				int i = 0;
-
-				ptr += 8;
-
-				while(*ptr == ' ') {
-					ptr++;
-				}
-				while(*ptr && *ptr != ' ' && *ptr != '\r' && *ptr != '\n') {
-					ibuf[i++] = *ptr++;
-				}
-
-				switch_channel_set_variable(channel, SWITCH_REMOTE_MEDIA_IP_VARIABLE, ibuf);
-			}
-
-			if ((ptr = switch_stristr("m=audio", r_sdp))) {
-				int i = 0;
-		
-				ptr += 7;
-
-				while(*ptr == ' ') {
-					ptr++;
-				}
-				while(*ptr && *ptr != ' ' && *ptr != '\r' && *ptr != '\n') {
-					pbuf[i++] = *ptr++;
-				}
-
-				switch_channel_set_variable(channel, SWITCH_REMOTE_MEDIA_PORT_VARIABLE, pbuf);
-			}
-		} else if (r_sdp && (!is_dup_sdp || sofia_test_flag(tech_pvt, TFLAG_NEW_SDP)) && switch_rtp_ready(tech_pvt->rtp_session) && !sofia_test_flag(tech_pvt, TFLAG_NOSDP_REINVITE)) {
+		if (r_sdp && (!is_dup_sdp || sofia_test_flag(tech_pvt, TFLAG_NEW_SDP)) && switch_rtp_ready(tech_pvt->rtp_session) && !sofia_test_flag(tech_pvt, TFLAG_NOSDP_REINVITE)) {
 			/* sdp changed since 18X w sdp, we're supposed to ignore it but we, of course, were pressured into supporting it */
 			uint8_t match = 0;