# HG changeset patch # User Daniel Atallah # Date 1218248695 0 # Node ID 357168efca68dd165930b654d42d662f87de75ab # Parent e72e03fb5ef1dfe6d5628c257b63255c9b9e719e# Parent 80ddf59e1585f57ddbd04f4b28fd04b042b3c5b8 merge of '04cb3481a7947425a89254b98d0d64b73ca36dc1' and 'e62b4e504b56e4f3909ef285bda4d55dfb7504bf' diff -r e72e03fb5ef1 -r 357168efca68 libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Sat Aug 09 02:04:21 2008 +0000 +++ b/libpurple/protocols/jabber/buddy.c Sat Aug 09 02:24:55 2008 +0000 @@ -37,6 +37,8 @@ #include "pep.h" #include "adhoccommands.h" +#define MAX_HTTP_BUDDYICON_BYTES (200 * 1024) + typedef struct { long idle_seconds; } JabberBuddyInfoResource; @@ -1535,18 +1537,27 @@ } } if(goodinfo) { - const char *url = xmlnode_get_attrib(goodinfo,"url"); + const char *url = xmlnode_get_attrib(goodinfo, "url"); const char *id = xmlnode_get_attrib(goodinfo,"id"); /* the avatar might either be stored in a pep node, or on a HTTP/HTTPS URL */ if(!url) jabber_pep_request_item(js, from, AVATARNAMESPACEDATA, id, do_buddy_avatar_update_data); else { + PurpleUtilFetchUrlData *url_data; JabberBuddyAvatarUpdateURLInfo *info = g_new0(JabberBuddyAvatarUpdateURLInfo, 1); info->js = js; - info->from = g_strdup(from); - info->id = g_strdup(id); - purple_util_fetch_url(url, TRUE, NULL, TRUE, do_buddy_avatar_update_fromurl, info); + + url_data = purple_util_fetch_url_len(url, TRUE, NULL, TRUE, + MAX_HTTP_BUDDYICON_BYTES, + do_buddy_avatar_update_fromurl, info); + if (url_data) { + info->from = g_strdup(from); + info->id = g_strdup(id); + js->url_datas = g_slist_prepend(js->url_datas, url_data); + } else + g_free(info); + } } } diff -r e72e03fb5ef1 -r 357168efca68 libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Sat Aug 09 02:04:21 2008 +0000 +++ b/libpurple/protocols/jabber/jabber.c Sat Aug 09 02:24:55 2008 +0000 @@ -1322,6 +1322,11 @@ js->bs_proxies = g_list_delete_link(js->bs_proxies, js->bs_proxies); } + while(js->url_datas) { + purple_util_fetch_url_cancel(js->url_datas->data); + js->url_datas = g_slist_delete_link(js->url_datas, js->url_datas); + } + g_free(js->stream_id); if(js->user) jabber_id_free(js->user); diff -r e72e03fb5ef1 -r 357168efca68 libpurple/protocols/jabber/jabber.h --- a/libpurple/protocols/jabber/jabber.h Sat Aug 09 02:04:21 2008 +0000 +++ b/libpurple/protocols/jabber/jabber.h Sat Aug 09 02:24:55 2008 +0000 @@ -236,6 +236,11 @@ PurpleSrvResponse *srv_rec; guint srv_rec_idx; guint max_srv_rec_idx; + /** + * This linked list contains PurpleUtilFetchUrlData structs + * for when we lookup buddy icons from a url + */ + GSList *url_datas; }; typedef gboolean (JabberFeatureEnabled)(JabberStream *js, const gchar *shortname, const gchar *namespace); diff -r e72e03fb5ef1 -r 357168efca68 libpurple/protocols/msn/msn.c --- a/libpurple/protocols/msn/msn.c Sat Aug 09 02:04:21 2008 +0000 +++ b/libpurple/protocols/msn/msn.c Sat Aug 09 02:24:55 2008 +0000 @@ -48,6 +48,7 @@ #include "slplink.h" #if PHOTO_SUPPORT +#define MAX_HTTP_BUDDYICON_BYTES (200 * 1024) #include "imgstore.h" #endif @@ -1886,6 +1887,7 @@ purple_debug_info("msn", "In msn_got_info,url_text:{%s}\n",url_text); /* Make sure the connection is still valid */ + /* TODO: Instead of this, we should be canceling this when we disconnect */ if (g_list_find(purple_connections_get_all(), info_data->gc) == NULL) { purple_debug_warning("msn", "invalid connection. ignoring buddy info.\n"); @@ -2275,7 +2277,7 @@ /* Try to put the photo in there too, if there's one */ if (photo_url_text) { - purple_util_fetch_url(photo_url_text, FALSE, NULL, FALSE, msn_got_photo, + purple_util_fetch_url_len(photo_url_text, FALSE, NULL, FALSE, MAX_HTTP_BUDDYICON_BYTES, msn_got_photo, info2_data); } else @@ -2301,6 +2303,7 @@ char *photo_url_text = info2_data->photo_url_text; /* Make sure the connection is still valid if we got here by fetching a photo url */ + /* TODO: Instead of this, we should be canceling this when we disconnect */ if (url_text && (error_message != NULL || g_list_find(purple_connections_get_all(), info_data->gc) == NULL)) {