mcabber/src/caps.c
changeset 1662 63ebb1d32c7d
parent 1645 d3cd4db23f55
equal deleted inserted replaced
1661:64a7428afcb3 1662:63ebb1d32c7d
   142   GChecksum *sha1;
   142   GChecksum *sha1;
   143   guint8 digest[20];
   143   guint8 digest[20];
   144   gsize digest_size = 20;
   144   gsize digest_size = 20;
   145   gchar *hash, *old_hash = NULL;
   145   gchar *hash, *old_hash = NULL;
   146   caps *old_caps;
   146   caps *old_caps;
   147   unsigned int i;
       
   148   caps *c = g_hash_table_lookup(caps_cache, "");
   147   caps *c = g_hash_table_lookup(caps_cache, "");
   149 
   148 
   150   g_hash_table_steal(caps_cache, "");
   149   g_hash_table_steal(caps_cache, "");
   151   sha1 = g_checksum_new(G_CHECKSUM_SHA1);
   150   sha1 = g_checksum_new(G_CHECKSUM_SHA1);
   152   identity = g_strdup_printf("%s/%s/%s<", c->category, c->type, c->name);
   151   identity = g_strdup_printf("%s/%s//%s<", c->category, c->type, c->name);
   153   g_checksum_update(sha1, (guchar*)identity, -1);
   152   g_checksum_update(sha1, (guchar*)identity, -1);
   154   g_free(identity);
   153   g_free(identity);
   155 
   154 
   156   features = g_list_copy(g_hash_table_get_values(c->features));
   155   features = g_hash_table_get_values(c->features);
   157   features = g_list_sort(features, _strcmp_sort);
   156   features = g_list_sort(features, _strcmp_sort);
   158   for (i=0; i < g_list_length(features); i++) {
   157   {
   159     g_checksum_update(sha1, g_list_nth_data(features, i), -1);
   158     GList *feature;
   160     g_checksum_update(sha1, (guchar *)"<", -1);
   159     for (feature=features; feature; feature=feature->next) {
       
   160       g_checksum_update(sha1, feature->data, -1);
       
   161       g_checksum_update(sha1, (guchar *)"<", -1);
       
   162     }
   161   }
   163   }
   162   g_list_free(features);
   164   g_list_free(features);
   163 
   165 
   164   g_checksum_get_digest(sha1, digest, &digest_size);
   166   g_checksum_get_digest(sha1, digest, &digest_size);
   165   hash = g_base64_encode(digest, digest_size);
   167   hash = g_base64_encode(digest, digest_size);