[Freeswitch-svn] [commit] r8395 - freeswitch/trunk/src/mod/endpoints/mod_sofia

Freeswitch SVN anthm at freeswitch.org
Wed May 14 10:13:41 EDT 2008


Author: anthm
Date: Wed May 14 10:13:40 2008
New Revision: 8395

Modified:
   freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
   freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c

Log:
clean up nat stuff more

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	Wed May 14 10:13:40 2008
@@ -411,7 +411,8 @@
 		(val = switch_channel_get_variable(channel, "sip-force-contact")) || 
 		((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) {
 		sticky = tech_pvt->record_route;
-		session_timeout = 20;
+		session_timeout = SOFIA_NAT_SESSION_TIMEOUT;
+		switch_channel_set_variable(channel, "sip_nat_detected", "true");
 	}
 
 	
@@ -1107,6 +1108,7 @@
 					(val = switch_channel_get_variable(channel, "sip-force-contact")) || 
 					((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) {
 					sticky = tech_pvt->record_route;
+					switch_channel_set_variable(channel, "sip_nat_detected", "true");
 				}
 
 				nua_respond(tech_pvt->nh,

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	Wed May 14 10:13:40 2008
@@ -45,7 +45,7 @@
 #ifdef SWITCH_HAVE_ODBC
 #include <switch_odbc.h>
 #endif
-
+#define SOFIA_NAT_SESSION_TIMEOUT 20
 #define SOFIA_MAX_ACL 100
 
 #define MODNAME "mod_sofia"

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	Wed May 14 10:13:40 2008
@@ -2727,10 +2727,14 @@
 	tech_pvt->remote_port = network_port;
 
 	if (sip->sip_contact && sip->sip_contact->m_url) {
+		char tmp[35] = "";
 		tech_pvt->record_route = switch_core_session_sprintf(session, "sip:%s@%s:%d", 
 															 sip->sip_contact->m_url->url_user, 
 															 tech_pvt->remote_ip,
 															 tech_pvt->remote_port);
+		switch_channel_set_variable(channel, "sip_received_ip", tech_pvt->remote_ip);
+		snprintf(tmp, sizeof(tmp), "tech_pvt->remote_port");
+		switch_channel_set_variable(channel, "sip_received_port", tmp);
 	}
 
 	if (*key != '\0') {
@@ -3168,6 +3172,7 @@
 				if (ok) {
 					switch_set_flag(tech_pvt, TFLAG_NAT);
 					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Setting NAT mode based on acl %s\n", last_acl);
+					switch_channel_set_variable(channel, "sip_nat_detected", "true");
 				}
 			}
 		}

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c	Wed May 14 10:13:40 2008
@@ -1007,7 +1007,8 @@
 			((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) {
 			tech_pvt->record_route = switch_core_session_strdup(tech_pvt->session, url_str);
 			sticky = tech_pvt->record_route;
-			session_timeout = 20;
+			session_timeout = SOFIA_NAT_SESSION_TIMEOUT;
+			switch_channel_set_variable(channel, "sip_nat_detected", "true");
 		}
 
 
@@ -1532,6 +1533,16 @@
 	if (tech_pvt->cng_pt) {
 		flags |= SWITCH_RTP_FLAG_AUTO_CNG;
 	}
+	
+	if (tech_pvt->rtp_session && switch_test_flag(tech_pvt, TFLAG_REINVITE)) {
+		const char *ip = switch_channel_get_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_IP_VARIABLE);
+		const char *port = switch_channel_get_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_PORT_VARIABLE);
+
+		if (ip && port && !strcmp(ip, tech_pvt->adv_sdp_audio_ip) && atoi(port) == tech_pvt->remote_sdp_audio_port) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Audio params are unchanged.\n");
+			goto video;
+		}
+	}
 
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AUDIO RTP [%s] %s:%d->%s:%d codec: %u ms: %d\n",
 					  switch_channel_get_name(tech_pvt->channel),
@@ -1809,7 +1820,7 @@
 	}
 
 	if (((m = sdp->sdp_media)) && m->m_mode == sdp_sendonly) {
-		sendonly = 1;
+		sendonly = 2; /* global sendonly always wins */
 	}
 
 	for (attr = sdp->sdp_attributes; attr; attr = attr->a_next) {
@@ -1819,7 +1830,7 @@
 
 		if ((!strcasecmp(attr->a_name, "sendonly")) || (!strcasecmp(attr->a_name, "inactive"))) {
 			sendonly = 1;
-		} else if (!strcasecmp(attr->a_name, "sendrecv")) {
+		} else if (sendonly < 2 && !strcasecmp(attr->a_name, "sendrecv")) {
 			sendonly = 0;
 		} else if (!strcasecmp(attr->a_name, "ptime")) {
 			dptime = atoi(attr->a_value);
@@ -1840,7 +1851,7 @@
 			if (!(stream = switch_channel_get_variable(tech_pvt->channel, SWITCH_HOLD_MUSIC_VARIABLE))) {
 				stream = tech_pvt->profile->hold_music;
 			}
-
+			
 			if (stream && strcasecmp(stream, "silence")) {
 				if (!strcasecmp(stream, "indicate_hold")) {
 					switch_channel_set_flag(tech_pvt->channel, CF_SUSPEND);



More information about the Freeswitch-svn mailing list