]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
generic socket transport code: work in terms of DBusSocket
authorSimon McVittie <simon.mcvittie@collabora.co.uk>
Thu, 12 Mar 2015 18:33:46 +0000 (18:33 +0000)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Tue, 12 May 2015 17:35:24 +0000 (18:35 +0100)
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=89444
Reviewed-by: Ralf Habacker <ralf.habacker@freenet.de>
dbus/dbus-connection.c
dbus/dbus-transport-protected.h
dbus/dbus-transport-socket.c
dbus/dbus-transport-socket.h
dbus/dbus-transport.c
dbus/dbus-transport.h

index 8952b75f538aa6a7f87b10a6381c83bc17beb086..1bd1d86fc05c2bf21db610cd9c0d88f520ac4718 100644 (file)
@@ -5149,14 +5149,19 @@ dbus_connection_get_socket(DBusConnection              *connection,
                            int                         *fd)
 {
   dbus_bool_t retval;
+  DBusSocket s = DBUS_SOCKET_INIT;
 
   _dbus_return_val_if_fail (connection != NULL, FALSE);
   _dbus_return_val_if_fail (connection->transport != NULL, FALSE);
   
   CONNECTION_LOCK (connection);
   
-  retval = _dbus_transport_get_socket_fd (connection->transport,
-                                          fd);
+  retval = _dbus_transport_get_socket_fd (connection->transport, &s);
+
+  if (retval)
+    {
+      *fd = DBUS_SOCKET_GET_INT (s);
+    }
 
   CONNECTION_UNLOCK (connection);
 
index 396f0ffde7e38212ec5c97b8c5cfb71838eafaa0..ee627a3ab2f5e984d5416d2a7a5bf85c6d588edb 100644 (file)
@@ -67,7 +67,7 @@ struct DBusTransportVTable
   /**< Outstanding messages counter changed */
 
   dbus_bool_t (* get_socket_fd) (DBusTransport *transport,
-                                 int           *fd_p);
+                                 DBusSocket    *fd_p);
   /**< Get socket file descriptor */
 };
 
index c1e47018b7c00f7f5bd14b23d932d8fee770a739..bc4b312133bae84e4bf5e26411374be3a4db3d52 100644 (file)
@@ -49,7 +49,7 @@ typedef struct DBusTransportSocket DBusTransportSocket;
 struct DBusTransportSocket
 {
   DBusTransport base;                   /**< Parent instance */
-  int fd;                               /**< File descriptor. */
+  DBusSocket fd;                        /**< File descriptor. */
   DBusWatch *read_watch;                /**< Watch for readability. */
   DBusWatch *write_watch;               /**< Watch for writability. */
 
@@ -159,9 +159,9 @@ check_write_watch (DBusTransport *transport)
         }
     }
 
-  _dbus_verbose ("check_write_watch(): needed = %d on connection %p watch %p fd = %d outgoing messages exist %d\n",
+  _dbus_verbose ("check_write_watch(): needed = %d on connection %p watch %p fd = %" DBUS_SOCKET_FORMAT " outgoing messages exist %d\n",
                  needed, transport->connection, socket_transport->write_watch,
-                 socket_transport->fd,
+                 DBUS_SOCKET_PRINTABLE (socket_transport->fd),
                  _dbus_connection_has_messages_to_send_unlocked (transport->connection));
 
   _dbus_connection_toggle_watch_unlocked (transport->connection,
@@ -177,7 +177,8 @@ check_read_watch (DBusTransport *transport)
   DBusTransportSocket *socket_transport = (DBusTransportSocket*) transport;
   dbus_bool_t need_read_watch;
 
-  _dbus_verbose ("fd = %d\n",socket_transport->fd);
+  _dbus_verbose ("fd = %" DBUS_SOCKET_FORMAT "\n",
+                 DBUS_SOCKET_PRINTABLE (socket_transport->fd));
   
   if (transport->connection == NULL)
     return;
@@ -514,9 +515,9 @@ do_writing (DBusTransport *transport)
     }
 
 #if 1
-  _dbus_verbose ("do_writing(), have_messages = %d, fd = %d\n",
+  _dbus_verbose ("do_writing(), have_messages = %d, fd = %" DBUS_SOCKET_FORMAT "\n",
                  _dbus_connection_has_messages_to_send_unlocked (transport->connection),
-                 socket_transport->fd);
+                 DBUS_SOCKET_PRINTABLE (socket_transport->fd));
 #endif
   
   oom = FALSE;
@@ -741,7 +742,8 @@ do_reading (DBusTransport *transport)
   dbus_bool_t oom;
   int saved_errno;
 
-  _dbus_verbose ("fd = %d\n",socket_transport->fd);
+  _dbus_verbose ("fd = %" DBUS_SOCKET_FORMAT "\n",
+                 DBUS_SOCKET_PRINTABLE (socket_transport->fd));
   
   /* No messages without authentication! */
   if (!_dbus_transport_try_to_authenticate (transport))
@@ -1007,7 +1009,7 @@ socket_handle_watch (DBusTransport *transport,
         _dbus_verbose ("asked to handle write watch with non-write condition 0x%x\n",
                        flags);
       else
-        _dbus_verbose ("asked to handle watch %p on fd %d that we don't recognize\n",
+        _dbus_verbose ("asked to handle watch %p on fd %" DBUS_SOCKET_FORMAT " that we don't recognize\n",
                        watch, dbus_watch_get_socket (watch));
     }
 #endif /* DBUS_ENABLE_VERBOSE_MODE */
@@ -1025,7 +1027,7 @@ socket_disconnect (DBusTransport *transport)
   free_watches (transport);
   
   _dbus_close_socket (socket_transport->fd, NULL);
-  socket_transport->fd = -1;
+  DBUS_SOCKET_INVALIDATE (socket_transport->fd);
 }
 
 static dbus_bool_t
@@ -1076,13 +1078,13 @@ socket_do_iteration (DBusTransport *transport,
   int poll_res;
   int poll_timeout;
 
-  _dbus_verbose (" iteration flags = %s%s timeout = %d read_watch = %p write_watch = %p fd = %d\n",
+  _dbus_verbose (" iteration flags = %s%s timeout = %d read_watch = %p write_watch = %p fd = %" DBUS_SOCKET_FORMAT "\n",
                  flags & DBUS_ITERATION_DO_READING ? "read" : "",
                  flags & DBUS_ITERATION_DO_WRITING ? "write" : "",
                  timeout_milliseconds,
                  socket_transport->read_watch,
                  socket_transport->write_watch,
-                 socket_transport->fd);
+                 DBUS_SOCKET_PRINTABLE (socket_transport->fd));
   
   /* the passed in DO_READING/DO_WRITING flags indicate whether to
    * read/write messages, but regardless of those we may need to block
@@ -1090,7 +1092,7 @@ socket_do_iteration (DBusTransport *transport,
    * we don't want to read any messages yet if not given DO_READING.
    */
 
-  poll_fd.fd = socket_transport->fd;
+  poll_fd.fd = DBUS_SOCKET_GET_POLLABLE (socket_transport->fd);
   poll_fd.events = 0;
   
   if (_dbus_transport_try_to_authenticate (transport))
@@ -1239,7 +1241,7 @@ socket_live_messages_changed (DBusTransport *transport)
 
 static dbus_bool_t
 socket_get_socket_fd (DBusTransport *transport,
-                      int           *fd_p)
+                      DBusSocket    *fd_p)
 {
   DBusTransportSocket *socket_transport = (DBusTransportSocket*) transport;
   
@@ -1270,7 +1272,7 @@ static const DBusTransportVTable socket_vtable = {
  * @returns the new transport, or #NULL if no memory.
  */
 DBusTransport*
-_dbus_transport_new_for_socket (int               fd,
+_dbus_transport_new_for_socket (DBusSocket        fd,
                                 const DBusString *server_guid,
                                 const DBusString *address)
 {
@@ -1286,14 +1288,14 @@ _dbus_transport_new_for_socket (int               fd,
   if (!_dbus_string_init (&socket_transport->encoded_incoming))
     goto failed_1;
   
-  socket_transport->write_watch = _dbus_watch_new (fd,
+  socket_transport->write_watch = _dbus_watch_new (DBUS_SOCKET_GET_POLLABLE (fd),
                                                  DBUS_WATCH_WRITABLE,
                                                  FALSE,
                                                  NULL, NULL, NULL);
   if (socket_transport->write_watch == NULL)
     goto failed_2;
   
-  socket_transport->read_watch = _dbus_watch_new (fd,
+  socket_transport->read_watch = _dbus_watch_new (DBUS_SOCKET_GET_POLLABLE (fd),
                                                 DBUS_WATCH_READABLE,
                                                 FALSE,
                                                 NULL, NULL, NULL);
@@ -1351,7 +1353,7 @@ _dbus_transport_new_for_tcp_socket (const char     *host,
                                     const char     *noncefile,
                                     DBusError      *error)
 {
-  int fd;
+  DBusSocket fd;
   DBusTransport *transport;
   DBusString address;
   
@@ -1388,7 +1390,7 @@ _dbus_transport_new_for_tcp_socket (const char     *host,
     goto error;
 
   fd = _dbus_connect_tcp_socket_with_nonce (host, port, family, noncefile, error);
-  if (fd < 0)
+  if (!DBUS_SOCKET_IS_VALID (fd))
     {
       _DBUS_ASSERT_ERROR_IS_SET (error);
       _dbus_string_free (&address);
@@ -1404,7 +1406,7 @@ _dbus_transport_new_for_tcp_socket (const char     *host,
     {
       dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
       _dbus_close_socket (fd, NULL);
-      fd = -1;
+      DBUS_SOCKET_INVALIDATE (fd);
     }
 
   return transport;
index 8aefae37c26ed0e7d454ed5328b6eb251bc075e4..b8267ff68f749a96e63e91cf18d8340e1f0a15ed 100644 (file)
@@ -27,7 +27,7 @@
 
 DBUS_BEGIN_DECLS
 
-DBusTransport*          _dbus_transport_new_for_socket     (int                fd,
+DBusTransport*          _dbus_transport_new_for_socket     (DBusSocket         fd,
                                                             const DBusString  *server_guid,
                                                             const DBusString  *address);
 DBusTransport*          _dbus_transport_new_for_tcp_socket (const char        *host,
index a43e7bbe561ffbee52871888017549220da96a96..31586b1cbb936c99d26f8da2460eaa19b99474ff 100644 (file)
@@ -949,7 +949,7 @@ _dbus_transport_set_connection (DBusTransport  *transport,
  */
 dbus_bool_t
 _dbus_transport_get_socket_fd (DBusTransport *transport,
-                               int           *fd_p)
+                               DBusSocket    *fd_p)
 {
   dbus_bool_t retval;
   
index 843f2312caf5a64baa70b17dad03f7375dd7f841..9e3787ddbb77825ba7cce9a4d9022ff046876c2e 100644 (file)
@@ -71,7 +71,7 @@ void               _dbus_transport_set_max_received_unix_fds(DBusTransport
 long               _dbus_transport_get_max_received_unix_fds(DBusTransport              *transport);
 
 dbus_bool_t        _dbus_transport_get_socket_fd          (DBusTransport              *transport,
-                                                           int                        *fd_p);
+                                                           DBusSocket                 *fd_p);
 dbus_bool_t        _dbus_transport_get_unix_user          (DBusTransport              *transport,
                                                            unsigned long              *uid);
 dbus_bool_t        _dbus_transport_get_unix_process_id     (DBusTransport              *transport,