]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Automatically create new buddy upon reception of a presence stanza of
authorPhilippe Sultan <philippe.sultan@gmail.com>
Fri, 29 Feb 2008 13:05:15 +0000 (13:05 +0000)
committerPhilippe Sultan <philippe.sultan@gmail.com>
Fri, 29 Feb 2008 13:05:15 +0000 (13:05 +0000)
type subscribed.

(closes issue #12066)
Reported by: ffadaie
Patches:
      branch-1.4-12066-1.diff uploaded by phsultan (license 73)
      trunk-12066-1.diff uploaded by phsultan (license 73)
Tested by: ffadaie, phsultan

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@105209 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_jabber.c

index 5d57eba80f375e002d5f1a9ba9e2dc713ed88eb2..37ef5a8414abf1443c38f2ba62d443c962b08b5c 100644 (file)
@@ -1385,8 +1385,11 @@ static void aji_handle_presence(struct aji_client *client, ikspak *pak)
  */
 static void aji_handle_subscribe(struct aji_client *client, ikspak *pak)
 {
-       if(pak->subtype == IKS_TYPE_SUBSCRIBE) { 
-               iks *presence = NULL, *status = NULL;
+       iks *presence = NULL, *status = NULL;
+       struct aji_buddy* buddy = NULL;
+
+       switch (pak->subtype) { 
+       case IKS_TYPE_SUBSCRIBE:
                presence = iks_new("presence");
                status = iks_new("status");
                if(presence && status) {
@@ -1406,24 +1409,14 @@ static void aji_handle_subscribe(struct aji_client *client, ikspak *pak)
                        iks_delete(status);
                if(client->component)
                        aji_set_presence(client, pak->from->full, iks_find_attrib(pak->x, "to"), 1, client->statusmessage);
-       }
-       if (option_verbose > 4) {
-               switch (pak->subtype) {
-               case IKS_TYPE_SUBSCRIBE:
-                       ast_verbose(VERBOSE_PREFIX_3 "JABBER: This is a subcription of type %i\n", pak->subtype);
-                       break;
-               case IKS_TYPE_SUBSCRIBED:
-                       ast_verbose(VERBOSE_PREFIX_3 "JABBER: This is a subcription of type %i\n", pak->subtype);
-                       break;
-               case IKS_TYPE_UNSUBSCRIBE:
-                       ast_verbose(VERBOSE_PREFIX_3 "JABBER: This is a subcription of type %i\n", pak->subtype);
-                       break;
-               case IKS_TYPE_UNSUBSCRIBED:
-                       ast_verbose(VERBOSE_PREFIX_3 "JABBER: This is a subcription of type %i\n", pak->subtype);
-                       break;
-               default:                                /*IKS_TYPE_ERROR: */
+       case IKS_TYPE_SUBSCRIBED:
+               buddy = ASTOBJ_CONTAINER_FIND(&client->buddies, pak->from->partial);
+               if (!buddy && pak->from->partial) {
+                       aji_create_buddy(pak->from->partial, client);
+               }
+       default:
+               if (option_verbose > 4) {
                        ast_verbose(VERBOSE_PREFIX_3 "JABBER: This is a subcription of type %i\n", pak->subtype);
-                       break;
                }
        }
 }