[libsoup/wip/http2-a: 1/7] rename SoupIOStream to SoupSocketIOStream



commit 1825b60c16ec10cd204ccadc7ea69df90de31c40
Author: Dan Winship <danw gnome org>
Date:   Mon Aug 26 21:37:26 2013 -0400

    rename SoupIOStream to SoupSocketIOStream

 libsoup/Makefile.am             |    4 +-
 libsoup/soup-io-stream.c        |  205 ---------------------------------------
 libsoup/soup-io-stream.h        |   40 --------
 libsoup/soup-socket-io-stream.c |  186 +++++++++++++++++++++++++++++++++++
 libsoup/soup-socket-io-stream.h |   39 ++++++++
 libsoup/soup-socket.c           |   20 ++---
 6 files changed, 234 insertions(+), 260 deletions(-)
---
diff --git a/libsoup/Makefile.am b/libsoup/Makefile.am
index 403c1c2..19dff18 100644
--- a/libsoup/Makefile.am
+++ b/libsoup/Makefile.am
@@ -139,8 +139,6 @@ libsoup_2_4_la_SOURCES =            \
        soup-filter-input-stream.h      \
        soup-form.c                     \
        soup-headers.c                  \
-       soup-io-stream.h                \
-       soup-io-stream.c                \
        soup-logger.c                   \
        soup-message.c                  \
        soup-message-body.c             \
@@ -176,6 +174,8 @@ libsoup_2_4_la_SOURCES =            \
        soup-session-private.h          \
        soup-session-sync.c             \
        soup-socket.c                   \
+       soup-socket-io-stream.h         \
+       soup-socket-io-stream.c         \
        soup-socket-private.h           \
        soup-socket-properties.c        \
        soup-status.c                   \
diff --git a/libsoup/soup-socket-io-stream.c b/libsoup/soup-socket-io-stream.c
new file mode 100644
index 0000000..a1a9426
--- /dev/null
+++ b/libsoup/soup-socket-io-stream.c
@@ -0,0 +1,186 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * soup-socket-io-stream.c
+ *
+ * Copyright 2012, 2013 Red Hat, Inc.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "soup-socket-io-stream.h"
+#include "soup.h"
+#include "soup-filter-input-stream.h"
+
+struct _SoupSocketIOStreamPrivate {
+       GIOStream *base_iostream;
+
+       GInputStream *istream;
+       GOutputStream *ostream;
+       gboolean disposing;
+};
+
+enum {
+       PROP_0,
+
+       PROP_BASE_IOSTREAM
+};
+
+G_DEFINE_TYPE (SoupSocketIOStream, soup_socket_io_stream, G_TYPE_IO_STREAM)
+
+static void
+soup_socket_io_stream_init (SoupSocketIOStream *stream)
+{
+       stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
+                                                   SOUP_TYPE_SOCKET_IO_STREAM,
+                                                   SoupSocketIOStreamPrivate);
+}
+
+static void
+soup_socket_io_stream_set_property (GObject *object, guint prop_id,
+                                   const GValue *value, GParamSpec *pspec)
+{
+       SoupSocketIOStream *ssios = SOUP_SOCKET_IO_STREAM (object);
+       GIOStream *io;
+
+       switch (prop_id) {
+       case PROP_BASE_IOSTREAM:
+               io = ssios->priv->base_iostream = g_value_dup_object (value);
+               if (io) {
+                       ssios->priv->istream =
+                               soup_filter_input_stream_new (g_io_stream_get_input_stream (io));
+                       ssios->priv->ostream =
+                               g_object_ref (g_io_stream_get_output_stream (io));
+               } else {
+                       g_clear_object (&ssios->priv->istream);
+                       g_clear_object (&ssios->priv->ostream);
+               }
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+               break;
+       }
+}
+
+static void
+soup_socket_io_stream_get_property (GObject *object, guint prop_id,
+                                   GValue *value, GParamSpec *pspec)
+{
+       SoupSocketIOStream *ssios = SOUP_SOCKET_IO_STREAM (object);
+
+       switch (prop_id) {
+       case PROP_BASE_IOSTREAM:
+               g_value_set_object (value, ssios->priv->base_iostream);
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+               break;
+       }
+}
+
+static void
+soup_socket_io_stream_dispose (GObject *object)
+{
+       SoupSocketIOStream *ssios = SOUP_SOCKET_IO_STREAM (object);
+
+       ssios->priv->disposing = TRUE;
+
+       G_OBJECT_CLASS (soup_socket_io_stream_parent_class)->dispose (object);
+}
+
+static void
+soup_socket_io_stream_finalize (GObject *object)
+{
+       SoupSocketIOStream *ssios = SOUP_SOCKET_IO_STREAM (object);
+
+       g_clear_object (&ssios->priv->base_iostream);
+       g_clear_object (&ssios->priv->istream);
+       g_clear_object (&ssios->priv->ostream);
+
+       G_OBJECT_CLASS (soup_socket_io_stream_parent_class)->finalize (object);
+}
+
+static GInputStream *
+soup_socket_io_stream_get_input_stream (GIOStream *stream)
+{
+       return SOUP_SOCKET_IO_STREAM (stream)->priv->istream;
+}
+
+static GOutputStream *
+soup_socket_io_stream_get_output_stream (GIOStream *stream)
+{
+       return SOUP_SOCKET_IO_STREAM (stream)->priv->ostream;
+}
+
+
+static gboolean
+soup_socket_io_stream_close (GIOStream     *stream,
+                            GCancellable  *cancellable,
+                            GError       **error)
+{
+       SoupSocketIOStream *ssios = SOUP_SOCKET_IO_STREAM (stream);
+
+       if (ssios->priv->disposing)
+               return TRUE;
+
+       return g_io_stream_close (ssios->priv->base_iostream,
+                                 cancellable, error);
+}
+
+static void    
+soup_socket_io_stream_close_async (GIOStream           *stream,
+                                  int                  io_priority,
+                                  GCancellable        *cancellable,
+                                  GAsyncReadyCallback  callback,
+                                  gpointer             user_data)
+{
+       g_io_stream_close_async (SOUP_SOCKET_IO_STREAM (stream)->priv->base_iostream,
+                                io_priority, cancellable, callback, user_data);
+}
+
+static gboolean
+soup_socket_io_stream_close_finish (GIOStream     *stream,
+                                   GAsyncResult  *result,
+                                   GError       **error)
+{
+       return g_io_stream_close_finish (SOUP_SOCKET_IO_STREAM (stream)->priv->base_iostream,
+                                        result, error);
+}
+
+static void
+soup_socket_io_stream_class_init (SoupSocketIOStreamClass *stream_class)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (stream_class);
+       GIOStreamClass *io_stream_class = G_IO_STREAM_CLASS (stream_class);
+
+       g_type_class_add_private (stream_class, sizeof (SoupSocketIOStreamPrivate));
+
+       object_class->set_property = soup_socket_io_stream_set_property;
+       object_class->get_property = soup_socket_io_stream_get_property;
+       object_class->dispose = soup_socket_io_stream_dispose;
+       object_class->finalize = soup_socket_io_stream_finalize;
+
+       io_stream_class->get_input_stream = soup_socket_io_stream_get_input_stream;
+       io_stream_class->get_output_stream = soup_socket_io_stream_get_output_stream;
+       io_stream_class->close_fn = soup_socket_io_stream_close;
+       io_stream_class->close_async = soup_socket_io_stream_close_async;
+       io_stream_class->close_finish = soup_socket_io_stream_close_finish;
+
+       g_object_class_install_property (
+               object_class, PROP_BASE_IOSTREAM,
+               g_param_spec_object ("base-iostream",
+                                    "Base IOStream",
+                                    "Base GIOStream",
+                                    G_TYPE_IO_STREAM,
+                                    G_PARAM_READWRITE |
+                                    G_PARAM_CONSTRUCT_ONLY));
+}
+
+GIOStream *
+soup_socket_io_stream_new (GIOStream *base_iostream)
+{
+       return g_object_new (SOUP_TYPE_SOCKET_IO_STREAM,
+                            "base-iostream", base_iostream,
+                            NULL);
+}
diff --git a/libsoup/soup-socket-io-stream.h b/libsoup/soup-socket-io-stream.h
new file mode 100644
index 0000000..b98ac00
--- /dev/null
+++ b/libsoup/soup-socket-io-stream.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright 2012 Red Hat, Inc.
+ */
+
+#ifndef __SOUP_SOCKET_IO_STREAM_H__
+#define __SOUP_SOCKET_IO_STREAM_H__ 1
+
+#include <libsoup/soup-types.h>
+
+G_BEGIN_DECLS
+
+#define SOUP_TYPE_SOCKET_IO_STREAM            (soup_socket_io_stream_get_type ())
+#define SOUP_SOCKET_IO_STREAM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
SOUP_TYPE_SOCKET_IO_STREAM, SoupSocketIOStream))
+#define SOUP_SOCKET_IO_STREAM_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), SOUP_TYPE_SOCKET_IO_STREAM, 
SoupSocketIOStreamClass))
+#define SOUP_IS_SOCKET_IO_STREAM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
SOUP_TYPE_SOCKET_IO_STREAM))
+#define SOUP_IS_SOCKET_IO_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), SOUP_TYPE_SOCKET_IO_STREAM))
+#define SOUP_SOCKET_IO_STREAM_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), SOUP_TYPE_SOCKET_IO_STREAM, 
SoupSocketIOStreamClass))
+
+typedef struct _SoupSocketIOStreamPrivate SoupSocketIOStreamPrivate;
+
+typedef struct {
+       GIOStream parent;
+
+       SoupSocketIOStreamPrivate *priv;
+} SoupSocketIOStream;
+
+typedef struct {
+       GIOStreamClass parent_class;
+
+} SoupSocketIOStreamClass;
+
+GType soup_socket_io_stream_get_type (void);
+
+GIOStream *soup_socket_io_stream_new (GIOStream *base_iostream);
+
+G_END_DECLS
+
+#endif /* __SOUP_SOCKET_IO_STREAM_H__ */
diff --git a/libsoup/soup-socket.c b/libsoup/soup-socket.c
index 8838eba..a3a2790 100644
--- a/libsoup/soup-socket.c
+++ b/libsoup/soup-socket.c
@@ -18,7 +18,7 @@
 #include "soup-socket-private.h"
 #include "soup.h"
 #include "soup-filter-input-stream.h"
-#include "soup-io-stream.h"
+#include "soup-socket-io-stream.h"
 
 /**
  * SECTION:soup-socket
@@ -211,8 +211,6 @@ soup_socket_finalize (GObject *object)
 
        g_clear_object (&priv->conn);
        g_clear_object (&priv->iostream);
-       g_clear_object (&priv->istream);
-       g_clear_object (&priv->ostream);
 
        g_clear_object (&priv->local_addr);
        g_clear_object (&priv->remote_addr);
@@ -245,11 +243,9 @@ finish_socket_setup (SoupSocket *sock)
        if (!priv->conn)
                priv->conn = (GIOStream *)g_socket_connection_factory_create_connection (priv->gsock);
        if (!priv->iostream)
-               priv->iostream = soup_io_stream_new (priv->conn, FALSE);
-       if (!priv->istream)
-               priv->istream = g_object_ref (g_io_stream_get_input_stream (priv->iostream));
-       if (!priv->ostream)
-               priv->ostream = g_object_ref (g_io_stream_get_output_stream (priv->iostream));
+               priv->iostream = soup_socket_io_stream_new (priv->conn);
+       priv->istream = g_io_stream_get_input_stream (priv->iostream);
+       priv->ostream = g_io_stream_get_output_stream (priv->iostream);
 
        g_socket_set_timeout (priv->gsock, priv->timeout);
        g_socket_set_option (priv->gsock, IPPROTO_TCP, TCP_NODELAY, TRUE, NULL);
@@ -1358,12 +1354,10 @@ soup_socket_setup_ssl (SoupSocket    *sock,
        g_signal_connect (priv->conn, "notify::peer-certificate",
                          G_CALLBACK (soup_socket_peer_certificate_changed), sock);
 
-       g_clear_object (&priv->istream);
-       g_clear_object (&priv->ostream);
        g_clear_object (&priv->iostream);
-       priv->iostream = soup_io_stream_new (priv->conn, FALSE);
-       priv->istream = g_object_ref (g_io_stream_get_input_stream (priv->iostream));
-       priv->ostream = g_object_ref (g_io_stream_get_output_stream (priv->iostream));
+       priv->iostream = soup_socket_io_stream_new (priv->conn);
+       priv->istream = g_io_stream_get_input_stream (priv->iostream);
+       priv->ostream = g_io_stream_get_output_stream (priv->iostream);
 
        return TRUE;
 }


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