From f908dd984cdf3bb6b1804ec780612bfc58b786e1 Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Mon, 24 May 2010 21:44:30 +0000 Subject: [PATCH] Allow type=user SIP endpoints to be loaded properly from realtime. (closes issue #16021) Reported by: Guggemand Patches: realtime-type-fix.patch uploaded by Guggemand (license 897) (altered by me slightly to avoid ref leaks) Tested by: Guggemand git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@265449 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index e3a79fbac0..51896353fa 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -4379,17 +4379,7 @@ static struct sip_peer *realtime_peer(const char *newpeername, struct sockaddr_i } for (tmp = var; tmp; tmp = tmp->next) { - /* If this is type=user, then skip this object. */ - if (!strcasecmp(tmp->name, "type") && - !strcasecmp(tmp->value, "user")) { - if(peerlist) - ast_config_destroy(peerlist); - else { - ast_variables_destroy(var); - ast_variables_destroy(varregs); - } - return NULL; - } else if (!newpeername && !strcasecmp(tmp->name, "name")) { + if (!newpeername && !strcasecmp(tmp->name, "name")) { newpeername = tmp->value; } } @@ -4510,6 +4500,24 @@ static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin, int if (!p && (realtime || devstate_only)) { p = realtime_peer(peer, sin, devstate_only); + if (p) { + switch (which_objects) { + case FINDUSERS: + if (!(p->type & SIP_TYPE_USER)) { + unref_peer(p, "Wrong type of realtime SIP endpoint"); + return NULL; + } + break; + case FINDPEERS: + if (!(p->type & SIP_TYPE_PEER)) { + unref_peer(p, "Wrong type of realtime SIP endpoint"); + return NULL; + } + break; + case FINDALLDEVICES: + break; + } + } } return p;