--- a/libpurple/protocols/facebook/api.c Wed Oct 26 02:06:39 2022 -0500
+++ b/libpurple/protocols/facebook/api.c Wed Oct 26 02:07:31 2022 -0500
@@ -625,36 +625,41 @@
-fb_api_http_chk(FbApi *api, SoupMessage *res, JsonNode **root)
+fb_api_http_chk(FbApi *api, SoupSession *session, GAsyncResult *result, + SoupMessage *msg, JsonNode **root)
+ GBytes *response_body = NULL; + const gchar *reason = NULL; + const gchar *data = NULL;
- msg = soup_message_get_reason_phrase(res);
- code = soup_message_get_status(res);
- data = res->response_body->data;
- size = res->response_body->length;
- fb_util_debug(FB_UTIL_DEBUG_INFO, "HTTP Response (%p):", res);
- fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Error: %s (%d)", msg,
+ reason = soup_message_get_reason_phrase(msg); + code = soup_message_get_status(msg); + fb_util_debug(FB_UTIL_DEBUG_INFO, "HTTP Response (%p):", msg); + fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Error: %s (%d)", reason, fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Error: %d", code);
+ if (fb_http_error_chk(msg, &err) && (root == NULL)) { + response_body = soup_session_send_and_read_finish(session, result, &err); + if(response_body != NULL) { + data = g_bytes_get_data(response_body, &size); if (G_LIKELY(size > 0)) {
fb_util_debug(FB_UTIL_DEBUG_INFO, " Response Data: %.*s",
- if (fb_http_error_chk(res, &err) && (root == NULL)) {
/* Rudimentary check to prevent wrongful error parsing */
if ((size < 2) || (data[0] != '{') || (data[size - 1] != '}')) {
FB_API_ERROR_EMIT(api, err, return FALSE);
@@ -675,7 +680,7 @@
fb_api_http_req(FbApi *api, const gchar *url, const gchar *name,
const gchar *method, FbHttpParams *params,
- SoupSessionCallback callback)
+ GAsyncReadyCallback callback) @@ -726,7 +731,9 @@
- soup_session_queue_message(api->cons, msg, callback, api);
+ g_object_set_data(G_OBJECT(msg), "facebook-api", api); + soup_session_send_and_read_async(api->cons, msg, G_PRIORITY_DEFAULT, NULL, fb_util_debug(FB_UTIL_DEBUG_INFO, "HTTP Request (%p):", msg);
fb_util_debug(FB_UTIL_DEBUG_INFO, " Request URL: %s", url);
@@ -736,7 +743,7 @@
fb_api_http_query(FbApi *api, gint64 query, JsonBuilder *builder,
- SoupSessionCallback hcb)
+ GAsyncReadyCallback hcb) @@ -784,19 +791,22 @@
-fb_api_cb_http_bool(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
- if (!fb_api_http_chk(api, res, NULL)) {
+fb_api_cb_http_bool(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); + if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { - if (!purple_strequal(res->response_body->data, "true")) {
+ if (!json_node_get_boolean(root)) { fb_api_error_literal(api, FB_API_ERROR,
_("Failed generic API operation"));
@@ -969,16 +979,16 @@
-fb_api_cb_seqid(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_seqid(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api");
- if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -1996,11 +2006,11 @@
-fb_api_cb_attach(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_attach(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api");
@@ -2011,7 +2021,7 @@
static const gchar *imgexts[] = {".jpg", ".png", ".gif"};
- if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -2026,7 +2036,7 @@
- msg = g_object_steal_data(G_OBJECT(res), "fb-api-msg");
+ msg = g_object_steal_data(G_OBJECT(soupmsg), "fb-api-msg"); str = fb_json_values_next_str(values, NULL);
name = g_ascii_strdown(str, -1);
@@ -2066,15 +2076,15 @@
-fb_api_cb_auth(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_auth(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); - if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -2133,18 +2143,18 @@
-fb_api_cb_contact(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_contact(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api");
- if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -2285,12 +2295,12 @@
-fb_api_cb_contacts(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_contacts(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); const gchar *delta_cursor;
@@ -2301,7 +2311,7 @@
- if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -2597,12 +2607,12 @@
-fb_api_cb_unread_msgs(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_unread_msgs(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api");
@@ -2615,7 +2625,7 @@
- if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -2729,18 +2739,18 @@
-fb_api_cb_unread(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_unread(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api");
- if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -2808,10 +2818,10 @@
-fb_api_cb_sticker(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_sticker(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); @@ -2819,7 +2829,7 @@
- if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -2835,7 +2845,7 @@
- msg = g_object_steal_data(G_OBJECT(res), "fb-api-msg");
+ msg = g_object_steal_data(G_OBJECT(soupmsg), "fb-api-msg"); msg->flags |= FB_API_MESSAGE_FLAG_IMAGE;
msg->text = fb_json_values_next_str_dup(values, NULL);
msgs = g_slist_prepend(msgs, msg);
@@ -2937,16 +2947,16 @@
-fb_api_cb_thread(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_thread(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); - if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -2997,17 +3007,17 @@
-fb_api_cb_thread_create(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_thread_create(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api");
- if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { @@ -3127,10 +3137,10 @@
-fb_api_cb_threads(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
+fb_api_cb_threads(GObject *source, GAsyncResult *result, gpointer data) { + SoupSession *session = SOUP_SESSION(source); + SoupMessage *soupmsg = data; + FbApi *api = g_object_get_data(G_OBJECT(soupmsg), "facebook-api"); @@ -3140,7 +3150,7 @@
- if (!fb_api_http_chk(api, res, &root)) {
+ if (!fb_api_http_chk(api, session, result, soupmsg, &root)) { --- a/libpurple/protocols/facebook/data.c Wed Oct 26 02:06:39 2022 -0500
+++ b/libpurple/protocols/facebook/data.c Wed Oct 26 02:07:31 2022 -0500
@@ -24,6 +24,7 @@
#include "libpurple/glibcompat.h"
+#include "libpurple/soupcompat.h" @@ -486,16 +487,21 @@
-fb_data_image_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
- FbDataImage *img = data;
+fb_data_image_cb(GObject *source, GAsyncResult *result, gpointer data) { + SoupMessage *msg = data; + FbDataImage *img = g_object_get_data(G_OBJECT(msg), "facebook-data-image"); - fb_http_error_chk(res, &err);
+ if(fb_http_error_chk(msg, &err)) { - img->image = (guint8 *)res->response_body->data;
- img->size = res->response_body->length;
+ bytes = soup_session_send_and_read_finish(SOUP_SESSION(source), + img->image = g_bytes_unref_to_data(bytes, &img->size); if (G_LIKELY(err == NULL)) {
@@ -541,8 +547,10 @@
url = fb_data_image_get_url(img);
msg = soup_message_new("GET", url);
+ g_object_set_data(G_OBJECT(msg), "facebook-data-image", img); // purple_http_request_set_max_len(req, FB_DATA_ICON_SIZE_MAX);
- soup_session_queue_message(fata->cons, msg, fb_data_image_cb, img);
+ soup_session_send_and_read_async(fata->cons, msg, G_PRIORITY_DEFAULT, + NULL, fb_data_image_cb, msg); if (++active >= FB_DATA_ICON_MAX) {