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

Freeswitch SVN brian at freeswitch.org
Mon Jul 14 19:58:07 EDT 2008


Author: brian
Date: Mon Jul 14 19:58:07 2008
New Revision: 9028

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

Log:
let the reloading start

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 14 19:58:07 2008
@@ -1227,34 +1227,46 @@
 
 			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%s\n", switch_str_nil(argv[1]));
+				stream->write_function(stream, "Domain Name   \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%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, "RTP-IP     \t%s\n", switch_str_nil(profile->rtpip));
+				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));
 				if (profile->extrtpip) {
-					stream->write_function(stream, "Ext-RTP-IP \t%s\n", profile->extrtpip);
+					stream->write_function(stream, "Ext-RTP-IP    \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%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%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%s\n", switch_str_nil(profile->url));
+				stream->write_function(stream, "BIND-URL      \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   \t%s\n", switch_str_nil(profile->tls_bindurl));
+					stream->write_function(stream, "TLS-URL      \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, "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, "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);
+				if (profile->dtmf_type == DTMF_2833) {
+					stream->write_function(stream, "DTMF-MODE     \trfc2833\n");
+				} else if (profile->dtmf_type == DTMF_INFO) {
+					stream->write_function(stream, "DTMF-MODE     \tinfo\n");
+				} else {
+					stream->write_function(stream, "DTMF-MODE     \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, "LATENEG       \t%s\n", switch_test_flag(profile, TFLAG_LATE_NEGOTIATION) ? "true" : "false");
+				stream->write_function(stream, "PROXYMEDIA    \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, "\nRegistrations:\n%s\n", line);
 
 				cb.profile = profile;

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 14 19:58:07 2008
@@ -954,7 +954,7 @@
 
 switch_status_t reconfig_sofia(sofia_profile_t *profile)
 {
-	switch_xml_t cfg, xml = NULL, xprofile, profiles, gateways_tag, domain_tag, domains_tag;
+	switch_xml_t cfg, xml = NULL, xprofile, profiles, gateways_tag, domain_tag, domains_tag, aliases_tag, alias_tag, settings, param;
 	char *cf = "sofia.conf";
 	switch_event_t *params = NULL;
 	switch_status_t status = SWITCH_STATUS_FALSE;
@@ -973,11 +973,198 @@
 	if ((profiles = switch_xml_child(cfg, "profiles"))) {
 		for (xprofile = switch_xml_child(profiles, "profile"); xprofile; xprofile = xprofile->next) {
 			char *xprofilename = (char *) switch_xml_attr_soft(xprofile, "name");
-			//char *xprofiledomain = (char *) switch_xml_attr(xprofile, "domain");
+
 			if (strcasecmp(profile->name, xprofilename)) {
 				continue;
 			}
 
+			/* you could change profile->foo here if it was a minor change like context or dialplan ... */
+			profile->rport_level = 1; /* default setting */
+
+			if ((settings = switch_xml_child(xprofile, "settings"))) {
+				for (param = switch_xml_child(settings, "param"); param; param = param->next) {
+					char *var = (char *) switch_xml_attr_soft(param, "name");
+					char *val = (char *) switch_xml_attr_soft(param, "value");
+					if (!strcasecmp(var, "debug")) {
+						profile->debug = atoi(val);
+					} else if (!strcasecmp(var, "user-agent-string")) { 
+						profile->user_agent = switch_core_strdup(profile->pool, val);
+					} else if (!strcasecmp(var, "dtmf-type")) {
+						if (!strcasecmp(val, "rfc2833")) {
+							profile->dtmf_type = DTMF_2833;
+						} else if (!strcasecmp(val, "info")) {
+							profile->dtmf_type = DTMF_INFO;
+						} else {
+							profile->dtmf_type = DTMF_NONE;
+						}
+					} else if (!strcasecmp(var, "NDLB-force-rport")) {
+						if (switch_true(val)) {
+							profile->rport_level = 2;
+						}
+					} else if (!strcasecmp(var, "record-template")) {
+						profile->record_template = switch_core_strdup(profile->pool, val);;
+					} else if ((!strcasecmp(var, "inbound-no-media") || !strcasecmp(var, "inbound-bypass-media"))) {
+						if (switch_true(val)) {
+							switch_set_flag(profile, TFLAG_INB_NOMEDIA);
+						} else {
+							switch_clear_flag(profile, TFLAG_INB_NOMEDIA);
+						}
+					} else if (!strcasecmp(var, "inbound-late-negotiation")) {
+						if (switch_true(val)) {
+							switch_set_flag(profile, TFLAG_LATE_NEGOTIATION);
+						} else {
+							switch_clear_flag(profile, TFLAG_LATE_NEGOTIATION);
+						}
+					} else if (!strcasecmp(var, "inbound-proxy-media")) {
+						if (switch_true(val)) { 
+							switch_set_flag(profile, TFLAG_PROXY_MEDIA);
+						} else {
+							switch_clear_flag(profile, TFLAG_PROXY_MEDIA);
+						}
+					} else if (!strcasecmp(var, "NDLB-received-in-nat-reg-contact")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_RECIEVED_IN_NAT_REG_CONTACT;
+						} else {
+							profile->pflags &= ~PFLAG_RECIEVED_IN_NAT_REG_CONTACT;
+						}
+					} else if (!strcasecmp(var, "aggressive-nat-detection")) {
+						if (switch_true(val)) { 
+							profile->pflags |= PFLAG_AGGRESSIVE_NAT_DETECTION;
+						} else {
+							profile->pflags &= ~PFLAG_AGGRESSIVE_NAT_DETECTION;
+						}
+					} else if (!strcasecmp(var, "disable-rtp-auto-adjust")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_DISABLE_RTP_AUTOADJ;
+						} else {
+							profile->pflags &= ~PFLAG_DISABLE_RTP_AUTOADJ;
+						}
+					} else if (!strcasecmp(var, "NDLB-support-asterisk-missing-srtp-auth")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_DISABLE_SRTP_AUTH; 
+						} else {
+							profile->pflags &= ~PFLAG_DISABLE_SRTP_AUTH; 
+						}
+					} else if (!strcasecmp(var, "rfc2833-pt")) {
+						profile->te = (switch_payload_t) atoi(val);
+					} else if (!strcasecmp(var, "cng-pt")) {
+						profile->cng_pt = (switch_payload_t) atoi(val);
+					} else if (!strcasecmp(var, "vad")) {
+						if (!strcasecmp(val, "in")) {
+							switch_set_flag(profile, TFLAG_VAD_IN);
+						} else if (!strcasecmp(val, "out")) {
+							switch_set_flag(profile, TFLAG_VAD_OUT);
+						} else if (!strcasecmp(val, "both")) {
+							switch_set_flag(profile, TFLAG_VAD_IN);
+							switch_set_flag(profile, TFLAG_VAD_OUT);
+						} else {
+							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invald option %s for VAD\n", val);
+						}
+					} else if (!strcasecmp(var, "unregister-on-options-fail")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_UNREG_OPTIONS_FAIL;
+						} else {
+							profile->pflags &= ~PFLAG_UNREG_OPTIONS_FAIL;
+						}
+					} else if (!strcasecmp(var, "require-secure-rtp")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_SECURE;
+						} else {
+							profile->pflags &= ~PFLAG_SECURE;
+						}
+					} else if (!strcasecmp(var, "multiple-registrations")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_MULTIREG;
+						} else {
+							profile->pflags &= ~PFLAG_MULTIREG;
+						}
+					} else if (!strcasecmp(var, "supress-cng")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_SUPRESS_CNG;
+						} else {
+							profile->pflags &= ~PFLAG_SUPRESS_CNG;
+						}
+					} else if (!strcasecmp(var, "NDLB-to-in-200-contact")) {
+						if (switch_true(val)) {
+							profile->ndlb |= PFLAG_NDLB_TO_IN_200_CONTACT;
+						} else {
+							profile->ndlb &= ~PFLAG_NDLB_TO_IN_200_CONTACT;
+						}
+					} else if (!strcasecmp(var, "NDLB-broken-auth-hash")) {
+						if (switch_true(val)) {
+							profile->ndlb |= PFLAG_NDLB_BROKEN_AUTH_HASH;
+						} else {
+							profile->ndlb &= ~PFLAG_NDLB_BROKEN_AUTH_HASH;
+						}
+					} else if (!strcasecmp(var, "pass-rfc2833")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_PASS_RFC2833;
+						} else {
+							profile->pflags &= ~PFLAG_PASS_RFC2833;
+						}
+					} else if (!strcasecmp(var, "inbound-codec-negotiation")) {
+						if (!strcasecmp(val, "greedy")) {
+							profile->pflags |= PFLAG_GREEDY;
+						} else {
+							profile->pflags &= ~PFLAG_GREEDY;
+						}
+					} else if (!strcasecmp(var, "disable-transcoding")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_DISABLE_TRANSCODING;
+						} else {
+							profile->pflags &= ~PFLAG_DISABLE_TRANSCODING;
+						}
+					} else if (!strcasecmp(var, "rtp-rewrite-timestamps")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_REWRITE_TIMESTAMPS;
+						} else {
+							profile->pflags &= ~PFLAG_REWRITE_TIMESTAMPS;
+						}
+					} else if (!strcasecmp(var, "auth-calls")) {
+						if (switch_true(val)) {
+							profile->pflags |= PFLAG_AUTH_CALLS;
+						} else {
+							profile->pflags &= ~PFLAG_AUTH_CALLS;
+						}
+					} else if (!strcasecmp(var, "force-register-domain")) {
+						profile->reg_domain = switch_core_strdup(profile->pool, val);
+					} else if (!strcasecmp(var, "hold-music")) {
+						profile->hold_music = switch_core_strdup(profile->pool, val);
+					} else if (!strcasecmp(var, "session-timeout")) {
+						int v_session_timeout = atoi(val);
+						if (v_session_timeout >= 0) {
+							profile->session_timeout = v_session_timeout;
+						}
+					} else if (!strcasecmp(var, "rtp-timeout-sec")) {
+						int v = atoi(val);
+						if (v >= 0) {
+							profile->rtp_timeout_sec = v;
+						}
+					} else if (!strcasecmp(var, "rtp-hold-timeout-sec")) {
+						int v = atoi(val);
+						if (v >= 0) {
+							profile->rtp_hold_timeout_sec = v;
+						}
+					} else if (!strcasecmp(var, "nonce-ttl")) {
+						profile->nonce_ttl = atoi(val);
+					} else if (!strcasecmp(var, "dialplan")) {
+						profile->dialplan = switch_core_strdup(profile->pool, val);
+					} else if (!strcasecmp(var, "max-calls")) {
+						profile->max_calls = atoi(val);
+					} else if (!strcasecmp(var, "codec-prefs")) {
+						profile->codec_string = switch_core_strdup(profile->pool, val);
+					} else if (!strcasecmp(var, "dtmf-duration")) {
+						int dur = atoi(val);
+						if (dur > 10 && dur < 8000) {
+							profile->dtmf_duration = dur;
+						} else {
+							profile->dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION;
+							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Duration out of bounds, using default of %d!\n", SWITCH_DEFAULT_DTMF_DURATION);
+						}
+					}
+				}
+			}
+			
 			if ((gateways_tag = switch_xml_child(xprofile, "gateways"))) {
 				parse_gateways(profile, gateways_tag);
 			}
@@ -1008,7 +1195,21 @@
 					}
 				}
 			}
-			
+
+			if ((aliases_tag = switch_xml_child(xprofile, "aliases"))) {
+				for (alias_tag = switch_xml_child(aliases_tag, "alias"); alias_tag; alias_tag = alias_tag->next) {
+					char *aname = (char *) switch_xml_attr_soft(alias_tag, "name");
+					if (!switch_strlen_zero(aname)) {
+						
+						if (sofia_glue_add_profile(switch_core_strdup(profile->pool, aname), profile) == SWITCH_STATUS_SUCCESS) {
+							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Alias [%s] for profile [%s]\n", aname, profile->name);
+						} else {
+							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Alias [%s] for profile [%s] (already exists)\n",
+											  aname, profile->name);
+						}
+					}
+				}
+			}
 		}
 	}
 
@@ -1148,7 +1349,7 @@
 						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ODBC IS NOT AVAILABLE!\n");
 #endif
 					} else if (!strcasecmp(var, "user-agent-string")) {
-						profile->user_agent = switch_core_strdup(profile->pool, val);;
+						profile->user_agent = switch_core_strdup(profile->pool, val);
 					} else if (!strcasecmp(var, "dtmf-type")) {
 						if (!strcasecmp(val, "rfc2833")) {
 							profile->dtmf_type = DTMF_2833;
@@ -1400,7 +1601,8 @@
 						if (dur > 10 && dur < 8000) {
 							profile->dtmf_duration = dur;
 						} else {
-							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Duration out of bounds!\n");
+							profile->dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION;
+							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Duration out of bounds, using default of %d!\n", SWITCH_DEFAULT_DTMF_DURATION);
 						}
 
 						/*
@@ -1637,7 +1839,6 @@
 
 	if (gateway) {
 		if (status == 200 || status == 404) {
-			//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "ping success %s\n", gateway->name);
 			if (gateway->state == REG_STATE_FAILED) {
 				gateway->state = REG_STATE_UNREGED;
 				gateway->retry = 0;



More information about the Freeswitch-svn mailing list