summaryrefslogtreecommitdiffstats
path: root/bus/driver.c
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@codefactory.se>2003-02-16 10:00:37 +0000
committerAnders Carlsson <andersca@codefactory.se>2003-02-16 10:00:37 +0000
commitf116b1282f8482dff6dc797f64270d95f79b53a3 (patch)
treed56ba5a2f6cb8797b54b079d5b754abac5cd14bc /bus/driver.c
parentac5183eafc6bd77bec094c3ba103701a4540f08d (diff)
2003-02-16 Anders Carlsson <andersca@codefactory.se>
* bus/activation.c: (load_directory), (bus_activation_init), (bus_activation_activate_service): * bus/activation.h: * bus/driver.c: (bus_driver_handle_activate_service), (bus_driver_handle_message): More work on the activation handling. * dbus/dbus-errors.h: Add some error messages * dbus/dbus-message.c: (dbus_message_new_error_reply): * dbus/dbus-message.h: New function that creates an error message. * dbus/dbus-protocol.h: Add ACTIVATE_SERVER message. * dbus/dbus-server-unix.c: (unix_handle_watch), (_dbus_server_new_for_domain_socket): Call _dbus_fd_set_close_on_exec. * dbus/dbus-sysdeps.c: (make_pipe), (do_exec), (_dbus_spawn_async), (_dbus_disable_sigpipe), (_dbus_fd_set_close_on_exec): * dbus/dbus-sysdeps.h: Add _dbus_fd_set_close_on exec function. Also add function that checks that all open fds are set to close-on-exec and warns otherwise. * dbus/dbus-transport-unix.c: (_dbus_transport_new_for_domain_socket): Call _dbus_fd_set_close_on_exec.
Diffstat (limited to 'bus/driver.c')
-rw-r--r--bus/driver.c41
1 files changed, 38 insertions, 3 deletions
diff --git a/bus/driver.c b/bus/driver.c
index 9983f573..80478e45 100644
--- a/bus/driver.c
+++ b/bus/driver.c
@@ -21,6 +21,7 @@
*
*/
+#include "activation.h"
#include "connection.h"
#include "driver.h"
#include "dispatch.h"
@@ -169,7 +170,7 @@ bus_driver_handle_hello (DBusConnection *connection,
{
DBusString unique_name;
BusService *service;
-
+
BUS_HANDLE_OOM (_dbus_string_init (&unique_name, _DBUS_INT_MAX));
BUS_HANDLE_OOM (create_unique_client_name (&unique_name));
@@ -208,7 +209,7 @@ bus_driver_send_welcome_message (DBusConnection *connection,
NULL));
BUS_HANDLE_OOM (dbus_connection_send_message (connection, welcome, NULL, NULL));
-
+
dbus_message_unref (welcome);
}
@@ -363,6 +364,39 @@ bus_driver_handle_service_exists (DBusConnection *connection,
dbus_free (name);
}
+static void
+bus_driver_handle_activate_service (DBusConnection *connection,
+ DBusMessage *message)
+{
+ DBusResultCode result;
+ dbus_uint32_t flags;
+ char *name;
+ DBusError error;
+
+ BUS_HANDLE_OOM ((result = dbus_message_get_args (message,
+ DBUS_TYPE_STRING, &name,
+ DBUS_TYPE_UINT32, &flags,
+ 0)) != DBUS_RESULT_NO_MEMORY);
+ if (result != DBUS_RESULT_SUCCESS)
+ {
+ dbus_free (name);
+ dbus_connection_disconnect (connection);
+ return;
+ }
+
+ if (!bus_activation_activate_service (name, &error))
+ {
+ DBusMessage *error_reply;
+
+ BUS_HANDLE_OOM (error_reply = dbus_message_new_error_reply (message,
+ error.name, error.message));
+ dbus_error_free (&error);
+
+ BUS_HANDLE_OOM (dbus_connection_send_message (connection, error_reply, NULL, NULL));
+ dbus_message_unref (error_reply);
+ }
+}
+
void
bus_driver_handle_message (DBusConnection *connection,
DBusMessage *message)
@@ -391,7 +425,8 @@ bus_driver_handle_message (DBusConnection *connection,
bus_driver_handle_acquire_service (connection, message);
else if (strcmp (name, DBUS_MESSAGE_SERVICE_EXISTS) == 0)
bus_driver_handle_service_exists (connection, message);
-
+ else if (strcmp (name, DBUS_MESSAGE_ACTIVATE_SERVICE) == 0)
+ bus_driver_handle_activate_service (connection, message);
}
void