From: traud Date: Wed, 1 Apr 2020 16:52:58 +0000 (+0200) Subject: chan_sip: TCP/TLS client without server. X-Git-Tag: 17.4.0-rc1~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=223da4dfa1a760f408b1ab436e1d10205a3f0487;p=thirdparty%2Fasterisk.git chan_sip: TCP/TLS client without server. It is possible to configure a TCP/TLS client without having a TCP/TLS server. In that case, no error or warning was printed but the headers Contact and Via in SIP REGISTER were "(null)". ASTERISK-28798 Change-Id: I387ca5cb6a65f1eb675a29c5e41df8ec6c242ab2 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index fb3581eb51..078cf102f1 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -3934,23 +3934,27 @@ static void ast_sip_ouraddrfor(const struct ast_sockaddr *them, struct ast_socka /* no remapping, but we bind to a specific address, so use it. */ switch (p->socket.type) { case AST_TRANSPORT_TCP: - if (!ast_sockaddr_is_any(&sip_tcp_desc.local_address)) { - ast_sockaddr_copy(us, - &sip_tcp_desc.local_address); - } else { - ast_sockaddr_set_port(us, - ast_sockaddr_port(&sip_tcp_desc.local_address)); - } - break; + if (!ast_sockaddr_isnull(&sip_tcp_desc.local_address)) { + if (!ast_sockaddr_is_any(&sip_tcp_desc.local_address)) { + ast_sockaddr_copy(us, + &sip_tcp_desc.local_address); + } else { + ast_sockaddr_set_port(us, + ast_sockaddr_port(&sip_tcp_desc.local_address)); + } + break; + } /* fall through on purpose */ case AST_TRANSPORT_TLS: - if (!ast_sockaddr_is_any(&sip_tls_desc.local_address)) { - ast_sockaddr_copy(us, - &sip_tls_desc.local_address); - } else { - ast_sockaddr_set_port(us, - ast_sockaddr_port(&sip_tls_desc.local_address)); - } - break; + if (!ast_sockaddr_isnull(&sip_tls_desc.local_address)) { + if (!ast_sockaddr_is_any(&sip_tls_desc.local_address)) { + ast_sockaddr_copy(us, + &sip_tls_desc.local_address); + } else { + ast_sockaddr_set_port(us, + ast_sockaddr_port(&sip_tls_desc.local_address)); + } + break; + } /* fall through on purpose */ case AST_TRANSPORT_UDP: /* fall through on purpose */ default: @@ -16249,8 +16253,15 @@ static int transmit_register(struct sip_registry *r, int sipmethod, const char * /* Set transport and port so the correct contact is built */ set_socket_transport(&p->socket, r->transport); if (r->transport == AST_TRANSPORT_TLS || r->transport == AST_TRANSPORT_TCP) { - p->socket.port = - htons(ast_sockaddr_port(&sip_tcp_desc.local_address)); + if (ast_sockaddr_isnull(&sip_tcp_desc.local_address)) { + ast_log(LOG_ERROR, + "TCP/TLS clients without server were not tested.\n"); + ast_log(LOG_ERROR, + "Please, follow-up and report at issue 28798.\n"); + } else { + p->socket.port = + htons(ast_sockaddr_port(&sip_tcp_desc.local_address)); + } } /*