only auto-restart if the binded ip changes

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11428 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale
2009-01-22 23:07:31 +00:00
parent 7a1b866958
commit f230b69676
4 changed files with 55 additions and 1 deletions
+42
View File
@@ -2756,6 +2756,48 @@ static void general_event_handler(switch_event_t *event)
const char *cond = switch_event_get_header(event, "condition");
if (cond && !strcmp(cond, "network-address-change") && mod_sofia_globals.auto_restart) {
const char *old_ip4 = switch_event_get_header_nil(event, "network-address-previous-v4");
const char *new_ip4 = switch_event_get_header_nil(event, "network-address-change-v4");
const char *old_ip6 = switch_event_get_header_nil(event, "network-address-previous-v6");
const char *new_ip6 = switch_event_get_header_nil(event, "network-address-change-v6");
switch_hash_index_t *hi;
const void *var;
void *val;
sofia_profile_t *profile;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "IP change detected [%s]->[%s] [%s]->[%s]\n", old_ip4, new_ip4, old_ip6, new_ip6);
switch_mutex_lock(mod_sofia_globals.hash_mutex);
if (mod_sofia_globals.profile_hash) {
for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) {
int rb = 0;
switch_hash_this(hi, &var, NULL, &val);
if ((profile = (sofia_profile_t *) val) && profile->auto_restart) {
if (!strcmp(profile->sipip, old_ip4)) {
profile->sipip = switch_core_strdup(profile->pool, new_ip4);
rb++;
}
if (!strcmp(profile->rtpip, old_ip4)) {
profile->rtpip = switch_core_strdup(profile->pool, new_ip4);
rb++;
}
if (!strcmp(profile->sipip, old_ip6)) {
profile->sipip = switch_core_strdup(profile->pool, new_ip6);
rb++;
}
if (!strcmp(profile->rtpip, old_ip6)) {
profile->rtpip = switch_core_strdup(profile->pool, new_ip6);
rb++;
}
if (rb) {
sofia_set_pflag_locked(profile, PFLAG_RESPAWN);
sofia_clear_pflag_locked(profile, PFLAG_RUNNING);
}
}
}
}
sofia_glue_restart_all_profiles();
}
+1
View File
@@ -384,6 +384,7 @@ struct sofia_profile {
char *presence_hosts;
char *challenge_realm;
sofia_dtmf_t dtmf_type;
int auto_restart;
int sip_port;
int tls_sip_port;
int tls_version;
+6 -1
View File
@@ -1279,6 +1279,8 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile)
parse_rtp_bugs(profile, val);
} else if (!strcasecmp(var, "user-agent-string")) {
profile->user_agent = switch_core_strdup(profile->pool, val);
} else if (!strcasecmp(var, "auto-restart")) {
profile->auto_restart = switch_true(val);
} else if (!strcasecmp(var, "dtmf-type")) {
if (!strcasecmp(val, "rfc2833")) {
profile->dtmf_type = DTMF_2833;
@@ -1688,7 +1690,8 @@ switch_status_t config_sofia(int reload, char *profile_name)
profile->rport_level = 1;
profile->pflags |= PFLAG_STUN_ENABLED;
profile->pflags |= PFLAG_DISABLE_100REL;
profile->auto_restart = 1;
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");
@@ -1711,6 +1714,8 @@ switch_status_t config_sofia(int reload, char *profile_name)
#endif
} else if (!strcasecmp(var, "user-agent-string")) {
profile->user_agent = switch_core_strdup(profile->pool, val);
} else if (!strcasecmp(var, "auto-restart")) {
profile->auto_restart = switch_true(val);
} else if (!strcasecmp(var, "dtmf-type")) {
if (!strcasecmp(val, "rfc2833")) {
profile->dtmf_type = DTMF_2833;