From 91ce91dbc6a010ed1e0ca893f60aa5d33eb1a6e1 Mon Sep 17 00:00:00 2001 From: Alexander Traud Date: Mon, 20 Apr 2020 20:11:42 +0200 Subject: [PATCH] chan_sip: externhost/externaddr with non-default TCP/TLS ports. ASTERISK-28372 Reported by: Anton Satskiy ASTERISK-24428 Reported by: sstream Change-Id: I2b7432a9bf3b09dc8515297ff955636db7a6224c --- channels/chan_sip.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index cc25a43a64..edb08e94ad 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -3864,9 +3864,21 @@ static void ast_sip_ouraddrfor(const struct ast_sockaddr *them, struct ast_socka /* for consistency, default to the externaddr port */ externtcpport = ast_sockaddr_port(&externaddr); } + if (!externtcpport) { + externtcpport = ast_sockaddr_port(&sip_tcp_desc.local_address); + } + if (!externtcpport) { + externtcpport = STANDARD_SIP_PORT; + } ast_sockaddr_set_port(us, externtcpport); break; case AST_TRANSPORT_TLS: + if (!externtlsport) { + externtlsport = ast_sockaddr_port(&sip_tls_desc.local_address); + } + if (!externtlsport) { + externtlsport = STANDARD_TLS_PORT; + } ast_sockaddr_set_port(us, externtlsport); break; case AST_TRANSPORT_UDP: @@ -32386,8 +32398,8 @@ static int reload_config(enum channelreloadreason reason) default_primary_transport = AST_TRANSPORT_UDP; ourport_tcp = STANDARD_SIP_PORT; ourport_tls = STANDARD_TLS_PORT; - externtcpport = STANDARD_SIP_PORT; - externtlsport = STANDARD_TLS_PORT; + externtcpport = 0; + externtlsport = 0; sip_cfg.srvlookup = DEFAULT_SRVLOOKUP; global_tos_sip = DEFAULT_TOS_SIP; global_tos_audio = DEFAULT_TOS_AUDIO; @@ -32866,10 +32878,9 @@ static int reload_config(enum channelreloadreason reason) } else if (!strcasecmp(v->name, "externtcpport")) { if (!(externtcpport = port_str2int(v->value, 0))) { ast_log(LOG_WARNING, "Invalid externtcpport value, must be a positive integer between 1 and 65535 at line %d\n", v->lineno); - externtcpport = 0; } } else if (!strcasecmp(v->name, "externtlsport")) { - if (!(externtlsport = port_str2int(v->value, STANDARD_TLS_PORT))) { + if (!(externtlsport = port_str2int(v->value, 0))) { ast_log(LOG_WARNING, "Invalid externtlsport value, must be a positive integer between 1 and 65535 at line %d\n", v->lineno); } } else if (!strcasecmp(v->name, "allow")) { -- 2.47.2