From 23db04ed93d6d8332881dc539b55a7c46d33b17c Mon Sep 17 00:00:00 2001 From: Thierry Magnien Date: Wed, 26 Apr 2017 14:58:44 +0200 Subject: [PATCH] channels/chan_sip.c: use binding IP address for outgoing TCP SIP connections For outgoing TCP connections, Asterisk uses the first IP address of the interface instead of the IP address we asked him to bind to. ASTERISK-26922 #close Reported-by: Ksenia Change-Id: I43c71ca89211dbf1838e5bcdb9be8d06d98e54eb --- channels/chan_sip.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index ea77aff14c..2c5d3c3140 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -29224,6 +29224,17 @@ static int sip_prepare_socket(struct sip_pvt *p) } } + /* If a bind address has been specified, use it */ + if ((s->type == AST_TRANSPORT_TLS) && !ast_sockaddr_isnull(&sip_tls_desc.local_address)) { + ca->local_address = sip_tls_desc.local_address; + } + else if ((s->type == AST_TRANSPORT_TCP) && !ast_sockaddr_isnull(&sip_tcp_desc.local_address)) { + ca->local_address = sip_tcp_desc.local_address; + } + /* Reset tcp source port to zero to let system pick a random one */ + if (!ast_sockaddr_isnull(&ca->local_address)) { + ast_sockaddr_set_port(&ca->local_address, 0); + } /* Create a client connection for address, this does not start the connection, just sets it up. */ if (!(s->tcptls_session = ast_tcptls_client_create(ca))) { goto create_tcptls_session_fail; -- 2.47.2