summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index ab25f1c46..a7713009e 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -27870,12 +27870,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 */
@@ -29281,8 +29283,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;
}