update
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9122 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
8362b55897
commit
c395c05458
|
@ -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>
|
||||
|
||||
|
|
|
@ -1201,22 +1201,22 @@ static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t
|
|||
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 @@ static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t
|
|||
|
||||
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 @@ static switch_status_t cmd_profile(char **argv, int argc, switch_stream_handle_t
|
|||
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")) {
|
||||
|
|
|
@ -157,7 +157,9 @@ typedef enum {
|
|||
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 {
|
||||
|
|
|
@ -982,6 +982,8 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile)
|
|||
|
||||
/* 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 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile)
|
|||
} 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 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
if ((gateways_tag = switch_xml_child(xprofile, "gateways"))) {
|
||||
parse_gateways(profile, gateways_tag);
|
||||
}
|
||||
|
@ -1333,6 +1366,7 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
|||
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 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
|||
} 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 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -442,6 +442,12 @@ switch_status_t sofia_glue_ext_address_lookup(sofia_profile_t *profile, private_
|
|||
|
||||
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 @@ switch_status_t sofia_glue_ext_address_lookup(sofia_profile_t *profile, private_
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue