--- chan_sip.c 2004-12-24 00:18:36.000000000 -0500 +++ /usr/src/asterisk-1.0.3/asterisk/channels/chan_sip.c 2004-12-23 21:23:53.000000000 -0500 @@ -555,6 +555,7 @@ static struct sockaddr_in bindaddr; static struct sockaddr_in externip; +static struct sockaddr_in internip; static struct ast_ha *localaddr; static struct ast_frame *sip_read(struct ast_channel *ast); @@ -634,6 +635,8 @@ ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr); ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf); } + else if (internip.sin_addr.s_addr) + memcpy(us, &internip.sin_addr, sizeof(struct in_addr)); else if (bindaddr.sin_addr.s_addr) memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr)); else @@ -8691,6 +8694,11 @@ localaddr = na; } else if (!strcasecmp(v->name, "localmask")) { ast_log(LOG_WARNING, "Use of localmask is no long supported -- use localnet with mask syntax\n"); + } else if (!strcasecmp(v->name, "internip")) { + if (!(hp = ast_gethostbyname(v->value, &ahp))) + ast_log(LOG_WARNING, "Invalid address for internip keyword: %s\n", v->value); + else + memcpy(&internip.sin_addr, hp->h_addr, sizeof(internip.sin_addr)); } else if (!strcasecmp(v->name, "externip")) { if (!(hp = ast_gethostbyname(v->value, &ahp))) ast_log(LOG_WARNING, "Invalid address for externip keyword: %s\n", v->value);