We need to set the address we want to match against before we actually do the match..
authorJason Parker <jparker@digium.com>
Tue, 11 Dec 2007 21:58:26 +0000 (21:58 +0000)
committerJason Parker <jparker@digium.com>
Tue, 11 Dec 2007 21:58:26 +0000 (21:58 +0000)
Closes issue #11518.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@92421 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 99adad2..19d3dba 100644 (file)
@@ -2200,15 +2200,17 @@ static void ast_sip_ouraddrfor(struct in_addr *them, struct sockaddr_in *us)
         *    when passed to ast_apply_ha() so it does need to be remapped.
         *    This fourth condition is checked later.
         */
-       int want_remap = localaddr &&
-               (externip.sin_addr.s_addr || stunaddr.sin_addr.s_addr) &&
-               ast_apply_ha(localaddr, &theirs) == AST_SENSE_ALLOW ;
+       int want_remap;
 
        *us = internip;         /* starting guess for the internal address */
        /* now ask the system what would it use to talk to 'them' */
        ast_ouraddrfor(them, &us->sin_addr);
        theirs.sin_addr = *them;
 
+       want_remap = localaddr &&
+               (externip.sin_addr.s_addr || stunaddr.sin_addr.s_addr) &&
+               ast_apply_ha(localaddr, &theirs) == AST_SENSE_ALLOW ;
+
        if (want_remap &&
            (!global_matchexterniplocally || !ast_apply_ha(localaddr, us)) ) {
                /* if we used externhost or stun, see if it is time to refresh the info */