diff options
author | Tobias Markmann <tfar@soc.pidgin.im> | 2008-07-06 18:51:26 +0000 |
---|---|---|
committer | Tobias Markmann <tfar@soc.pidgin.im> | 2008-07-06 18:51:26 +0000 |
commit | 4f721ff1e4058e053e8d8ff0a68eda82d2d3d6b2 (patch) | |
tree | a2d1f0dcbcc171af9bc75f8f41bc89e5d85cba46 | |
parent | 71400a89717e1147219513a246d859bd276abfef (diff) | |
download | pidgin-4f721ff1e4058e053e8d8ff0a68eda82d2d3d6b2.tar.gz |
* fixing a bug in jabber_caps_compare()
* preparing contact capabilities lookup functionality
-rw-r--r-- | libpurple/protocols/jabber/caps.c | 16 | ||||
-rw-r--r-- | libpurple/protocols/jabber/caps.h | 8 | ||||
-rw-r--r-- | libpurple/protocols/jabber/jabber.c | 17 | ||||
-rw-r--r-- | libpurple/protocols/jabber/jabber.h | 2 |
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); |