From 294a6016b8cff9289c1eea25990fdc7d1fe3112f Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 21 Nov 2012 10:32:41 -0600 Subject: [PATCH] FS-4859 --- src/mod/endpoints/mod_sofia/mod_sofia.h | 1 + src/mod/endpoints/mod_sofia/sofia.c | 14 ++++++++++++-- src/mod/endpoints/mod_sofia/sofia_glue.c | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 5240553caa..45f73c5866 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -600,6 +600,7 @@ struct sofia_profile { sofia_dtmf_t dtmf_type; int auto_restart; switch_port_t sip_port; + switch_port_t extsipport; switch_port_t tls_sip_port; int tls_version; unsigned int tls_timeout; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index e1aa82a37e..ab45ed78b3 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -3988,6 +3988,9 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name) ip = strcasecmp(val, "auto") ? val : mod_sofia_globals.guess_ip; } profile->sipip = switch_core_strdup(profile->pool, ip); + } else if (!strcasecmp(var, "ext-sip-port") && val) { + int tmp = atoi(val); + if (tmp > 0) profile->extsipport = tmp; } else if (!strcasecmp(var, "ext-sip-ip")) { if (!zstr(val)) { char *ip = mod_sofia_globals.guess_ip; @@ -4002,8 +4005,11 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name) } else if (!strcasecmp(val, "auto-nat")) { ip = NULL; } else if (strcasecmp(val, "auto")) { - switch_port_t port = 0; - if (sofia_glue_ext_address_lookup(profile, NULL, &myip, &port, val, profile->pool) == SWITCH_STATUS_SUCCESS) { + if (!profile->extsipport) { + profile->extsipport = profile->sip_port; + } + + if (sofia_glue_ext_address_lookup(profile, NULL, &myip, &profile->extsipport, val, profile->pool) == SWITCH_STATUS_SUCCESS) { ip = myip; sofia_clear_pflag(profile, PFLAG_AUTO_NAT); } else { @@ -4687,6 +4693,10 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name) } done: + if (!profile->extsipport) { + profile->extsipport = profile->sip_port; + } + if (profile_already_started) { sofia_glue_release_profile(profile_already_started); } diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 37caeba651..31ea2bb66b 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -1373,7 +1373,7 @@ const char *sofia_glue_transport2str(const sofia_transport_t tp) char *sofia_glue_create_external_via(switch_core_session_t *session, sofia_profile_t *profile, sofia_transport_t transport) { return sofia_glue_create_via(session, profile->extsipip, (sofia_glue_transport_has_tls(transport)) - ? profile->tls_sip_port : profile->sip_port, transport); + ? profile->tls_sip_port : profile->extsipport, transport); } char *sofia_glue_create_via(switch_core_session_t *session, const char *ip, switch_port_t port, sofia_transport_t transport)