--- a/libpurple/protocols/jabber/useravatar.c Wed Oct 26 02:05:37 2022 -0500 +++ b/libpurple/protocols/jabber/useravatar.c Wed Oct 26 02:06:39 2022 -0500 @@ -209,31 +209,43 @@ JabberStream *js; char *from; char *id; + SoupMessage *msg; } JabberBuddyAvatarUpdateURLInfo; static void -do_buddy_avatar_update_fromurl(G_GNUC_UNUSED SoupSession *session, - SoupMessage *msg, gpointer data) +do_buddy_avatar_update_fromurl(GObject *source, GAsyncResult *result, + gpointer data) { JabberBuddyAvatarUpdateURLInfo *info = data; - gpointer icon_data; + GBytes *response_body = NULL; + gpointer icon_data = NULL; + gsize length = 0; + GError *error = NULL; + const gchar *error_message = NULL; - if (!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) { + if(SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(info->msg))) { + response_body = soup_session_send_and_read_finish(SOUP_SESSION(source), + result, &error); + error_message = error ? error->message : "unknown"; + } else { + error_message = soup_message_get_reason_phrase(info->msg); + } + if(response_body == NULL) { purple_debug_error("jabber", "do_buddy_avatar_update_fromurl got error \"%s\"", - soup_message_get_reason_phrase(msg)); + error_message); goto out; } - icon_data = g_memdup2(msg->response_body->data, msg->response_body->length); + icon_data = g_bytes_unref_to_data(response_body, &length); purple_buddy_icons_set_for_user(purple_connection_get_account(info->js->gc), - info->from, icon_data, - msg->response_body->length, info->id); + info->from, icon_data, length, info->id); out: g_free(info->from); g_free(info->id); g_free(info); + g_clear_error(&error); } static void @@ -337,10 +349,11 @@ info->from = g_strdup(from); info->id = g_strdup(id); - msg = soup_message_new("GET", url); - soup_session_queue_message(js->http_conns, msg, - do_buddy_avatar_update_fromurl, - info); + info->msg = msg = soup_message_new("GET", url); + soup_session_send_and_read_async(js->http_conns, msg, + G_PRIORITY_DEFAULT, NULL, + do_buddy_avatar_update_fromurl, + info); } } }