]> 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)
committerAlexander Traud <pabstraud@compuserve.com>
Mon, 20 Apr 2020 18:44:29 +0000 (13:44 -0500)
ASTERISK-28372
Reported by: Anton Satskiy

ASTERISK-24428
Reported by: sstream

Change-Id: I2b7432a9bf3b09dc8515297ff955636db7a6224c

channels/chan_sip.c

index cc25a43a6476153619919c455b38ffe039c97f3d..edb08e94ada5481a39589a5c4f2633435abd7e65 100644 (file)
@@ -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")) {