]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 265449 via svnmerge from
authorMark Michelson <mmichelson@digium.com>
Mon, 24 May 2010 21:47:04 +0000 (21:47 +0000)
committerMark Michelson <mmichelson@digium.com>
Mon, 24 May 2010 21:47:04 +0000 (21:47 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

........
  r265449 | mmichelson | 2010-05-24 16:44:30 -0500 (Mon, 24 May 2010) | 11 lines

  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/branches/1.6.2@265450 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 52fd9ce88a8a083ff98c538b100508c3f30570bf..d087ea4e98582a2356cf4061d1ac2f292e88b357 100644 (file)
@@ -4861,17 +4861,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;
                }
        }
@@ -4992,6 +4982,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;