From 5ee5dccf51d50ec1a32f2e3a80f73c27e55f94ba Mon Sep 17 00:00:00 2001 From: "Michael L. Young" Date: Thu, 17 Oct 2013 20:32:32 +0000 Subject: [PATCH] Fix Setting A chan_sip Dialog's SIP_NAT_FORCE_RPORT Flag A condition was added in a commit to fix ASTERISK-21374, that, if the SIP_PAGE3_NAT_AUTO_RPORT flag was set, to then copy a peer's SIP_NAT_FORCE_RPORT flag to the dialog. This condition should not have been there since it assumed that if Asterisk is in an environment where NAT is involved, that the auto_* nat settings or force_rport setting would be on in the global settings. If the nat setting in the global setting is set to 'nat=no' and then turned on for peers (which is not quite the recommended way, although it is allowed) this flag is never copied to the dialog resulting in problems like, REGISTER replies going to the wrong port. This patch removes this conditional check and will now always use the peer's flag which by this point in the code the checks on whether the peer is behind NAT or not (if using auto_force_rport) have already been run. (closes issue ASTERISK-22236) Reported by: Filip Frank Tested by: Michael L. Young Patches: asterisk-2236-always-set-rport.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2919/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@401167 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 80d7151c02..44f9e0f742 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -16887,9 +16887,8 @@ static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sock } else { set_peer_nat(p, peer); - if (p->natdetected && ast_test_flag(&p->flags[2], SIP_PAGE3_NAT_AUTO_RPORT)) { - ast_copy_flags(&p->flags[0], &peer->flags[0], SIP_NAT_FORCE_RPORT); - } + + ast_copy_flags(&p->flags[0], &peer->flags[0], SIP_NAT_FORCE_RPORT); if (!(res = check_auth(p, req, peer->name, peer->secret, peer->md5secret, SIP_REGISTER, uri2, XMIT_UNRELIABLE))) { if (sip_cancel_destroy(p))