comparison mcabber/src/caps.c @ 1662:63ebb1d32c7d

Fix for entity capabilities hash generation.
author Myhailo Danylenko <isbear@ukrpost.net>
date Sat, 12 Dec 2009 16:23:21 +0200
parents d3cd4db23f55
children
comparison
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);