[Freeswitch-svn] [commit] r9122 - in freeswitch/trunk: conf/sip_profiles src/mod/endpoints/mod_sofia

Freeswitch SVN anthm at freeswitch.org
Mon Jul 21 12:40:28 EDT 2008


Author: anthm
Date: Mon Jul 21 12:40:28 2008
New Revision: 9122

Modified:
   freeswitch/trunk/conf/sip_profiles/internal.xml
   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:
update

Modified: freeswitch/trunk/conf/sip_profiles/internal.xml
==============================================================================
--- freeswitch/trunk/conf/sip_profiles/internal.xml	(original)
+++ freeswitch/trunk/conf/sip_profiles/internal.xml	Mon Jul 21 12:40:28 2008
@@ -122,7 +122,11 @@
     <!--<param name="disable-transfer" value="true"/>-->
     <!--<param name="disable-register" value="true"/>-->
     <!--<param name="enable-3pcc" value="true"/>-->
-
+    <!-- use stun when specified (default is true) -->
+    <!--<param name="stun-enabled" value="true"/>-->
+    <!-- use stun when specified (default is true) -->
+    <!-- set to true to have the profile determine stun is not useful and turn it off globally-->
+    <!--<param name="stun-auto-disable" value="true"/>-->
   </settings>
 </profile>
 

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	Mon Jul 21 12:40:28 2008
@@ -1201,22 +1201,22 @@
 				switch_assert(gp->state < REG_STATE_LAST);
 
 				stream->write_function(stream, "%s\n", line);
-				stream->write_function(stream, "Name    \t%s\n", switch_str_nil(gp->name));
-				stream->write_function(stream, "Scheme  \t%s\n", switch_str_nil(gp->register_scheme));
-				stream->write_function(stream, "Realm   \t%s\n", switch_str_nil(gp->register_realm));
-				stream->write_function(stream, "Username\t%s\n", switch_str_nil(gp->register_username));
-				stream->write_function(stream, "Password\t%s\n", switch_strlen_zero(gp->register_password) ? "no" : "yes");
-				stream->write_function(stream, "From    \t%s\n", switch_str_nil(gp->register_from));
-				stream->write_function(stream, "Contact \t%s\n", switch_str_nil(gp->register_contact));
-				stream->write_function(stream, "To      \t%s\n", switch_str_nil(gp->register_to));
-				stream->write_function(stream, "Proxy   \t%s\n", switch_str_nil(gp->register_proxy));
-				stream->write_function(stream, "Context \t%s\n", switch_str_nil(gp->register_context));
-				stream->write_function(stream, "Expires \t%s\n", switch_str_nil(gp->expires_str));
-				stream->write_function(stream, "Freq    \t%d\n", gp->freq);
-				stream->write_function(stream, "Ping    \t%d\n", gp->ping);
-				stream->write_function(stream, "PingFreq\t%d\n", gp->ping_freq);
-				stream->write_function(stream, "State   \t%s\n", sofia_state_names[gp->state]);
-				stream->write_function(stream, "Status  \t%s%s\n", status_names[gp->status], gp->pinging ? " (ping)" : "");
+				stream->write_function(stream, "Name    \t\t%s\n", switch_str_nil(gp->name));
+				stream->write_function(stream, "Scheme  \t\t%s\n", switch_str_nil(gp->register_scheme));
+				stream->write_function(stream, "Realm   \t\t%s\n", switch_str_nil(gp->register_realm));
+				stream->write_function(stream, "Username\t\t%s\n", switch_str_nil(gp->register_username));
+				stream->write_function(stream, "Password\t\t%s\n", switch_strlen_zero(gp->register_password) ? "no" : "yes");
+				stream->write_function(stream, "From    \t\t%s\n", switch_str_nil(gp->register_from));
+				stream->write_function(stream, "Contact \t\t%s\n", switch_str_nil(gp->register_contact));
+				stream->write_function(stream, "To      \t\t%s\n", switch_str_nil(gp->register_to));
+				stream->write_function(stream, "Proxy   \t\t%s\n", switch_str_nil(gp->register_proxy));
+				stream->write_function(stream, "Context \t\t%s\n", switch_str_nil(gp->register_context));
+				stream->write_function(stream, "Expires \t\t%s\n", switch_str_nil(gp->expires_str));
+				stream->write_function(stream, "Freq    \t\t%d\n", gp->freq);
+				stream->write_function(stream, "Ping    \t\t%d\n", gp->ping);
+				stream->write_function(stream, "PingFreq\t\t%d\n", gp->ping_freq);
+				stream->write_function(stream, "State   \t\t%s\n", sofia_state_names[gp->state]);
+				stream->write_function(stream, "Status  \t\t%s%s\n", status_names[gp->status], gp->pinging ? " (ping)" : "");
 				stream->write_function(stream, "%s\n", line);
 				sofia_reg_release_gateway(gp);
 			} else {
@@ -1227,46 +1227,48 @@
 
 			if ((profile = sofia_glue_find_profile(argv[1]))) {
 				stream->write_function(stream, "%s\n", line);
-				stream->write_function(stream, "Name          \t%s\n", switch_str_nil(argv[1]));
-				stream->write_function(stream, "Domain Name   \t%s\n", switch_str_nil(profile->domain_name));
+				stream->write_function(stream, "Name          \t\t%s\n", switch_str_nil(argv[1]));
+				stream->write_function(stream, "Domain Name   \t\t%s\n", switch_str_nil(profile->domain_name));
 				if (strcasecmp(argv[1], profile->name)) {
-					stream->write_function(stream, "Alias Of      \t%s\n", switch_str_nil(profile->name));
+					stream->write_function(stream, "Alias Of      \t\t%s\n", switch_str_nil(profile->name));
 				}
-				stream->write_function(stream, "DBName        \t%s\n", switch_str_nil(profile->dbname));
-				stream->write_function(stream, "Dialplan      \t%s\n", switch_str_nil(profile->dialplan));
-				stream->write_function(stream, "Context       \t%s\n", switch_str_nil(profile->context));
-				stream->write_function(stream, "RTP-IP        \t%s\n", switch_str_nil(profile->rtpip));
+				stream->write_function(stream, "DBName        \t\t%s\n", switch_str_nil(profile->dbname));
+				stream->write_function(stream, "Dialplan      \t\t%s\n", switch_str_nil(profile->dialplan));
+				stream->write_function(stream, "Context       \t\t%s\n", switch_str_nil(profile->context));
+				stream->write_function(stream, "RTP-IP        \t\t%s\n", switch_str_nil(profile->rtpip));
 				if (profile->extrtpip) {
-					stream->write_function(stream, "Ext-RTP-IP    \t%s\n", profile->extrtpip);
+					stream->write_function(stream, "Ext-RTP-IP    \t\t%s\n", profile->extrtpip);
 				}
 
-				stream->write_function(stream, "SIP-IP        \t%s\n", switch_str_nil(profile->sipip));
+				stream->write_function(stream, "SIP-IP        \t\t%s\n", switch_str_nil(profile->sipip));
 				if (profile->extsipip) {
-					stream->write_function(stream, "Ext-SIP-IP    \t%s\n", profile->extsipip);
+					stream->write_function(stream, "Ext-SIP-IP    \t\t%s\n", profile->extsipip);
 				}
-				stream->write_function(stream, "URL           \t%s\n", switch_str_nil(profile->url));
-				stream->write_function(stream, "BIND-URL      \t%s\n", switch_str_nil(profile->bindurl));
+				stream->write_function(stream, "URL           \t\t%s\n", switch_str_nil(profile->url));
+				stream->write_function(stream, "BIND-URL      \t\t%s\n", switch_str_nil(profile->bindurl));
 				if (sofia_test_pflag(profile, PFLAG_TLS)) {
-					stream->write_function(stream, "TLS-URL      \t%s\n", switch_str_nil(profile->tls_url));
-					stream->write_function(stream, "TLS-BIND-URL    %s\n", switch_str_nil(profile->tls_bindurl));
+					stream->write_function(stream, "TLS-URL      \t\t%s\n", switch_str_nil(profile->tls_url));
+					stream->write_function(stream, "TLS-BIND-URL      \t%s\n", switch_str_nil(profile->tls_bindurl));
 				}
-				stream->write_function(stream, "HOLD-MUSIC    \t%s\n", switch_str_nil(profile->hold_music));
-				stream->write_function(stream, "CODECS        \t%s\n", switch_str_nil(profile->codec_string));
-				stream->write_function(stream, "TEL-EVENT     \t%d\n", profile->te);
+				stream->write_function(stream, "HOLD-MUSIC    \t\t%s\n", switch_strlen_zero(profile->hold_music) ? "NONE" : profile->hold_music);
+				stream->write_function(stream, "CODECS        \t\t%s\n", switch_str_nil(profile->codec_string));
+				stream->write_function(stream, "TEL-EVENT     \t\t%d\n", profile->te);
 				if (profile->dtmf_type == DTMF_2833) {
-					stream->write_function(stream, "DTMF-MODE     \trfc2833\n");
+					stream->write_function(stream, "DTMF-MODE     \t\trfc2833\n");
 				} else if (profile->dtmf_type == DTMF_INFO) {
-					stream->write_function(stream, "DTMF-MODE     \tinfo\n");
+					stream->write_function(stream, "DTMF-MODE     \t\tinfo\n");
 				} else {
-					stream->write_function(stream, "DTMF-MODE     \tnone\n");
+					stream->write_function(stream, "DTMF-MODE     \t\tnone\n");
 				}
-				stream->write_function(stream, "CNG           \t%d\n", profile->cng_pt);
-				stream->write_function(stream, "SESSION-TO    \t%d\n", profile->session_timeout);
-				stream->write_function(stream, "MAX-DIALOG    \t%d\n", profile->max_proceeding);
-				stream->write_function(stream, "NOMEDIA       \t%s\n", switch_test_flag(profile, TFLAG_INB_NOMEDIA) ? "true" : "false");
-				stream->write_function(stream, "LATE-NEG      \t%s\n", switch_test_flag(profile, TFLAG_LATE_NEGOTIATION) ? "true" : "false");
-				stream->write_function(stream, "PROXY-MEDIA   \t%s\n", switch_test_flag(profile, TFLAG_PROXY_MEDIA) ? "true" : "false");
-				stream->write_function(stream, "AGGRESSIVENAT \t%s\n", sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) ? "true" : "false");
+				stream->write_function(stream, "CNG           \t\t%d\n", profile->cng_pt);
+				stream->write_function(stream, "SESSION-TO    \t\t%d\n", profile->session_timeout);
+				stream->write_function(stream, "MAX-DIALOG    \t\t%d\n", profile->max_proceeding);
+				stream->write_function(stream, "NOMEDIA       \t\t%s\n", switch_test_flag(profile, TFLAG_INB_NOMEDIA) ? "true" : "false");
+				stream->write_function(stream, "LATE-NEG      \t\t%s\n", switch_test_flag(profile, TFLAG_LATE_NEGOTIATION) ? "true" : "false");
+				stream->write_function(stream, "PROXY-MEDIA   \t\t%s\n", switch_test_flag(profile, TFLAG_PROXY_MEDIA) ? "true" : "false");
+				stream->write_function(stream, "AGGRESSIVENAT \t\t%s\n", sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) ? "true" : "false");
+				stream->write_function(stream, "STUN_ENABLED \t\t%s\n", sofia_test_pflag(profile, PFLAG_STUN_ENABLED) ? "true" : "false");
+				stream->write_function(stream, "STUN_AUTO_DISABLE \t%s\n", sofia_test_pflag(profile, PFLAG_STUN_AUTO_DISABLE) ? "true" : "false");
 				stream->write_function(stream, "\nRegistrations:\n%s\n", line);
 
 				cb.profile = profile;
@@ -1376,6 +1378,37 @@
 		goto done;
 	}
 
+	if (!strcasecmp(argv[1], "stun-auto-disable")) {
+		if (argv[2]) {
+			int is_true = switch_true(argv[2]);
+			if (is_true) {
+				profile->pflags |= PFLAG_STUN_AUTO_DISABLE;
+			} else {
+				profile->pflags &= ~PFLAG_STUN_AUTO_DISABLE;
+			}
+		}
+
+		stream->write_function(stream, "+OK stun-auto-disable=%s", (profile->pflags & PFLAG_STUN_AUTO_DISABLE) ? "true" : "false");
+		
+		goto done;
+	}
+
+	if (!strcasecmp(argv[1], "stun-enabled")) {
+		if (argv[2]) {
+			int is_true = switch_true(argv[2]);
+			if (is_true) {
+				profile->pflags |= PFLAG_STUN_ENABLED;
+			} else {
+				profile->pflags &= ~PFLAG_STUN_ENABLED;
+			}
+		}
+
+		stream->write_function(stream, "+OK stun-enabled=%s", (profile->pflags & PFLAG_STUN_ENABLED) ? "true" : "false");
+		
+		goto done;
+	}
+
+
 	if (!strcasecmp(argv[1], "rescan")) {
 
 		if (argc > 2 && !strcasecmp(argv[2], "reloadxml")) {

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	Mon Jul 21 12:40:28 2008
@@ -157,7 +157,9 @@
 	PFLAG_3PCC = (1 << 23),
 	PFLAG_DISABLE_RTP_AUTOADJ = (1 << 24),
 	PFLAG_DISABLE_SRTP_AUTH = (1 << 25),
-	PFLAG_FUNNY_STUN = (1 << 26)
+	PFLAG_FUNNY_STUN = (1 << 26),
+	PFLAG_STUN_ENABLED = (1 << 27),
+	PFLAG_STUN_AUTO_DISABLE = (1 << 28)
 } PFLAGS;
 
 typedef enum {

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	Mon Jul 21 12:40:28 2008
@@ -982,6 +982,8 @@
 
 			/* you could change profile->foo here if it was a minor change like context or dialplan ... */
 			profile->rport_level = 1; /* default setting */
+			profile->acl_count = 0;
+			profile->pflags |= PFLAG_STUN_ENABLED;
 
 			if ((settings = switch_xml_child(xprofile, "settings"))) {
 				for (param = switch_xml_child(settings, "param"); param; param = param->next) {
@@ -1053,6 +1055,36 @@
 						} else {
 							profile->pflags &= ~PFLAG_FUNNY_STUN; 
 						}
+					} else if (!strcasecmp(var, "stun-enabled")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_STUN_ENABLED;
+						} else {
+							profile->pflags &= ~PFLAG_STUN_ENABLED; 
+						}
+					} else if (!strcasecmp(var, "stun-auto-disable")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_STUN_AUTO_DISABLE;
+						} else {
+							profile->pflags &= ~PFLAG_STUN_AUTO_DISABLE; 
+						}
+					} else if (!strcasecmp(var, "apply-nat-acl")) {
+						if (profile->acl_count < SOFIA_MAX_ACL) {
+							profile->nat_acl[profile->nat_acl_count++] = switch_core_strdup(profile->pool, val);
+						} else {
+							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Max acl records of %d reached\n", SOFIA_MAX_ACL);
+						}
+					} else if (!strcasecmp(var, "apply-inbound-acl")) {
+						if (profile->acl_count < SOFIA_MAX_ACL) {
+							profile->acl[profile->acl_count++] = switch_core_strdup(profile->pool, val);
+						} else {
+							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Max acl records of %d reached\n", SOFIA_MAX_ACL);
+						}
+					} else if (!strcasecmp(var, "apply-register-acl")) {
+						if (profile->reg_acl_count < SOFIA_MAX_ACL) {
+							profile->reg_acl[profile->reg_acl_count++] = switch_core_strdup(profile->pool, val);
+						} else {
+							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Max acl records of %d reached\n", SOFIA_MAX_ACL);
+						}
 					} else if (!strcasecmp(var, "rfc2833-pt")) {
 						profile->te = (switch_payload_t) atoi(val);
 					} else if (!strcasecmp(var, "cng-pt")) {
@@ -1173,6 +1205,7 @@
 				}
 			}
 			
+
 			if ((gateways_tag = switch_xml_child(xprofile, "gateways"))) {
 				parse_gateways(profile, gateways_tag);
 			}
@@ -1333,6 +1366,7 @@
 				profile->tls_version = 0;
 				profile->mflags = MFLAG_REFER | MFLAG_REGISTER;
 				profile->rport_level = 1;
+				profile->pflags |= PFLAG_STUN_ENABLED;
 				
 				for (param = switch_xml_child(settings, "param"); param; param = param->next) {
 					char *var = (char *) switch_xml_attr_soft(param, "name");
@@ -1392,6 +1426,18 @@
 						} else {
 							profile->pflags &= ~PFLAG_FUNNY_STUN; 
 						}
+					} else if (!strcasecmp(var, "stun-enabled")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_STUN_ENABLED;
+						} else {
+							profile->pflags &= ~PFLAG_STUN_ENABLED; 
+						}
+					} else if (!strcasecmp(var, "stun-auto-disable")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_STUN_AUTO_DISABLE;
+						} else {
+							profile->pflags &= ~PFLAG_STUN_AUTO_DISABLE; 
+						}
 					} else if (!strcasecmp(var, "rfc2833-pt")) {
 						profile->te = (switch_payload_t) atoi(val);
 					} else if (!strcasecmp(var, "cng-pt")) {
@@ -1680,6 +1726,10 @@
 					profile->dialplan = switch_core_strdup(profile->pool, "XML");
 				}
 
+				if (!profile->context) {
+					profile->context = switch_core_strdup(profile->pool, "default");
+				}
+
 				if (!profile->sipdomain) {
 					profile->sipdomain = switch_core_strdup(profile->pool, profile->sipip);
 				}

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	Mon Jul 21 12:40:28 2008
@@ -442,6 +442,12 @@
 
 	if (!strncasecmp(sourceip, "stun:", 5)) {
 		char *p;
+
+		if (!(profile->pflags & PFLAG_STUN_ENABLED)) {
+			*ip = switch_core_strdup(pool, tech_pvt->profile->rtpip);
+			return SWITCH_STATUS_SUCCESS;
+		}
+		
 		stun_ip = strdup(sourceip + 5);
 
 		if ((p = strchr(stun_ip, ':'))) {
@@ -483,6 +489,10 @@
 		if (tech_pvt) {
 			if (myport == *port && !strcmp(*ip, tech_pvt->profile->rtpip)) {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Stun Not Required ip and port match. [%s]:[%d]\n", *ip, *port);
+				if (profile->pflags & PFLAG_STUN_AUTO_DISABLE) {
+					profile->pflags &= ~PFLAG_STUN_ENABLED;
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Stun completely disabled.\n");
+				}
 			} else {
 				tech_pvt->stun_ip = switch_core_session_strdup(tech_pvt->session, stun_ip);
 				tech_pvt->stun_port = stun_port;



More information about the Freeswitch-svn mailing list