aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/jabber/jabber_util.c
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2015-10-19 20:23:30 -0300
committerdequis <dx@dxzone.com.ar>2015-10-21 03:05:01 -0300
commite4145d9e9449d1808db303bc0f5c3df4be3ca17e (patch)
treec809430875f1cd57b681d0d1824affb095c57f6d /protocols/jabber/jabber_util.c
parent532efdfab801ac28c0ad9f401ac3da991806c7aa (diff)
jabber: Fix incoming google talk typing notifications
jabber_buddy_by_jid() does the following: head = g_hash_table_lookup(jd->buddies, jid); bud = (head && head->next) ? head->next : head; 'head' has the one without resource, 'bud' has the first resource. So if a resource is available, it uses it and ignores the head. When asked for a bare JID (with no resource) and GET_BUDDY_EXACT, it shouldn't do this, but it should return the head. In other words, the problem was a message in this format: <message from="username@gmail.com" ...> Instead of <message from="username@gmail.com/resource" ...> This only deals with incoming typing notifications. See next commit.
Diffstat (limited to 'protocols/jabber/jabber_util.c')
-rw-r--r--protocols/jabber/jabber_util.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/protocols/jabber/jabber_util.c b/protocols/jabber/jabber_util.c
index 38daaa26..c3c9df34 100644
--- a/protocols/jabber/jabber_util.c
+++ b/protocols/jabber/jabber_util.c
@@ -513,7 +513,11 @@ struct jabber_buddy *jabber_buddy_by_jid(struct im_connection *ic, char *jid_, g
jabber_buddy_add(ic, jid_) : NULL;
} else if (bud->resource && (flags & GET_BUDDY_EXACT)) {
/* We want an exact match, so in thise case there shouldn't be a /resource. */
- return NULL;
+ if (head != bud && head->resource == NULL) {
+ return head;
+ } else {
+ return NULL;
+ }
} else if (bud->resource == NULL || bud->next == NULL) {
/* No need for selection if there's only one option. */
return bud;