]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Don't allow transport=tcp when tcpenable=no.
authorWalter Doekes <walter+asterisk@wjd.nu>
Tue, 6 Dec 2011 19:39:26 +0000 (19:39 +0000)
committerWalter Doekes <walter+asterisk@wjd.nu>
Tue, 6 Dec 2011 19:39:26 +0000 (19:39 +0000)
When tcpenable=no, sending to transport=tcp hosts was still allowed.
Resolving the source address wasn't possible and yielded the string
"(null)" in SIP messages. Fixed that and a couple of not-so-correct
log messages.

(closes issue ASTERISK-18837)
Reported by: Andreas Topp

Review: https://reviewboard.asterisk.org/r/1585
Reviewed by: Matt Jordan

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@347166 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 226458fcc1d482bd86fdd1ead0c3a74bbd2c71f8..50675e8d737b8a61a3bad9d6e88027c0c94d1209 100644 (file)
@@ -27088,12 +27088,14 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
 
                                        if (!strncasecmp(trans, "udp", 3)) {
                                                peer->transports |= SIP_TRANSPORT_UDP;
-                                       } else if (!strncasecmp(trans, "tcp", 3)) {
+                                       } else if (sip_cfg.tcp_enabled && !strncasecmp(trans, "tcp", 3)) {
                                                peer->transports |= SIP_TRANSPORT_TCP;
-                                       } else if (!strncasecmp(trans, "tls", 3)) {
+                                       } else if (sip_cfg.tcp_enabled && !strncasecmp(trans, "tls", 3)) {
                                                peer->transports |= SIP_TRANSPORT_TLS;
+                                       } else if (!sip_cfg.tcp_enabled && (!strncasecmp(trans, "tcp", 3) || !strncasecmp(trans, "tls", 3))) {
+                                               ast_log(LOG_WARNING, "'%s' is not a valid transport type when tcpenabled=no. if no other is specified, the defaults from general will be used.\n", trans);
                                        } else {
-                                               ast_log(LOG_NOTICE, "'%s' is not a valid transport type. if no other is specified, udp will be used.\n", trans);
+                                               ast_log(LOG_NOTICE, "'%s' is not a valid transport type. if no other is specified, the defaults from general will be used.\n", trans);
                                        }
 
                                        if (!peer->default_outbound_transport) { /*!< The first transport listed should be default outbound */
@@ -28449,8 +28451,11 @@ static int reload_config(enum channelreloadreason reason)
                ast_log(LOG_WARNING, "To disallow external domains, you need to configure local SIP domains.\n");
                sip_cfg.allow_external_domains = 1;
        }
-       /* If not configured, set default transports */
-       if (default_transports == 0) {
+       /* If not or badly configured, set default transports */
+       if (!sip_cfg.tcp_enabled && ((default_transports & SIP_TRANSPORT_TCP) || (default_transports & SIP_TRANSPORT_TLS))) {
+               ast_log(LOG_WARNING, "Cannot use 'tcp' or 'tls' transport with tcpenable=no. Falling back to 'udp'.\n");
+               default_transports = default_primary_transport = SIP_TRANSPORT_UDP;
+       } else if (default_transports == 0) {
                default_transports = default_primary_transport = SIP_TRANSPORT_UDP;
        }