libpurple/protocols/jabber/buddy.c

changeset 24012
913d6f18cb95
parent 23501
55185be28a1b
child 24200
6c6870d15155
child 26117
69b9346d3e48
equal deleted inserted replaced
24011:0cff24bf7dba 24012:913d6f18cb95
34 #include "iq.h" 34 #include "iq.h"
35 #include "presence.h" 35 #include "presence.h"
36 #include "xdata.h" 36 #include "xdata.h"
37 #include "pep.h" 37 #include "pep.h"
38 #include "adhoccommands.h" 38 #include "adhoccommands.h"
39
40 #define MAX_HTTP_BUDDYICON_BYTES (200 * 1024)
39 41
40 typedef struct { 42 typedef struct {
41 long idle_seconds; 43 long idle_seconds;
42 } JabberBuddyInfoResource; 44 } JabberBuddyInfoResource;
43 45
1533 if(type && id && !goodinfo && !strcmp(type, "image/png")) 1535 if(type && id && !goodinfo && !strcmp(type, "image/png"))
1534 goodinfo = info; 1536 goodinfo = info;
1535 } 1537 }
1536 } 1538 }
1537 if(goodinfo) { 1539 if(goodinfo) {
1538 const char *url = xmlnode_get_attrib(goodinfo,"url"); 1540 const char *url = xmlnode_get_attrib(goodinfo, "url");
1539 const char *id = xmlnode_get_attrib(goodinfo,"id"); 1541 const char *id = xmlnode_get_attrib(goodinfo,"id");
1540 1542
1541 /* the avatar might either be stored in a pep node, or on a HTTP/HTTPS URL */ 1543 /* the avatar might either be stored in a pep node, or on a HTTP/HTTPS URL */
1542 if(!url) 1544 if(!url)
1543 jabber_pep_request_item(js, from, AVATARNAMESPACEDATA, id, do_buddy_avatar_update_data); 1545 jabber_pep_request_item(js, from, AVATARNAMESPACEDATA, id, do_buddy_avatar_update_data);
1544 else { 1546 else {
1547 PurpleUtilFetchUrlData *url_data;
1545 JabberBuddyAvatarUpdateURLInfo *info = g_new0(JabberBuddyAvatarUpdateURLInfo, 1); 1548 JabberBuddyAvatarUpdateURLInfo *info = g_new0(JabberBuddyAvatarUpdateURLInfo, 1);
1546 info->js = js; 1549 info->js = js;
1547 info->from = g_strdup(from); 1550
1548 info->id = g_strdup(id); 1551 url_data = purple_util_fetch_url_len(url, TRUE, NULL, TRUE,
1549 purple_util_fetch_url(url, TRUE, NULL, TRUE, do_buddy_avatar_update_fromurl, info); 1552 MAX_HTTP_BUDDYICON_BYTES,
1553 do_buddy_avatar_update_fromurl, info);
1554 if (url_data) {
1555 info->from = g_strdup(from);
1556 info->id = g_strdup(id);
1557 js->url_datas = g_slist_prepend(js->url_datas, url_data);
1558 } else
1559 g_free(info);
1560
1550 } 1561 }
1551 } 1562 }
1552 } 1563 }
1553 } 1564 }
1554 1565

mercurial