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
This commit is contained in:
traud
2020-04-01 18:52:58 +02:00
committed by Friendly Automation
parent 52ecbbd014
commit da9554d925

View File

@@ -3934,6 +3934,7 @@ 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. */ /* no remapping, but we bind to a specific address, so use it. */
switch (p->socket.type) { switch (p->socket.type) {
case AST_TRANSPORT_TCP: case AST_TRANSPORT_TCP:
if (!ast_sockaddr_isnull(&sip_tcp_desc.local_address)) {
if (!ast_sockaddr_is_any(&sip_tcp_desc.local_address)) { if (!ast_sockaddr_is_any(&sip_tcp_desc.local_address)) {
ast_sockaddr_copy(us, ast_sockaddr_copy(us,
&sip_tcp_desc.local_address); &sip_tcp_desc.local_address);
@@ -3942,7 +3943,9 @@ static void ast_sip_ouraddrfor(const struct ast_sockaddr *them, struct ast_socka
ast_sockaddr_port(&sip_tcp_desc.local_address)); ast_sockaddr_port(&sip_tcp_desc.local_address));
} }
break; break;
} /* fall through on purpose */
case AST_TRANSPORT_TLS: case AST_TRANSPORT_TLS:
if (!ast_sockaddr_isnull(&sip_tls_desc.local_address)) {
if (!ast_sockaddr_is_any(&sip_tls_desc.local_address)) { if (!ast_sockaddr_is_any(&sip_tls_desc.local_address)) {
ast_sockaddr_copy(us, ast_sockaddr_copy(us,
&sip_tls_desc.local_address); &sip_tls_desc.local_address);
@@ -3951,6 +3954,7 @@ static void ast_sip_ouraddrfor(const struct ast_sockaddr *them, struct ast_socka
ast_sockaddr_port(&sip_tls_desc.local_address)); ast_sockaddr_port(&sip_tls_desc.local_address));
} }
break; break;
} /* fall through on purpose */
case AST_TRANSPORT_UDP: case AST_TRANSPORT_UDP:
/* fall through on purpose */ /* fall through on purpose */
default: default:
@@ -16249,9 +16253,16 @@ static int transmit_register(struct sip_registry *r, int sipmethod, const char *
/* Set transport and port so the correct contact is built */ /* Set transport and port so the correct contact is built */
set_socket_transport(&p->socket, r->transport); set_socket_transport(&p->socket, r->transport);
if (r->transport == AST_TRANSPORT_TLS || r->transport == AST_TRANSPORT_TCP) { if (r->transport == AST_TRANSPORT_TLS || r->transport == AST_TRANSPORT_TCP) {
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 = p->socket.port =
htons(ast_sockaddr_port(&sip_tcp_desc.local_address)); htons(ast_sockaddr_port(&sip_tcp_desc.local_address));
} }
}
/* /*
check which address we should use in our contact header check which address we should use in our contact header