[libsoup/wip/new-master: 38/57] Delete SoupSocket::fd and all fd exposing APIs




commit 7cddcf5d04b3ce439bcdca98020320e12ebbc558
Author: Patrick Griffis <pgriffis igalia com>
Date:   Tue Mar 24 23:21:09 2020 -0700

    Delete SoupSocket::fd and all fd exposing APIs

 docs/reference/libsoup-2.4-sections.txt |  2 --
 libsoup/soup-server.c                   | 49 --------------------------
 libsoup/soup-server.h                   |  5 ---
 libsoup/soup-socket-private.h           |  1 -
 libsoup/soup-socket.c                   | 62 +--------------------------------
 libsoup/soup-socket.h                   |  3 --
 tests/connection-test.c                 |  5 ++-
 tests/server-test.c                     |  2 +-
 tests/socket-test.c                     | 27 ++++++--------
 9 files changed, 16 insertions(+), 140 deletions(-)
---
diff --git a/docs/reference/libsoup-2.4-sections.txt b/docs/reference/libsoup-2.4-sections.txt
index d826077e..02d1af95 100644
--- a/docs/reference/libsoup-2.4-sections.txt
+++ b/docs/reference/libsoup-2.4-sections.txt
@@ -229,7 +229,6 @@ soup_server_listen
 soup_server_listen_all
 soup_server_listen_local
 soup_server_listen_socket
-soup_server_listen_fd
 soup_server_get_listeners
 soup_server_get_uris
 soup_server_disconnect
@@ -558,7 +557,6 @@ soup_socket_is_connected
 <SUBSECTION>
 soup_socket_get_local_address
 soup_socket_get_remote_address
-soup_socket_get_fd
 <SUBSECTION>
 SoupSocketIOStatus
 soup_socket_read
diff --git a/libsoup/soup-server.c b/libsoup/soup-server.c
index eb2c3530..221c182b 100644
--- a/libsoup/soup-server.c
+++ b/libsoup/soup-server.c
@@ -1638,55 +1638,6 @@ soup_server_listen_socket (SoupServer *server, GSocket *socket,
        return success;
 }
 
-/**
- * soup_server_listen_fd:
- * @server: a #SoupServer
- * @fd: the file descriptor of a listening socket
- * @options: listening options for this server
- * @error: return location for a #GError
- *
- * This attempts to set up @server to listen for connections on
- * @fd.
- *
- * See soup_server_listen() for more details.
- *
- * Note that @server will close @fd when you free it or call
- * soup_server_disconnect().
- *
- * Return value: %TRUE on success, %FALSE if an error occurred (in
- * which case @error will be set).
- *
- * Since: 2.48
- **/
-gboolean
-soup_server_listen_fd (SoupServer *server, int fd,
-                      SoupServerListenOptions options,
-                      GError **error)
-{
-       SoupServerPrivate *priv;
-       SoupSocket *listener;
-       gboolean success;
-
-       g_return_val_if_fail (SOUP_IS_SERVER (server), FALSE);
-       g_return_val_if_fail (!(options & SOUP_SERVER_LISTEN_IPV4_ONLY) &&
-                             !(options & SOUP_SERVER_LISTEN_IPV6_ONLY), FALSE);
-
-       priv = soup_server_get_instance_private (server);
-       g_return_val_if_fail (priv->disposed == FALSE, FALSE);
-
-       listener = g_initable_new (SOUP_TYPE_SOCKET, NULL, error,
-                                  SOUP_SOCKET_FD, fd,
-                                  SOUP_SOCKET_IPV6_ONLY, TRUE,
-                                  NULL);
-       if (!listener)
-               return FALSE;
-
-       success = soup_server_listen_internal (server, listener, options, error);
-       g_object_unref (listener);
-
-       return success;
-}
-
 /**
  * soup_server_get_uris:
  * @server: a #SoupServer
diff --git a/libsoup/soup-server.h b/libsoup/soup-server.h
index 6dc07a0d..bf1d7e3b 100644
--- a/libsoup/soup-server.h
+++ b/libsoup/soup-server.h
@@ -97,11 +97,6 @@ gboolean        soup_server_listen_socket      (SoupServer               *server
                                                SoupServerListenOptions   options,
                                                GError                  **error);
 SOUP_AVAILABLE_IN_2_48
-gboolean        soup_server_listen_fd          (SoupServer               *server,
-                                               int                       fd,
-                                               SoupServerListenOptions   options,
-                                               GError                  **error);
-SOUP_AVAILABLE_IN_2_48
 GSList         *soup_server_get_uris           (SoupServer               *server);
 SOUP_AVAILABLE_IN_2_48
 GSList         *soup_server_get_listeners      (SoupServer               *server);
diff --git a/libsoup/soup-socket-private.h b/libsoup/soup-socket-private.h
index efe9affe..06e9a35e 100644
--- a/libsoup/soup-socket-private.h
+++ b/libsoup/soup-socket-private.h
@@ -9,7 +9,6 @@
 #include "soup-socket.h"
 
 #define SOUP_SOCKET_SOCKET_PROPERTIES "socket-properties"
-#define SOUP_SOCKET_FD                "fd"
 #define SOUP_SOCKET_GSOCKET           "gsocket"
 #define SOUP_SOCKET_IOSTREAM          "iostream"
 #define SOUP_SOCKET_IPV6_ONLY         "ipv6-only"
diff --git a/libsoup/soup-socket.c b/libsoup/soup-socket.c
index 21964efc..2dead3c4 100644
--- a/libsoup/soup-socket.c
+++ b/libsoup/soup-socket.c
@@ -44,7 +44,6 @@ static guint signals[LAST_SIGNAL] = { 0 };
 enum {
        PROP_0,
 
-       PROP_FD,
        PROP_GSOCKET,
        PROP_IOSTREAM,
        PROP_LOCAL_ADDRESS,
@@ -115,7 +114,6 @@ soup_socket_init (SoupSocket *sock)
        SoupSocketPrivate *priv = soup_socket_get_instance_private (sock);
 
        priv->non_blocking = TRUE;
-       priv->fd = -1;
        g_mutex_init (&priv->iolock);
 
         priv->async_context = g_main_context_ref_thread_default ();
@@ -131,29 +129,10 @@ soup_socket_initable_init (GInitable     *initable,
 
        if (priv->conn) {
                g_warn_if_fail (priv->gsock == NULL);
-               g_warn_if_fail (priv->fd == -1);
 
                finish_socket_setup (sock);
        }
 
-       if (priv->fd != -1) {
-               guint type, len = sizeof (type);
-
-               g_warn_if_fail (priv->gsock == NULL);
-
-               /* GSocket will g_error() this, so we have to check ourselves. */
-               if (getsockopt (priv->fd, SOL_SOCKET, SO_TYPE,
-                               (gpointer)&type, (gpointer)&len) == -1) {
-                       g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
-                                            _("Can’t import non-socket as SoupSocket"));
-                       return FALSE;
-               }
-
-               priv->gsock = g_socket_new_from_fd (priv->fd, error);
-               if (!priv->gsock)
-                       return FALSE;
-       }
-
        if (priv->gsock != NULL) {
                int listening;
 
@@ -277,9 +256,6 @@ soup_socket_set_property (GObject *object, guint prop_id,
        SoupSocketProperties *props;
 
        switch (prop_id) {
-       case PROP_FD:
-               priv->fd = g_value_get_int (value);
-               break;
        case PROP_GSOCKET:
                priv->gsock = g_value_dup_object (value);
                break;
@@ -358,9 +334,6 @@ soup_socket_get_property (GObject *object, guint prop_id,
        SoupSocketPrivate *priv = soup_socket_get_instance_private (sock);
 
        switch (prop_id) {
-       case PROP_FD:
-               g_value_set_int (value, priv->fd);
-               break;
        case PROP_LOCAL_ADDRESS:
                g_value_set_object (value, soup_socket_get_local_address (sock));
                break;
@@ -514,14 +487,6 @@ soup_socket_class_init (SoupSocketClass *socket_class)
 
 
        /* properties */
-       g_object_class_install_property (
-                object_class, PROP_FD,
-                g_param_spec_int (SOUP_SOCKET_FD,
-                                  "FD",
-                                  "The socket's file descriptor",
-                                  -1, G_MAXINT, -1,
-                                  G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
-                                  G_PARAM_STATIC_STRINGS));
        g_object_class_install_property (
                 object_class, PROP_GSOCKET,
                 g_param_spec_object (SOUP_SOCKET_GSOCKET,
@@ -640,9 +605,7 @@ soup_socket_class_init (SoupSocketClass *socket_class)
         *
         * Note that for "ordinary" #SoupSockets this will be set for
         * both listening sockets and the sockets emitted by
-        * #SoupSocket::new-connection, but for sockets created by
-        * setting #SoupSocket:fd, it will only be set for listening
-        * sockets.
+        * #SoupSocket::new-connection.
         **/
        g_object_class_install_property (
                object_class, PROP_IS_SERVER,
@@ -1074,29 +1037,6 @@ soup_socket_connect_sync (SoupSocket *sock, GCancellable *cancellable)
                return socket_legacy_error (sock, error);
 }
 
-/**
- * soup_socket_get_fd:
- * @sock: a #SoupSocket
- *
- * Gets @sock's underlying file descriptor.
- *
- * Note that fiddling with the file descriptor may break the
- * #SoupSocket.
- *
- * Return value: @sock's file descriptor.
- */
-int
-soup_socket_get_fd (SoupSocket *sock)
-{
-       SoupSocketPrivate *priv;
-
-       g_return_val_if_fail (SOUP_IS_SOCKET (sock), -1);
-
-       priv = soup_socket_get_instance_private (sock);
-
-       return g_socket_get_fd (priv->gsock);
-}
-
 GSocket *
 soup_socket_get_gsocket (SoupSocket *sock)
 {
diff --git a/libsoup/soup-socket.h b/libsoup/soup-socket.h
index 808719de..a9b61a68 100644
--- a/libsoup/soup-socket.h
+++ b/libsoup/soup-socket.h
@@ -71,9 +71,6 @@ void           soup_socket_connect_async      (SoupSocket         *sock,
 SOUP_AVAILABLE_IN_2_4
 guint          soup_socket_connect_sync       (SoupSocket         *sock,
                                               GCancellable       *cancellable);
-SOUP_AVAILABLE_IN_2_4
-int            soup_socket_get_fd             (SoupSocket         *sock);
-
 SOUP_AVAILABLE_IN_2_4
 gboolean       soup_socket_listen             (SoupSocket         *sock);
 
diff --git a/tests/connection-test.c b/tests/connection-test.c
index d6e4dc6e..27ee74e9 100644
--- a/tests/connection-test.c
+++ b/tests/connection-test.c
@@ -6,6 +6,7 @@
 #include "test-utils.h"
 
 #include "soup-connection.h"
+#include "soup-socket-private.h"
 
 #include <gio/gnetworking.h>
 
@@ -23,12 +24,14 @@ static void
 close_socket (SoupMessage *msg, gpointer user_data)
 {
        SoupSocket *sock = user_data;
+        GSocket *gsocket;
        int sockfd;
 
        /* Actually calling soup_socket_disconnect() here would cause
         * us to leak memory, so just shutdown the socket instead.
         */
-       sockfd = soup_socket_get_fd (sock);
+        gsocket = soup_socket_get_gsocket (sock); 
+       sockfd = g_socket_get_fd (gsocket);
 #ifdef G_OS_WIN32
        shutdown (sockfd, SD_SEND);
 #else
diff --git a/tests/server-test.c b/tests/server-test.c
index 47093e08..229a1e98 100644
--- a/tests/server-test.c
+++ b/tests/server-test.c
@@ -678,7 +678,7 @@ do_fd_import_test (void)
        g_assert_cmpint (g_slist_length (listeners), ==, 0);
        g_slist_free (listeners);
 
-       soup_server_listen_fd (server, g_socket_get_fd (gsock), 0, &error);
+       soup_server_listen_socket (server, gsock, 0, &error);
        g_assert_no_error (error);
        listeners = soup_server_get_listeners (server);
        g_assert_cmpint (g_slist_length (listeners), ==, 1);
diff --git a/tests/socket-test.c b/tests/socket-test.c
index f4e51d6c..0fd20529 100644
--- a/tests/socket-test.c
+++ b/tests/socket-test.c
@@ -115,6 +115,12 @@ do_unconnected_socket_test (void)
        g_object_unref (sock);
 }
 
+static int
+socket_get_fd (SoupSocket *socket)
+{
+        return g_socket_get_fd (soup_socket_get_gsocket (socket));
+}
+
 static void
 do_socket_from_fd_client_test (void)
 {
@@ -156,7 +162,7 @@ do_socket_from_fd_client_test (void)
                      SOUP_SOCKET_REMOTE_ADDRESS, &remote,
                      SOUP_SOCKET_IS_SERVER, &is_server,
                      NULL);
-       g_assert_cmpint (soup_socket_get_fd (sock), ==, g_socket_get_fd (gsock));
+       g_assert_cmpint (socket_get_fd (sock), ==, g_socket_get_fd (gsock));
        g_assert_false (is_server);
        g_assert_true (soup_socket_is_connected (sock));
 
@@ -213,7 +219,7 @@ do_socket_from_fd_server_test (void)
                      SOUP_SOCKET_LOCAL_ADDRESS, &local,
                      SOUP_SOCKET_IS_SERVER, &is_server,
                      NULL);
-       g_assert_cmpint (soup_socket_get_fd (sock), ==, g_socket_get_fd (gsock));
+       g_assert_cmpint (socket_get_fd (sock), ==, g_socket_get_fd (gsock));
        g_assert_true (is_server);
        g_assert_true (soup_socket_is_connected (sock));
 
@@ -238,21 +244,8 @@ do_socket_from_fd_bad_test (void)
        GInetSocketAddress *local, *remote;
        GSocketAddress *gaddr;
        gboolean is_server;
-       int fd;
        GError *error = NULL;
 
-       /* Importing a non-socket fd gives an error */
-       fd = open (g_test_get_filename (G_TEST_DIST, "test-cert.pem", NULL), O_RDONLY);
-       g_assert_cmpint (fd, !=, -1);
-
-       sock = g_initable_new (SOUP_TYPE_SOCKET, NULL, &error,
-                              SOUP_SOCKET_FD, fd,
-                              NULL);
-       g_assert_error (error, G_IO_ERROR, G_IO_ERROR_FAILED);
-       g_clear_error (&error);
-       g_assert_null (sock);
-       close (fd);
-
        /* Importing an unconnected socket gives an error */
        gsock = g_socket_new (G_SOCKET_FAMILY_IPV4,
                              G_SOCKET_TYPE_STREAM,
@@ -262,7 +255,7 @@ do_socket_from_fd_bad_test (void)
        g_assert_false (g_socket_is_connected (gsock));
 
        sock = g_initable_new (SOUP_TYPE_SOCKET, NULL, &error,
-                              SOUP_SOCKET_FD, g_socket_get_fd (gsock),
+                              SOUP_SOCKET_GSOCKET, gsock,
                               NULL);
        g_assert_error (error, G_IO_ERROR, G_IO_ERROR_FAILED);
        g_clear_error (&error);
@@ -314,7 +307,7 @@ do_socket_from_fd_bad_test (void)
                      SOUP_SOCKET_REMOTE_ADDRESS, &remote,
                      SOUP_SOCKET_IS_SERVER, &is_server,
                      NULL);
-       g_assert_cmpint (soup_socket_get_fd (sock2), ==, g_socket_get_fd (gsock2));
+       g_assert_cmpint (socket_get_fd (sock2), ==, g_socket_get_fd (gsock2));
        g_assert_true (soup_socket_is_connected (sock2));
        /* This is wrong, but can't be helped. */
        g_assert_false (is_server);


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