From 209c6c831ac8371fa36828ac6f433d5380bc476c Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Fri, 19 Jan 2007 16:03:11 +0000 Subject: Emulate service starting and stopping --- daemon/service.c | 60 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 16 deletions(-) (limited to 'daemon/service.c') diff --git a/daemon/service.c b/daemon/service.c index a03a57f7..830ca7dc 100644 --- a/daemon/service.c +++ b/daemon/service.c @@ -25,6 +25,9 @@ #include #endif +#include +#include + #include #include "dbus-helper.h" @@ -38,6 +41,8 @@ static DBusConnection *connection = NULL; +static char *test_conn_name = NULL; + DBusHandlerResult manager_list_services(DBusConnection *conn, DBusMessage *msg, void *data) { @@ -141,43 +146,66 @@ static DBusHandlerResult service_start(DBusConnection *conn, debug("Starting service"); - reply = dbus_message_new_method_return(msg); - if (!reply) - return DBUS_HANDLER_RESULT_NEED_MEMORY; - - dbus_message_append_args(reply, DBUS_TYPE_INVALID); + if (test_conn_name) { + reply = dbus_message_new_error(msg, ERROR_INTERFACE ".AlreadyRunning", + "Service is already running"); + if (!reply) + return DBUS_HANDLER_RESULT_NEED_MEMORY; + } else { + reply = dbus_message_new_method_return(msg); + if (!reply) + return DBUS_HANDLER_RESULT_NEED_MEMORY; + + test_conn_name = strdup("org.bluez.service"); + if (!test_conn_name) + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + + dbus_message_append_args(reply, DBUS_TYPE_INVALID); + } return dbus_connection_send_and_unref(conn, reply); } -static DBusHandlerResult service_is_running(DBusConnection *conn, +static DBusHandlerResult service_stop(DBusConnection *conn, DBusMessage *msg, void *data) { DBusMessage *reply; - dbus_bool_t running = FALSE; - reply = dbus_message_new_method_return(msg); - if (!reply) - return DBUS_HANDLER_RESULT_NEED_MEMORY; + debug("Stopping service"); - dbus_message_append_args(reply, DBUS_TYPE_BOOLEAN, &running, - DBUS_TYPE_INVALID); + if (test_conn_name) { + reply = dbus_message_new_method_return(msg); + if (!reply) + return DBUS_HANDLER_RESULT_NEED_MEMORY; + + free(test_conn_name); + test_conn_name = NULL; + + dbus_message_append_args(reply, DBUS_TYPE_INVALID); + } else { + reply = dbus_message_new_error(msg, ERROR_INTERFACE ".NotRunning", + "Service is not running"); + if (!reply) + return DBUS_HANDLER_RESULT_NEED_MEMORY; + } return dbus_connection_send_and_unref(conn, reply); } -static DBusHandlerResult service_stop(DBusConnection *conn, +static DBusHandlerResult service_is_running(DBusConnection *conn, DBusMessage *msg, void *data) { DBusMessage *reply; - - debug("Stopping service"); + dbus_bool_t running; reply = dbus_message_new_method_return(msg); if (!reply) return DBUS_HANDLER_RESULT_NEED_MEMORY; - dbus_message_append_args(reply, DBUS_TYPE_INVALID); + running = test_conn_name ? TRUE : FALSE; + + dbus_message_append_args(reply, DBUS_TYPE_BOOLEAN, &running, + DBUS_TYPE_INVALID); return dbus_connection_send_and_unref(conn, reply); } -- cgit