summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Moya <rodrigo.moya@collabora.co.uk>2012-05-29 11:51:20 +0200
committerRodrigo Moya <rodrigo@gnome-db.org>2012-05-29 11:51:20 +0200
commit55ae67ea43e517043868763aaf4fe81a493eecd1 (patch)
treec77a79920dbd7a9124804516594114b7ad3d0a70
parent149f9e3a3989d64868c05fc4f21719df9ee4da53 (diff)
downloaddbus-55ae67ea43e517043868763aaf4fe81a493eecd1.tar.gz
Add missing code from last (broken) commit
-rw-r--r--bus/driver-afbus.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/bus/driver-afbus.c b/bus/driver-afbus.c
index 9cf0d1e6..9fe2865a 100644
--- a/bus/driver-afbus.c
+++ b/bus/driver-afbus.c
@@ -209,3 +209,70 @@ bus_driver_afbus_append_unique_name (DBusConnection *connection,
return TRUE;
}
+
+dbus_bool_t
+bus_driver_afbus_emit_forwarded (DBusConnection *connection,
+ DBusConnection *addressed_recipient,
+ const char *service_name)
+{
+ struct sockaddr_bus address;
+ long len = sizeof (address);
+ DBusMessage *message;
+ BusContext *context;
+ BusTransaction *transaction = NULL;
+ dbus_bool_t result = FALSE;
+
+ memset (&address, 0, sizeof (address));
+ if (!dbus_connection_get_peer_address (addressed_recipient, &address, &len))
+ {
+ /* Don't return an error if it is not a AF_BUS socket */
+ return TRUE;
+ }
+
+ /* Prepare the message to be sent */
+ message = dbus_message_new_signal (DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS,
+ "AF_BUS.Forwarded");
+ if (message == NULL)
+ {
+ _dbus_verbose ("Could not allocate AF_BUS.Forwarded signal message\n");
+ return FALSE;
+ }
+
+ if (!dbus_message_set_sender (message, DBUS_SERVICE_DBUS))
+ {
+ _dbus_verbose ("Could not set sender for AF_BUS.Forwarded signal message\n");
+ goto out;
+ }
+
+ if (!dbus_message_append_args (message,
+ DBUS_TYPE_STRING, &service_name,
+ DBUS_TYPE_UINT64, &address.sbus_addr.s_addr,
+ DBUS_TYPE_INVALID))
+ {
+ _dbus_verbose ("Could not append arguments for AF_BUS.Forwarded signal message\n");
+ goto out;
+ }
+
+ /* Prepare transaction */
+ context = bus_connection_get_context (connection);
+ transaction = bus_transaction_new (context);
+ if (transaction == NULL)
+ {
+ _dbus_verbose ("Could not create transaction\n");
+ goto out;
+ }
+
+ if (bus_transaction_send (transaction, addressed_recipient, message))
+ result = TRUE;
+ else
+ _dbus_verbose ("Could not send AF_BUS.Forwarded signal message\n");
+
+ out:
+ if (transaction != NULL)
+ bus_transaction_execute_and_free (transaction);
+
+ dbus_message_unref (message);
+
+ return result;
+}