chan_sip: Honor support of Symmetric Response (rport) for SIP requests.
authorAlexander Traud <pabstraud@compuserve.com>
Wed, 5 Oct 2016 09:25:11 +0000 (11:25 +0200)
committerAlexander Traud <pabstraud@compuserve.com>
Wed, 5 Oct 2016 09:25:11 +0000 (11:25 +0200)
In the SIP channel driver chan_sip, the default is "auto_force_rport". When no
NAT was detected, for example in case of IPv6, Asterisk uses the IP address
from the headers within the SIP-REGISTER for subsequent SIP signaling. When
the remote party specifies support for Symmetric Response (RFC 3581) via the
parameter "rport", Asterisk should not extract the port from the SIP headers
but reuse the port of the transport. This did not happen because of a typo.

ASTERISK-26438 #close

Change-Id: If6e7891848aaf96666dee5305695f7c6667cd5a6

channels/chan_sip.c

index b9480f4..47b90d7 100644 (file)
@@ -16819,7 +16819,7 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st
        }
 
        if ((transport_type != AST_TRANSPORT_WS) && (transport_type != AST_TRANSPORT_WSS) &&
-           (!ast_test_flag(&peer->flags[0], SIP_NAT_FORCE_RPORT) && !ast_test_flag(&peer->flags[0], SIP_NAT_RPORT_PRESENT))) {
+           (!ast_test_flag(&peer->flags[0], SIP_NAT_FORCE_RPORT) && !ast_test_flag(&pvt->flags[0], SIP_NAT_RPORT_PRESENT))) {
                /* use the data provided in the Contact header for call routing */
                ast_debug(1, "Store REGISTER's Contact header for call routing.\n");
                /* XXX This could block for a long time XXX */