diff options
author | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-31 16:31:41 +0000 |
---|---|---|
committer | file <file@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-31 16:31:41 +0000 |
commit | e625fbb2b0a0a5c31c3c18cf4ee225d54b73c2ba (patch) | |
tree | be222358eb89dd774ca196e961a1fd7ce994204b /channels/chan_sip.c | |
parent | 8f8a70f072a0b053a7b8a2e2a3f0d6d956d26daa (diff) |
OKAY - Only replace our IP address in the outgoing SIP messages if the actual source address is within the specified local network. (issue #7051 reported by Luke-Jr with mods by me)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@31050 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_sip.c')
-rw-r--r-- | channels/chan_sip.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index f338d95e9..d3f329deb 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -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; } |