comparison libpurple/protocols/jabber/presence.c @ 16483:5e47b3427b28

propagate from branch 'im.pidgin.rlaager.gaim_migration' (head dcc40d46afbe3f87cc674e4fb1526ac722bc35cb) to branch 'im.pidgin.pidgin' (head 0ef5b6c44115778e329fd628324124f872f5253b)
author Sean Egan <seanegan@gmail.com>
date Fri, 27 Apr 2007 02:14:44 +0000
parents 08db93bbd798 24bbd7e46bfe
children d5293baaed11
comparison
equal deleted inserted replaced
16467:b2044e10915a 16483:5e47b3427b28
199 } 199 }
200 200
201 static void jabber_vcard_parse_avatar(JabberStream *js, xmlnode *packet, gpointer blah) 201 static void jabber_vcard_parse_avatar(JabberStream *js, xmlnode *packet, gpointer blah)
202 { 202 {
203 JabberBuddy *jb = NULL; 203 JabberBuddy *jb = NULL;
204 PurpleBuddy *b = NULL;
205 xmlnode *vcard, *photo, *binval; 204 xmlnode *vcard, *photo, *binval;
206 char *text; 205 char *text;
207 guchar *data; 206 guchar *data;
208 gsize size; 207 gsize size;
209 const char *from = xmlnode_get_attrib(packet, "from"); 208 const char *from = xmlnode_get_attrib(packet, "from");
219 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) { 218 (vcard = xmlnode_get_child_with_namespace(packet, "query", "vcard-temp"))) {
220 if((photo = xmlnode_get_child(vcard, "PHOTO")) && 219 if((photo = xmlnode_get_child(vcard, "PHOTO")) &&
221 (( (binval = xmlnode_get_child(photo, "BINVAL")) && 220 (( (binval = xmlnode_get_child(photo, "BINVAL")) &&
222 (text = xmlnode_get_data(binval))) || 221 (text = xmlnode_get_data(binval))) ||
223 (text = xmlnode_get_data(photo)))) { 222 (text = xmlnode_get_data(photo)))) {
223 unsigned char hashval[20];
224 char hash[41], *p;
225 int i;
226
224 data = purple_base64_decode(text, &size); 227 data = purple_base64_decode(text, &size);
225 228
226 purple_buddy_icons_set_for_user(js->gc->account, from, data, size); 229 purple_cipher_digest_region("sha1", data, size,
227 if((b = purple_find_buddy(js->gc->account, from))) { 230 sizeof(hashval), hashval, NULL);
228 unsigned char hashval[20]; 231 p = hash;
229 char hash[41], *p; 232 for(i=0; i<20; i++, p+=2)
230 int i; 233 snprintf(p, 3, "%02x", hashval[i]);
231 234
232 purple_cipher_digest_region("sha1", data, size, 235 purple_buddy_icons_set_for_user(js->gc->account, from, data, size, hash);
233 sizeof(hashval), hashval, NULL);
234 p = hash;
235 for(i=0; i<20; i++, p+=2)
236 snprintf(p, 3, "%02x", hashval[i]);
237 purple_blist_node_set_string((PurpleBlistNode*)b, "avatar_hash", hash);
238 }
239 g_free(data);
240 g_free(text); 236 g_free(text);
241 } 237 }
242 } 238 }
243 } 239 }
244 240
519 g_free(status); 515 g_free(status);
520 return; 516 return;
521 } 517 }
522 518
523 if(avatar_hash) { 519 if(avatar_hash) {
524 const char *avatar_hash2 = purple_blist_node_get_string((PurpleBlistNode*)b, "avatar_hash"); 520 const char *avatar_hash2 = purple_buddy_icons_get_checksum_for_user(b);
525 if(!avatar_hash2 || strcmp(avatar_hash, avatar_hash2)) { 521 if(!avatar_hash2 || strcmp(avatar_hash, avatar_hash2)) {
526 JabberIq *iq; 522 JabberIq *iq;
527 xmlnode *vcard; 523 xmlnode *vcard;
528 524
529 /* XXX this is a crappy way of trying to prevent 525 /* XXX this is a crappy way of trying to prevent