Merged revisions 44312 via svnmerge from
authorMatt O'Gorman <mogorman@digium.com>
Tue, 3 Oct 2006 22:36:51 +0000 (22:36 +0000)
committerMatt O'Gorman <mogorman@digium.com>
Tue, 3 Oct 2006 22:36:51 +0000 (22:36 +0000)
https://svn.digium.com/svn/asterisk/branches/1.4

........
r44312 | mogorman | 2006-10-03 17:35:43 -0500 (Tue, 03 Oct 2006) | 2 lines

fix issue with dialing client without resource.

........

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

channels/chan_gtalk.c
res/res_jabber.c

index c5a8483..fa8b57e 100644 (file)
@@ -880,8 +880,9 @@ static struct gtalk_pvt *gtalk_alloc(struct gtalk *client, const char *us, const
                data = ast_strdupa((char *) tmp->us);
                exten = strsep(&data, "/");
                free(data);
-       }
-       ast_copy_string(tmp->exten, exten, sizeof(tmp->exten));
+       } else
+               exten = tmp->us;
+       ast_copy_string(tmp->exten,  exten, sizeof(tmp->exten));
        ast_mutex_init(&tmp->lock);
        ast_mutex_lock(&gtalklock);
        tmp->next = client->p;
@@ -1515,6 +1516,7 @@ static int gtalk_do_reload(int fd, int argc, char **argv)
        ast_verbose("IT DOES WORK!\n");
        return RESULT_SUCCESS;
 }
+
 static int gtalk_parser(void *data, ikspak *pak)
 {
        struct gtalk *client = ASTOBJ_REF((struct gtalk *) data);
@@ -1540,6 +1542,7 @@ static int gtalk_parser(void *data, ikspak *pak)
        ASTOBJ_UNREF(client, gtalk_member_destroy);
        return IKS_FILTER_EAT;
 }
+
 /* Not using this anymore probably take out soon 
 static struct gtalk_candidate *gtalk_create_candidate(char *args)
 {
@@ -1630,6 +1633,7 @@ static int gtalk_create_member(char *label, struct ast_variable *var, int allowg
                                                                        IKS_PAK_IQ, IKS_RULE_FROM_PARTIAL, member->user,
                                                                        IKS_RULE_NS, "http://www.google.com/session",
                                                                        IKS_RULE_DONE);
+
                        } else {
                                ast_log(LOG_ERROR, "connection referenced not found!\n");
                                return 0;
index 3340423..e20fa95 100644 (file)
@@ -871,7 +871,6 @@ static int aji_client_info_handler(void *data, ikspak *pak)
        struct aji_buddy *buddy = ASTOBJ_CONTAINER_FIND(&client->buddies, pak->from->partial);
 
        resource = aji_find_resource(buddy, pak->from->resource);
-
        if (pak->subtype == IKS_TYPE_RESULT) {
                if (!resource) {
                        ast_log(LOG_NOTICE,"JABBER: Received client info from %s when not requested.\n", pak->from->full);
@@ -927,13 +926,26 @@ static int aji_client_info_handler(void *data, ikspak *pak)
 static int aji_dinfo_handler(void *data, ikspak *pak)
 {
        struct aji_client *client = ASTOBJ_REF((struct aji_client *) data);
-       char *node = NULL, *type = NULL;
-       type = iks_find_attrib(pak->x,"type");
-       if (!strcasecmp(type,"error")) {
+       char *node = NULL;
+       struct aji_resource *resource = NULL;
+       struct aji_buddy *buddy = ASTOBJ_CONTAINER_FIND(&client->buddies, pak->from->partial);
+
+       resource = aji_find_resource(buddy, pak->from->resource);
+       if (pak->subtype == IKS_TYPE_ERROR) {
                ast_log(LOG_WARNING, "Recieved error from a client, turn on jabber debug!\n");
                return IKS_FILTER_EAT;
        }
-       if (!strcasecmp(type,"get") && !(node = iks_find_attrib(pak->query, "node"))) {
+       if (pak->subtype == IKS_TYPE_RESULT) {
+               if (!resource) {
+                       ast_log(LOG_NOTICE,"JABBER: Received client info from %s when not requested.\n", pak->from->full);
+                       ASTOBJ_UNREF(client, aji_client_destroy);
+                       return IKS_FILTER_EAT;
+               }
+               if (iks_find_with_attrib(pak->query, "feature", "var", "http://www.google.com/xmpp/protocol/voice/v1")) {
+                       resource->cap->jingle = 1;
+               } else
+                       resource->cap->jingle = 0;
+       } else if (pak->subtype == IKS_TYPE_GET && !(node = iks_find_attrib(pak->query, "node"))) {
                iks *iq, *query, *identity, *disco, *reg, *commands, *gateway, *version, *vcard, *search;
 
                iq = iks_new("iq");
@@ -999,7 +1011,7 @@ static int aji_dinfo_handler(void *data, ikspak *pak)
                if (search)
                        iks_delete(search);
 
-       } else if (!strcasecmp(type,"get") && !strcasecmp(node, "http://jabber.org/protocol/commands")) {
+       } else if (pak->subtype == IKS_TYPE_GET && !strcasecmp(node, "http://jabber.org/protocol/commands")) {
                iks *iq, *query, *confirm;
                iq = iks_new("iq");
                query = iks_new("query");
@@ -1028,7 +1040,7 @@ static int aji_dinfo_handler(void *data, ikspak *pak)
                if (confirm)
                        iks_delete(confirm);
 
-       } else if (!strcasecmp(type,"get") && !strcasecmp(node, "confirmaccount")) {
+       } else if (pak->subtype == IKS_TYPE_GET && !strcasecmp(node, "confirmaccount")) {
                iks *iq, *query, *feature;
 
                iq = iks_new("iq");