[libsoup] Pull SoupMessageIOSource into its own file



commit 654746aff0996e7616fa2dd05350388cb570b0c1
Author: Patrick Griffis <pgriffis igalia com>
Date:   Fri Nov 20 15:29:12 2020 -0600

    Pull SoupMessageIOSource into its own file

 docs/reference/meson.build       |  1 +
 libsoup/meson.build              |  1 +
 libsoup/soup-message-io-data.c   | 79 +--------------------------------
 libsoup/soup-message-io-data.h   |  4 +-
 libsoup/soup-message-io-source.c | 96 ++++++++++++++++++++++++++++++++++++++++
 libsoup/soup-message-io-source.h | 26 +++++++++++
 6 files changed, 126 insertions(+), 81 deletions(-)
---
diff --git a/docs/reference/meson.build b/docs/reference/meson.build
index de67bb20..10e64bb8 100644
--- a/docs/reference/meson.build
+++ b/docs/reference/meson.build
@@ -34,6 +34,7 @@ ignore_headers = [
   'soup-private-enum-types.h',
   'soup-server-message-private.h',
   'soup-message-io-data.h',
+  'soup-message-io-source.h',
   'soup-uri-utils-private.h',
   'soup-session-feature-private.h',
   'soup-message-metrics-private.h',
diff --git a/libsoup/meson.build b/libsoup/meson.build
index adcccc3e..7bdaf0ac 100644
--- a/libsoup/meson.build
+++ b/libsoup/meson.build
@@ -66,6 +66,7 @@ soup_sources = [
   'soup-message-io-data.c',
   'soup-message-metrics.c',
   'soup-message-queue-item.c',
+  'soup-message-io-source.c',
   'soup-method.c',
   'soup-misc.c',
   'soup-multipart.c',
diff --git a/libsoup/soup-message-io-data.c b/libsoup/soup-message-io-data.c
index 04a9c255..bce43145 100644
--- a/libsoup/soup-message-io-data.c
+++ b/libsoup/soup-message-io-data.c
@@ -124,12 +124,6 @@ message_io_is_paused (GObject *msg)
        return FALSE;
 }
 
-typedef struct {
-       GSource source;
-       GObject *msg;
-       gboolean paused;
-} SoupMessageIOSource;
-
 static gboolean
 message_io_source_check (GSource *source)
 {
@@ -143,66 +137,6 @@ message_io_source_check (GSource *source)
                return FALSE;
 }
 
-static gboolean
-message_io_source_prepare (GSource *source,
-                          gint    *timeout)
-{
-       *timeout = -1;
-       return message_io_source_check (source);
-}
-
-static gboolean
-message_io_source_dispatch (GSource     *source,
-                           GSourceFunc  callback,
-                           gpointer     user_data)
-{
-       SoupMessageIOSourceFunc func = (SoupMessageIOSourceFunc)callback;
-       SoupMessageIOSource *message_source = (SoupMessageIOSource *)source;
-
-       return (*func) (message_source->msg, user_data);
-}
-
-static void
-message_io_source_finalize (GSource *source)
-{
-       SoupMessageIOSource *message_source = (SoupMessageIOSource *)source;
-
-       g_object_unref (message_source->msg);
-}
-
-static gboolean
-message_io_source_closure_callback (GObject *msg,
-                                   gpointer data)
-{
-       GClosure *closure = data;
-       GValue param = G_VALUE_INIT;
-       GValue result_value = G_VALUE_INIT;
-       gboolean result;
-
-       g_value_init (&result_value, G_TYPE_BOOLEAN);
-
-       g_value_init (&param, G_TYPE_OBJECT);
-       g_value_set_object (&param, msg);
-
-       g_closure_invoke (closure, &result_value, 1, &param, NULL);
-
-       result = g_value_get_boolean (&result_value);
-       g_value_unset (&result_value);
-       g_value_unset (&param);
-
-       return result;
-}
-
-static GSourceFuncs message_io_source_funcs =
-{
-       message_io_source_prepare,
-       message_io_source_check,
-       message_io_source_dispatch,
-       message_io_source_finalize,
-       (GSourceFunc)message_io_source_closure_callback,
-       (GSourceDummyMarshal)g_cclosure_marshal_generic,
-};
-
 GSource *
 soup_message_io_data_get_source (SoupMessageIOData     *io,
                                 GObject                *msg,
@@ -211,7 +145,6 @@ soup_message_io_data_get_source (SoupMessageIOData     *io,
                                 gpointer                user_data)
 {
        GSource *base_source, *source;
-       SoupMessageIOSource *message_source;
 
        if (!io) {
                base_source = g_timeout_source_new (0);
@@ -238,17 +171,7 @@ soup_message_io_data_get_source (SoupMessageIOData     *io,
        } else
                base_source = g_timeout_source_new (0);
 
-       source = g_source_new (&message_io_source_funcs, sizeof (SoupMessageIOSource));
-       g_source_set_name (source, "SoupMessageIOSource");
-       message_source = (SoupMessageIOSource *)source;
-       message_source->msg = g_object_ref (msg);
-       message_source->paused = io && io->paused;
-
-       if (base_source) {
-               g_source_set_dummy_callback (base_source);
-               g_source_add_child_source (source, base_source);
-               g_source_unref (base_source);
-       }
+        source = soup_message_io_source_new (base_source, msg, io && io->paused, message_io_source_check);
        g_source_set_callback (source, (GSourceFunc) callback, user_data, NULL);
        return source;
 }
diff --git a/libsoup/soup-message-io-data.h b/libsoup/soup-message-io-data.h
index e3feae7a..f2b7a9ce 100644
--- a/libsoup/soup-message-io-data.h
+++ b/libsoup/soup-message-io-data.h
@@ -8,6 +8,7 @@
 
 #include "soup-filter-input-stream.h"
 #include "soup-message-headers.h"
+#include "soup-message-io-source.h"
 
 typedef enum {
        SOUP_MESSAGE_IO_STATE_NOT_STARTED,
@@ -83,9 +84,6 @@ gboolean soup_message_io_data_read_headers (SoupMessageIOData *io,
                                             gushort           *extra_bytes,
                                            GError           **error);
 
-typedef gboolean (*SoupMessageIOSourceFunc) (GObject *msg,
-                                            gpointer user_data);
-
 GSource *soup_message_io_data_get_source   (SoupMessageIOData      *io,
                                            GObject                *msg,
                                            GCancellable           *cancellable,
diff --git a/libsoup/soup-message-io-source.c b/libsoup/soup-message-io-source.c
new file mode 100644
index 00000000..e2908ae3
--- /dev/null
+++ b/libsoup/soup-message-io-source.c
@@ -0,0 +1,96 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+/*
+ * soup-message-io-source.c
+ *
+ * Copyright (C) 2000-2003, Ximian, Inc.
+ * Copyright (C) 2021 Igalia S.L.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "soup-message-io-source.h"
+
+static gboolean
+message_io_source_prepare (GSource *source,
+                           gint    *timeout)
+{
+        SoupMessageIOSource *message_io_source = (SoupMessageIOSource *)source;
+        *timeout = -1;
+        return message_io_source->check_func (source);
+}
+
+static gboolean
+message_io_source_dispatch (GSource     *source,
+                            GSourceFunc  callback,
+                            gpointer     user_data)
+{
+        SoupMessageIOSourceFunc func = (SoupMessageIOSourceFunc)callback;
+        SoupMessageIOSource *message_io_source = (SoupMessageIOSource *)source;
+
+        return (*func) (message_io_source->msg, user_data);
+}
+
+static void
+message_io_source_finalize (GSource *source)
+{
+        SoupMessageIOSource *message_io_source = (SoupMessageIOSource *)source;
+
+        g_object_unref (message_io_source->msg);
+}
+
+static gboolean
+message_io_source_closure_callback (SoupMessage *msg,
+                                    gpointer     data)
+{
+        GClosure *closure = data;
+        GValue param = G_VALUE_INIT;
+        GValue result_value = G_VALUE_INIT;
+        gboolean result;
+
+        g_value_init (&result_value, G_TYPE_BOOLEAN);
+
+        g_value_init (&param, SOUP_TYPE_MESSAGE);
+        g_value_set_object (&param, msg);
+
+        g_closure_invoke (closure, &result_value, 1, &param, NULL);
+
+        result = g_value_get_boolean (&result_value);
+        g_value_unset (&result_value);
+        g_value_unset (&param);
+
+        return result;
+}
+
+static GSourceFuncs message_io_source_funcs =
+{
+        message_io_source_prepare,
+        NULL,
+        message_io_source_dispatch,
+        message_io_source_finalize,
+        (GSourceFunc)message_io_source_closure_callback,
+        (GSourceDummyMarshal)g_cclosure_marshal_generic,
+};
+
+GSource *
+soup_message_io_source_new (GSource *base_source,
+                            GObject *msg,
+                            gboolean paused,
+                            gboolean (*check_func) (GSource*))
+{
+        GSource *source = g_source_new (&message_io_source_funcs, sizeof (SoupMessageIOSource));
+        g_source_set_name (source, "SoupMessageIOSource");
+        SoupMessageIOSource *message_io_source = (SoupMessageIOSource *)source;
+        message_io_source->msg = g_object_ref (msg);
+        message_io_source->paused = paused;
+        message_io_source->check_func = check_func;
+
+        if (base_source) {
+                g_source_set_dummy_callback (base_source);
+                g_source_add_child_source (source, base_source);
+                g_source_unref (base_source);
+        }
+
+        return source;
+}
diff --git a/libsoup/soup-message-io-source.h b/libsoup/soup-message-io-source.h
new file mode 100644
index 00000000..7ab3eab8
--- /dev/null
+++ b/libsoup/soup-message-io-source.h
@@ -0,0 +1,26 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+/*
+ * soup-message-io-source.c
+ *
+ * Copyright (C) 2000-2003, Ximian, Inc.
+ * Copyright (C) 2021 Igalia S.L.
+ */
+
+#pragma once
+
+#include "soup.h"
+
+typedef struct {
+        GSource source;
+        GObject *msg;
+        gboolean (*check_func) (GSource*);
+        gboolean paused;
+} SoupMessageIOSource;
+
+typedef gboolean (*SoupMessageIOSourceFunc) (GObject     *msg,
+                                             gpointer     user_data);
+
+GSource *soup_message_io_source_new (GSource     *base_source,
+                                     GObject     *msg,
+                                     gboolean     paused,
+                                     gboolean   (*check_func) (GSource*));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]