diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 1319c0dda1..cc5f3c5060 100755 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -645,10 +645,9 @@ static int iax2_getpeername(struct sockaddr_in sin, char *host, int len, int loc return res; } -static struct chan_iax2_pvt *new_iax(struct sockaddr_in *sin, int lockpeer) +static struct chan_iax2_pvt *new_iax(struct sockaddr_in *sin, int lockpeer, const char *host) { struct chan_iax2_pvt *tmp; - char iabuf[INET_ADDRSTRLEN]; tmp = malloc(sizeof(struct chan_iax2_pvt)); if (tmp) { memset(tmp, 0, sizeof(struct chan_iax2_pvt)); @@ -663,8 +662,7 @@ static struct chan_iax2_pvt *new_iax(struct sockaddr_in *sin, int lockpeer) tmp->initid = -1; /* strncpy(tmp->context, context, sizeof(tmp->context)-1); */ strncpy(tmp->exten, "s", sizeof(tmp->exten)-1); - if (!iax2_getpeername(*sin, tmp->host, sizeof(tmp->host), lockpeer)) - snprintf(tmp->host, sizeof(tmp->host), "%s:%d", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port)); + strncpy(tmp->host, host, sizeof(tmp->host)-1); } return tmp; } @@ -830,6 +828,8 @@ static int find_callno(unsigned short callno, unsigned short dcallno, struct soc int res = 0; int x; struct timeval now; + char iabuf[INET_ADDRSTRLEN]; + char host[80]; if (new <= NEW_ALLOW) { /* Look for an existing connection first */ for (x=1;(res < 1) && (x= NEW_ALLOW)) { + if (!iax2_getpeername(*sin, host, sizeof(host), lockpeer)) + snprintf(host, sizeof(host), "%s:%d", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr), ntohs(sin->sin_port)); gettimeofday(&now, NULL); for (x=1;x