diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-09-10 23:15:21 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-09-10 23:15:21 +0000 |
commit | 8b31f49c4e6b53e1eeff2ba651412bb5879f4748 (patch) | |
tree | 50898da0c8a12bb830e9f797087781b42b8a192a /channels/chan_iax2.c | |
parent | df4dc6b14dac74b3a4009f283d01dcdc8a969a68 (diff) |
Backport realtime fix to 1.4
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@217917 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_iax2.c')
-rw-r--r-- | channels/chan_iax2.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 1aca432db..e834c06c9 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -783,6 +783,7 @@ AST_MUTEX_DEFINE_STATIC(dpcache_lock); static void reg_source_db(struct iax2_peer *p); static struct iax2_peer *realtime_peer(const char *peername, struct sockaddr_in *sin); +static struct iax2_user *realtime_user(const char *username, struct sockaddr_in *sin); static int ast_cli_netstats(struct mansession *s, int fd, int limit_fmt); @@ -1783,7 +1784,11 @@ static int calltoken_required(struct sockaddr_in *sin, const char *name, int sub /* ----- Case 2 ----- */ if ((subclass == IAX_COMMAND_NEW) && (user = find_user(find))) { calltoken_required = user->calltoken_required; - } else if ((subclass != IAX_COMMAND_NEW) && (peer = find_peer(find, 1))) { + } else if ((subclass == IAX_COMMAND_NEW) && (user = realtime_user(find, sin))) { + calltoken_required = user->calltoken_required; + } else if ((subclass != IAX_COMMAND_NEW) && (peer = find_peer(find, 0))) { + calltoken_required = peer->calltoken_required; + } else if ((subclass != IAX_COMMAND_NEW) && (peer = realtime_peer(find, sin))) { calltoken_required = peer->calltoken_required; } @@ -3686,7 +3691,7 @@ static struct iax2_peer *realtime_peer(const char *peername, struct sockaddr_in if (!strcasecmp(tmp->name, "host")) { struct ast_hostent ahp; struct hostent *hp; - if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) { + if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) { /* No match */ ast_variables_destroy(var); var = NULL; @@ -3800,7 +3805,7 @@ static struct iax2_user *realtime_user(const char *username, struct sockaddr_in if (!strcasecmp(tmp->name, "host")) { struct ast_hostent ahp; struct hostent *hp; - if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) { + if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) { /* No match */ ast_variables_destroy(var); var = NULL; |