OKAY - Only replace our IP address in the outgoing SIP messages if the actual source...
authorJoshua Colp <jcolp@digium.com>
Wed, 31 May 2006 16:31:41 +0000 (16:31 +0000)
committerJoshua Colp <jcolp@digium.com>
Wed, 31 May 2006 16:31:41 +0000 (16:31 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@31050 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index f338d95..d3f329d 100644 (file)
@@ -1456,11 +1456,16 @@ static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
         * apply it to their address to see if we need to substitute our
         * externip or can get away with our internal bindaddr
         */
-       struct sockaddr_in theirs;
+       struct sockaddr_in theirs, ours;
+
+       /* Get our local information */
+       ast_ouraddrfor(them, us);
        theirs.sin_addr = *them;
+       ours.sin_addr = *us;
 
        if (localaddr && externip.sin_addr.s_addr &&
-          ast_apply_ha(localaddr, &theirs)) {
+           ast_apply_ha(localaddr, &theirs) &&
+           !ast_apply_ha(localaddr, &ours)) {
                if (externexpire && time(NULL) >= externexpire) {
                        struct ast_hostent ahp;
                        struct hostent *hp;
@@ -1480,8 +1485,6 @@ static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
                }
        } else if (bindaddr.sin_addr.s_addr)
                *us = bindaddr.sin_addr;
-       else
-               return ast_ouraddrfor(them, us);
        return 0;
 }