summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Markmann <tfar@soc.pidgin.im>2008-07-06 18:51:26 +0000
committerTobias Markmann <tfar@soc.pidgin.im>2008-07-06 18:51:26 +0000
commit4f721ff1e4058e053e8d8ff0a68eda82d2d3d6b2 (patch)
treea2d1f0dcbcc171af9bc75f8f41bc89e5d85cba46
parent71400a89717e1147219513a246d859bd276abfef (diff)
downloadpidgin-4f721ff1e4058e053e8d8ff0a68eda82d2d3d6b2.tar.gz
* fixing a bug in jabber_caps_compare()
* preparing contact capabilities lookup functionality
-rw-r--r--libpurple/protocols/jabber/caps.c16
-rw-r--r--libpurple/protocols/jabber/caps.h8
-rw-r--r--libpurple/protocols/jabber/jabber.c17
-rw-r--r--libpurple/protocols/jabber/jabber.h2
4 files changed, 31 insertions, 12 deletions
diff --git a/libpurple/protocols/jabber/caps.c b/libpurple/protocols/jabber/caps.c
index a3f1dfb43d..e4ffbd028b 100644
--- a/libpurple/protocols/jabber/caps.c
+++ b/libpurple/protocols/jabber/caps.c
@@ -34,12 +34,6 @@
static GHashTable *capstable = NULL; /* JabberCapsKey -> JabberCapsValue */
static gchar *caps_hash = NULL;
-typedef struct _JabberCapsKey {
- char *node;
- char *ver;
- char *hash;
-} JabberCapsKey;
-
#if 0
typedef struct _JabberCapsValue {
GList *identities; /* JabberCapsIdentity */
@@ -53,18 +47,18 @@ static guint jabber_caps_hash(gconstpointer key) {
const JabberCapsKey *name = key;
guint nodehash = g_str_hash(name->node);
guint verhash = g_str_hash(name->ver);
-
- return nodehash ^ verhash;
+ guint hashhash = g_str_hash(name->hash);
+ return nodehash ^ verhash ^ hashhash;
}
static gboolean jabber_caps_compare(gconstpointer v1, gconstpointer v2) {
const JabberCapsKey *name1 = v1;
const JabberCapsKey *name2 = v2;
- return strcmp(name1->node,name2->node) == 0 && strcmp(name1->ver,name2->ver) == 0;
+ return strcmp(name1->node,name2->node) == 0 && strcmp(name1->ver,name2->ver) == 0 && strcmp(name1->hash,name2->hash) == 0;
}
-static void jabber_caps_destroy_key(gpointer key) {
+void jabber_caps_destroy_key(gpointer key) {
JabberCapsKey *keystruct = key;
g_free(keystruct->node);
g_free(keystruct->ver);
@@ -412,8 +406,6 @@ static void jabber_caps_ext_iqcb(JabberStream *js, xmlnode *packet, gpointer dat
value->identities = g_list_append(value->identities,id);
}
}
- //g_hash_table_replace(client->ext, g_strdup(key), value);
-
jabber_caps_store();
}
diff --git a/libpurple/protocols/jabber/caps.h b/libpurple/protocols/jabber/caps.h
index fff0d03951..07fea7b3c7 100644
--- a/libpurple/protocols/jabber/caps.h
+++ b/libpurple/protocols/jabber/caps.h
@@ -43,10 +43,18 @@ typedef struct _JabberDataFormField {
GList *values;
} JabberDataFormField;
+typedef struct _JabberCapsKey {
+ char *node;
+ char *ver;
+ char *hash;
+} JabberCapsKey;
+
typedef void (*jabber_caps_get_info_cb)(JabberCapsClientInfo *info, gpointer user_data);
void jabber_caps_init(void);
+void jabber_caps_destroy_key(gpointer value);
+
/**
* Main entity capabilites function to get the capabilities of a contact.
*/
diff --git a/libpurple/protocols/jabber/jabber.c b/libpurple/protocols/jabber/jabber.c
index 11b853ec0e..df4ec76dcd 100644
--- a/libpurple/protocols/jabber/jabber.c
+++ b/libpurple/protocols/jabber/jabber.c
@@ -39,6 +39,7 @@
#include "version.h"
#include "xmlnode.h"
+#include "caps.h"
#include "auth.h"
#include "buddy.h"
#include "chat.h"
@@ -2445,6 +2446,20 @@ void jabber_register_commands(void)
_("buzz: Buzz a user to get their attention"), NULL);
}
+static void
+jabber_client_info_destroy_key(gpointer key) {
+ gchar *s = key;
+ g_free(s);
+}
+
+static gboolean
+jabber_client_info_compare(gconstpointer v1, gconstpointer v2) {
+ const gchar *name1 = v1;
+ const gchar *name2 = v2;
+
+ return strcmp(name1,name2) == 0;
+}
+
void
jabber_init_plugin(PurplePlugin *plugin)
{
@@ -2471,4 +2486,6 @@ jabber_init_plugin(PurplePlugin *plugin)
jabber_add_feature("http://jabber.org/protocol/si/profile/file-transfer", 0);
jabber_add_feature("http://jabber.org/protocol/xhtml-im", 0);
jabber_add_feature("urn:xmpp:ping", 0);
+
+ //jabber_contact_info = g_hash_table_new_full(g_str_hash, jabber_client_info_compare, jabber_client_info_destroy_key, jabber_caps_destroy_key);
}
diff --git a/libpurple/protocols/jabber/jabber.h b/libpurple/protocols/jabber/jabber.h
index 94cf6b4aa4..88cf0d6faa 100644
--- a/libpurple/protocols/jabber/jabber.h
+++ b/libpurple/protocols/jabber/jabber.h
@@ -230,6 +230,8 @@ typedef struct _JabberBytestreamsStreamhost {
extern GList *jabber_features;
extern GList *jabber_identities;
+extern GHashTable *jabber_contact_info; /* char * -> JabberCapsKey */
+
void jabber_process_packet(JabberStream *js, xmlnode **packet);
void jabber_send(JabberStream *js, xmlnode *data);
void jabber_send_raw(JabberStream *js, const char *data, int len);