]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_sip: externhost/externaddr with non-default TCP/TLS ports.
authorAlexander Traud <pabstraud@compuserve.com>
Mon, 20 Apr 2020 18:11:42 +0000 (20:11 +0200)
committerGeorge Joseph <gjoseph@digium.com>
Tue, 21 Apr 2020 15:20:26 +0000 (10:20 -0500)
ASTERISK-28372
Reported by: Anton Satskiy

ASTERISK-24428
Reported by: sstream

Change-Id: I2b7432a9bf3b09dc8515297ff955636db7a6224c

channels/chan_sip.c

index 9bc282b925f58a8639ef960b2ead5a7eff8d9b3c..afc555da6a51a10098975906cfd1cbe9c348df1d 100644 (file)
@@ -3914,9 +3914,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:
@@ -32652,8 +32664,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;
@@ -33144,10 +33156,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")) {