From: Walter Doekes Date: Tue, 6 Dec 2011 19:42:53 +0000 (+0000) Subject: Don't allow transport=tcp when tcpenable=no. X-Git-Tag: 10.1.0-rc1~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b69c9ee28d79814d4f58e99e916c12f65fcaea6;p=thirdparty%2Fasterisk.git Don't allow transport=tcp when tcpenable=no. 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 ........ Merged revisions 347166 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@347167 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 8d5de84b44..3a6634fd67 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -27800,12 +27800,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 */ @@ -29194,8 +29196,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; }