Mercurial > pidgin.yaz
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 |