diff options
Diffstat (limited to 'channels')
-rwxr-xr-x | channels/chan_iax2.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 1319c0dda..cc5f3c506 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<maxnontrunkcall);x++) { @@ -854,6 +854,8 @@ static int find_callno(unsigned short callno, unsigned short dcallno, struct soc } } if ((res < 1) && (new >= 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<TRUNK_CALL_START;x++) { /* Find first unused call number that hasn't been used in a while */ @@ -866,7 +868,7 @@ static int find_callno(unsigned short callno, unsigned short dcallno, struct soc ast_log(LOG_WARNING, "No more space\n"); return -1; } - iaxs[x] = new_iax(sin, lockpeer); + iaxs[x] = new_iax(sin, lockpeer, host); update_max_nontrunk(); if (iaxs[x]) { if (option_debug) |