diff options
author | Rodrigo Moya <rodrigo.moya@collabora.co.uk> | 2012-05-29 11:51:20 +0200 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2012-05-29 11:51:20 +0200 |
commit | 55ae67ea43e517043868763aaf4fe81a493eecd1 (patch) | |
tree | c77a79920dbd7a9124804516594114b7ad3d0a70 | |
parent | 149f9e3a3989d64868c05fc4f21719df9ee4da53 (diff) | |
download | dbus-55ae67ea43e517043868763aaf4fe81a493eecd1.tar.gz |
Add missing code from last (broken) commit
-rw-r--r-- | bus/driver-afbus.c | 67 |
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; +} |