transport: add initial support for synchronous calls 71/68571/1
authorLukasz Skalski <l.skalski@samsung.com>
Fri, 6 May 2016 13:54:50 +0000 (15:54 +0200)
committerLukasz Skalski <l.skalski@samsung.com>
Fri, 6 May 2016 13:58:50 +0000 (15:58 +0200)
Change-Id: I641e09e8710d97e03ffdb467a35cff4c8889edc7

dbus/dbus-transport-protected.h
dbus/dbus-transport.c
dbus/dbus-transport.h

index 4af5c3a..1a02bd2 100644 (file)
@@ -75,6 +75,8 @@ typedef dbus_bool_t (*DBusTransportGetUnixUserFunction) (DBusTransport *transpor
                                                          unsigned long *uid);
 typedef dbus_bool_t (*DBusTransportGetUnixPIDFunction)  (DBusTransport *transport,
                                                          unsigned long *uid);
+typedef DBusMessage * (*DBusTransportSendSyncCallFunction) (DBusTransport *transport,
+                                                            DBusMessage   *message);
 typedef dbus_bool_t (*DBusTransportAssureProtocolFunction) (DBusMessage **message);
 /**
  * Object representing a transport such as a socket.
@@ -118,6 +120,7 @@ struct DBusTransport
   DBusTransportGetUnixUserFunction get_unix_user_function;      /**< Function for getting Unix user ID */
   DBusTransportGetUnixPIDFunction get_unix_process_id_function; /**< Function for getting Unix process ID */
   DBusTransportAssureProtocolFunction assure_protocol_function; /**< Function for converting messages, if needed */
+  DBusTransportSendSyncCallFunction send_sync_call_function;    /**< Function for sending synchronous calls */
   int protocol;                               /**< type of protocol for this transport */
   
   unsigned int disconnected : 1;              /**< #TRUE if we are disconnected. */
@@ -143,6 +146,8 @@ void        _dbus_transport_set_get_unix_user_function       (DBusTransport
                                                               DBusTransportGetUnixUserFunction  function);
 void        _dbus_transport_set_get_unix_process_id_function (DBusTransport                    *transport,
                                                               DBusTransportGetUnixPIDFunction   function);
+void        _dbus_transport_set_send_sync_call_function      (DBusTransport                     *transport,
+                                                              DBusTransportSendSyncCallFunction  function);
 void        _dbus_transport_set_assure_protocol_function     (DBusTransport                    *transport,
                                                               DBusTransportAssureProtocolFunction function,
                                                               int                               protocol);
index 8b8ee1f..e3f9720 100644 (file)
@@ -271,6 +271,7 @@ _dbus_transport_init_base_with_auth (DBusTransport             *transport,
   transport->get_unix_user_function = _dbus_transport_default_get_unix_user;
   transport->get_unix_process_id_function = _dbus_transport_default_get_unix_process_id;
   transport->assure_protocol_function = _dbus_message_assure_dbus1;
+  transport->send_sync_call_function = NULL;
   transport->protocol = DBUS_MAJOR_PROTOCOL_VERSION;
 
   return TRUE;
@@ -283,6 +284,13 @@ _dbus_transport_assure_protocol_version (DBusTransport *transport,
   return transport->assure_protocol_function (message);
 }
 
+DBusMessage *
+_dbus_transport_send_sync_call (DBusTransport *transport,
+                                DBusMessage  **message)
+{
+  return transport->send_sync_call_function (transport, message);
+}
+
 int
 _dbus_transport_get_protocol (DBusTransport *transport)
 {
@@ -981,6 +989,21 @@ _dbus_transport_can_pass_unix_fd(DBusTransport *transport)
 }
 
 /**
+ * Returns TRUE if the transport supports sending synchronous calls.
+ *
+ * @param transport the transport
+ * @returns #TRUE if TRUE it is possible to send sync call across the transport.
+ */
+dbus_bool_t
+_dbus_transport_can_send_sync_call (DBusTransport *transport)
+{
+  if (transport->send_sync_call_function)
+    return TRUE;
+  else
+    return FALSE;
+}
+
+/**
  * Gets the address of a transport. It will be
  * #NULL for a server-side transport.
  *
@@ -1463,6 +1486,19 @@ _dbus_transport_set_get_unix_process_id_function (DBusTransport
 }
 
 /**
+ * Sets a function used to send synchronous calls.
+ *
+ * @param transport the transport
+ * @param function the getter function
+ */
+void
+_dbus_transport_set_send_sync_call_function (DBusTransport                     *transport,
+                                             DBusTransportSendSyncCallFunction  function)
+{
+  transport->send_sync_call_function = function;
+}
+
+/**
  * Sets a function used to assure that messages have correct protocol version
  *
  * @param transport the transport
index 69cc4f2..e60857a 100644 (file)
@@ -42,6 +42,7 @@ dbus_bool_t        _dbus_transport_peek_is_authenticated  (DBusTransport
 dbus_bool_t        _dbus_transport_try_to_authenticate    (DBusTransport              *transport);
 dbus_bool_t        _dbus_transport_get_is_anonymous       (DBusTransport              *transport);
 dbus_bool_t        _dbus_transport_can_pass_unix_fd       (DBusTransport              *transport);
+dbus_bool_t        _dbus_transport_can_send_sync_call     (DBusTransport              *transport);
 
 const char*        _dbus_transport_get_address            (DBusTransport              *transport);
 const char*        _dbus_transport_get_server_id          (DBusTransport              *transport);
@@ -107,6 +108,8 @@ void               _dbus_transport_set_pending_fds_function (DBusTransport *tran
 
 dbus_bool_t        _dbus_transport_assure_protocol_version (DBusTransport             *transport,
                                                             DBusMessage              **message);
+DBusMessage*       _dbus_transport_send_sync_call          (DBusTransport             *transport,
+                                                            DBusMessage              **message);
 
 
 /* if DBUS_ENABLE_STATS */