clock: Add D-Bus interface skeleton
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 18 Apr 2011 18:33:19 +0000 (11:33 -0700)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 18 Apr 2011 18:33:19 +0000 (11:33 -0700)
include/dbus.h
src/clock.c

index 0d89456..58f4055 100644 (file)
@@ -39,6 +39,7 @@ extern "C" {
 #define CONNMAN_MANAGER_INTERFACE      CONNMAN_SERVICE ".Manager"
 #define CONNMAN_MANAGER_PATH           "/"
 
+#define CONNMAN_CLOCK_INTERFACE                CONNMAN_SERVICE ".Clock"
 #define CONNMAN_TASK_INTERFACE         CONNMAN_SERVICE ".Task"
 #define CONNMAN_SERVICE_INTERFACE      CONNMAN_SERVICE ".Service"
 #define CONNMAN_PROVIDER_INTERFACE     CONNMAN_SERVICE ".Provider"
index 3a59f31..99aff3c 100644 (file)
 #include <config.h>
 #endif
 
+#include <gdbus.h>
+
 #include "connman.h"
 
+static DBusMessage *get_properties(DBusConnection *conn,
+                                       DBusMessage *msg, void *data)
+{
+       DBusMessage *reply;
+       DBusMessageIter array, dict;
+
+       DBG("conn %p", conn);
+
+       reply = dbus_message_new_method_return(msg);
+       if (reply == NULL)
+               return NULL;
+
+       dbus_message_iter_init_append(reply, &array);
+
+       connman_dbus_dict_open(&array, &dict);
+
+       connman_dbus_dict_close(&array, &dict);
+
+       return reply;
+}
+
+static DBusMessage *set_property(DBusConnection *conn,
+                                       DBusMessage *msg, void *data)
+{
+       DBusMessageIter iter, value;
+       const char *name;
+       int type;
+
+       DBG("conn %p", conn);
+
+       if (dbus_message_iter_init(msg, &iter) == FALSE)
+               return __connman_error_invalid_arguments(msg);
+
+       dbus_message_iter_get_basic(&iter, &name);
+       dbus_message_iter_next(&iter);
+       dbus_message_iter_recurse(&iter, &value);
+
+       type = dbus_message_iter_get_arg_type(&value);
+
+       return __connman_error_invalid_property(msg);
+}
+
+static GDBusMethodTable clock_methods[] = {
+       { "GetProperties", "",   "a{sv}", get_properties },
+       { "SetProperty",   "sv", "",      set_property   },
+       { },
+};
+
+static GDBusSignalTable clock_signals[] = {
+       { "PropertyChanged", "sv" },
+       { },
+};
+
+static DBusConnection *connection = NULL;
+
 int __connman_clock_init(void)
 {
        DBG("");
 
+       connection = connman_dbus_get_connection();
+       if (connection == NULL)
+               return -1;
+
+       g_dbus_register_interface(connection, CONNMAN_MANAGER_PATH,
+                                               CONNMAN_CLOCK_INTERFACE,
+                                               clock_methods, clock_signals,
+                                               NULL, NULL, NULL);
+
        return 0;
 }
 
 void __connman_clock_cleanup(void)
 {
        DBG("");
+
+       if (connection == NULL)
+               return;
+
+       g_dbus_unregister_interface(connection, CONNMAN_MANAGER_PATH,
+                                               CONNMAN_CLOCK_INTERFACE);
+
+       dbus_connection_unref(connection);
 }