/* activation.c Activation of services
*
* Copyright (C) 2003 CodeFactory AB
+ * Copyright (C) 2003 Red Hat, Inc.
*
* Licensed under the Academic Free License version 1.2
*
char *name, *exec;
BusActivationEntry *entry;
+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+
name = NULL;
exec = NULL;
entry = NULL;
DBusString full_path;
BusDesktopFile *desktop_file;
DBusError tmp_error;
+
+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
_dbus_string_init_const (&dir, directory);
iter = NULL;
desktop_file = NULL;
- if (!_dbus_string_init (&filename, _DBUS_INT_MAX))
+ if (!_dbus_string_init (&filename))
{
BUS_SET_OOM (error);
return FALSE;
}
- if (!_dbus_string_init (&full_path, _DBUS_INT_MAX))
+ if (!_dbus_string_init (&full_path))
{
BUS_SET_OOM (error);
_dbus_string_free (&filename);
if (!_dbus_string_ends_with_c_str (&filename, ".service"))
{
- const char *filename_c;
- _dbus_string_get_const_data (&filename, &filename_c);
_dbus_verbose ("Skipping non-.service file %s\n",
- filename_c);
+ _dbus_string_get_const_data (&filename));
continue;
}
if (desktop_file == NULL)
{
- const char *full_path_c;
-
- _dbus_string_get_const_data (&full_path, &full_path_c);
-
- _dbus_verbose ("Could not load %s: %s\n", full_path_c,
+ _dbus_verbose ("Could not load %s: %s\n",
+ _dbus_string_get_const_data (&full_path),
tmp_error.message);
if (dbus_error_has_name (&tmp_error, DBUS_ERROR_NO_MEMORY))
if (!add_desktop_file_entry (activation, desktop_file, &tmp_error))
{
- const char *full_path_c;
-
bus_desktop_file_free (desktop_file);
desktop_file = NULL;
-
- _dbus_string_get_const_data (&full_path, &full_path_c);
_dbus_verbose ("Could not add %s to activation entry list: %s\n",
- full_path_c, tmp_error.message);
+ _dbus_string_get_const_data (&full_path), tmp_error.message);
if (dbus_error_has_name (&tmp_error, DBUS_ERROR_NO_MEMORY))
{
}
BusActivation*
-bus_activation_new (BusContext *context,
- const char *address,
- const char **directories,
- DBusError *error)
+bus_activation_new (BusContext *context,
+ const DBusString *address,
+ DBusList **directories,
+ DBusError *error)
{
- int i;
BusActivation *activation;
-
+ DBusList *link;
+
+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+
activation = dbus_new0 (BusActivation, 1);
if (activation == NULL)
{
activation->refcount = 1;
activation->context = context;
- /* FIXME: We should split up the server addresses. */
- activation->server_address = _dbus_strdup (address);
- if (activation->server_address == NULL)
+ if (!_dbus_string_copy_data (address, &activation->server_address))
{
BUS_SET_OOM (error);
goto failed;
}
/* Load service files */
- i = 0;
- while (directories[i] != NULL)
+ link = _dbus_list_get_first_link (directories);
+ while (link != NULL)
{
- if (!load_directory (activation, directories[i], error))
+ if (!load_directory (activation, link->data, error))
goto failed;
- ++i;
+ link = _dbus_list_get_next_link (directories, link);
}
return activation;
}
dbus_bool_t
-bus_activation_service_created (BusActivation *activation,
- const char *service_name,
- DBusError *error)
+bus_activation_service_created (BusActivation *activation,
+ const char *service_name,
+ BusTransaction *transaction,
+ DBusError *error)
{
BusPendingActivation *pending_activation;
DBusMessage *message;
DBusList *link;
+
+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
/* Check if it's a pending activation */
pending_activation = _dbus_hash_table_lookup_string (activation->pending_activations, service_name);
goto error;
}
- if (!dbus_message_append_args (message,
+ if (!dbus_message_set_sender (message, DBUS_SERVICE_DBUS) ||
+ !dbus_message_append_args (message,
DBUS_TYPE_UINT32, DBUS_ACTIVATION_REPLY_ACTIVATED,
0))
{
BUS_SET_OOM (error);
goto error;
}
-
- if (!dbus_connection_send (entry->connection, message, NULL))
+
+ if (!bus_transaction_send_message (transaction, entry->connection, message))
{
dbus_message_unref (message);
BUS_SET_OOM (error);
dbus_bool_t
bus_activation_activate_service (BusActivation *activation,
DBusConnection *connection,
+ BusTransaction *transaction,
DBusMessage *activation_message,
const char *service_name,
DBusError *error)
DBusString service_str;
char *argv[2];
dbus_bool_t retval;
+
+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
entry = _dbus_hash_table_lookup_string (activation->entries, service_name);
return FALSE;
}
- if (!dbus_message_append_args (message,
+ if (!dbus_message_set_sender (message, DBUS_SERVICE_DBUS) ||
+ !dbus_message_append_args (message,
DBUS_TYPE_UINT32, DBUS_ACTIVATION_REPLY_ALREADY_ACTIVE,
0))
{
return FALSE;
}
- retval = dbus_connection_send (connection, message, NULL);
+ retval = bus_transaction_send_message (transaction, connection, message);
dbus_message_unref (message);
if (!retval)
BUS_SET_OOM (error);
pending_activation = _dbus_hash_table_lookup_string (activation->pending_activations, service_name);
if (pending_activation)
{
- if (!_dbus_list_append (&pending_activation->entries, entry))
+ if (!_dbus_list_append (&pending_activation->entries, pending_activation_entry))
{
BUS_SET_OOM (error);
bus_pending_activation_entry_free (pending_activation_entry);
return FALSE;
}
- if (!_dbus_list_append (&pending_activation->entries, entry))
+ if (!_dbus_list_append (&pending_activation->entries, pending_activation_entry))
{
BUS_SET_OOM (error);
bus_pending_activation_free (pending_activation);