[libsoup/carlosgc/io-split: 7/9] Pull SoupMessageIOSource into its own file
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup/carlosgc/io-split: 7/9] Pull SoupMessageIOSource into its own file
- Date: Tue, 27 Apr 2021 08:49:07 +0000 (UTC)
commit cbb6030055690807243f51aab1c3cd3a7de2b9e5
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 (¶m, G_TYPE_OBJECT);
- g_value_set_object (¶m, msg);
-
- g_closure_invoke (closure, &result_value, 1, ¶m, NULL);
-
- result = g_value_get_boolean (&result_value);
- g_value_unset (&result_value);
- g_value_unset (¶m);
-
- 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 (¶m, SOUP_TYPE_MESSAGE);
+ g_value_set_object (¶m, msg);
+
+ g_closure_invoke (closure, &result_value, 1, ¶m, NULL);
+
+ result = g_value_get_boolean (&result_value);
+ g_value_unset (&result_value);
+ g_value_unset (¶m);
+
+ 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]