aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-09-10 23:15:21 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-09-10 23:15:21 +0000
commit8b31f49c4e6b53e1eeff2ba651412bb5879f4748 (patch)
tree50898da0c8a12bb830e9f797087781b42b8a192a /channels
parentdf4dc6b14dac74b3a4009f283d01dcdc8a969a68 (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')
-rw-r--r--channels/chan_iax2.c11
-rw-r--r--channels/chan_sip.c2
2 files changed, 9 insertions, 4 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;
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index eaca16a9b..476145d1f 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2657,7 +2657,7 @@ static struct sip_peer *realtime_peer(const char *newpeername, struct sockaddr_i
if (!strcasecmp(tmp->name, "host")) {
struct hostent *hp;
struct ast_hostent ahp;
- 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;