libpurple/protocols/jabber/useravatar.c

changeset 41838
54f5dccdd78c
parent 41213
0b5c475770e2
child 41880
4371fa2ce648
--- 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);
 			}
 		}
 	}

mercurial