[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