| 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 |