summaryrefslogtreecommitdiff
path: root/src/clock.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2011-04-18 12:05:22 -0700
committerMarcel Holtmann <marcel@holtmann.org>2011-04-18 12:05:22 -0700
commit93f7c388459d0f73f0809ad198da3b827662b6e5 (patch)
treeb1f21061e48949b1730517d03d5d24dd13c2491e /src/clock.c
parentc59ffcc46e6c1d94ad6ef7609c088578f685393b (diff)
downloadconnman-93f7c388459d0f73f0809ad198da3b827662b6e5.tar.gz
connman-93f7c388459d0f73f0809ad198da3b827662b6e5.tar.bz2
connman-93f7c388459d0f73f0809ad198da3b827662b6e5.zip
clock: Add support for timeserver modifications
Diffstat (limited to 'src/clock.c')
-rw-r--r--src/clock.c62
1 files changed, 61 insertions, 1 deletions
diff --git a/src/clock.c b/src/clock.c
index 99aff3c4..2f0a0250 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -27,6 +27,21 @@
#include "connman.h"
+static char **timeservers_config = NULL;
+
+static void append_timeservers(DBusMessageIter *iter, void *user_data)
+{
+ int i;
+
+ if (timeservers_config == NULL)
+ return;
+
+ for (i = 0; timeservers_config[i] != NULL; i++) {
+ dbus_message_iter_append_basic(iter,
+ DBUS_TYPE_STRING, &timeservers_config[i]);
+ }
+}
+
static DBusMessage *get_properties(DBusConnection *conn,
DBusMessage *msg, void *data)
{
@@ -43,6 +58,9 @@ static DBusMessage *get_properties(DBusConnection *conn,
connman_dbus_dict_open(&array, &dict);
+ connman_dbus_dict_append_array(&dict, "Timeservers",
+ DBUS_TYPE_STRING, append_timeservers, NULL);
+
connman_dbus_dict_close(&array, &dict);
return reply;
@@ -66,7 +84,47 @@ static DBusMessage *set_property(DBusConnection *conn,
type = dbus_message_iter_get_arg_type(&value);
- return __connman_error_invalid_property(msg);
+ if (g_str_equal(name, "Timeservers") == TRUE) {
+ DBusMessageIter entry;
+ GString *str;
+
+ if (type != DBUS_TYPE_ARRAY)
+ return __connman_error_invalid_arguments(msg);
+
+ str = g_string_new(NULL);
+ if (str == NULL)
+ return __connman_error_invalid_arguments(msg);
+
+ dbus_message_iter_recurse(&value, &entry);
+
+ while (dbus_message_iter_get_arg_type(&entry) == DBUS_TYPE_STRING) {
+ const char *val;
+
+ dbus_message_iter_get_basic(&entry, &val);
+ dbus_message_iter_next(&entry);
+
+ if (str->len > 0)
+ g_string_append_printf(str, " %s", val);
+ else
+ g_string_append(str, val);
+ }
+
+ g_strfreev(timeservers_config);
+
+ if (str->len > 0)
+ timeservers_config = g_strsplit_set(str->str, " ", 0);
+ else
+ timeservers_config = NULL;
+
+ g_string_free(str, TRUE);
+
+ connman_dbus_property_changed_array(CONNMAN_MANAGER_PATH,
+ CONNMAN_CLOCK_INTERFACE, "Timeservers",
+ DBUS_TYPE_STRING, append_timeservers, NULL);
+ } else
+ return __connman_error_invalid_property(msg);
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
}
static GDBusMethodTable clock_methods[] = {
@@ -109,4 +167,6 @@ void __connman_clock_cleanup(void)
CONNMAN_CLOCK_INTERFACE);
dbus_connection_unref(connection);
+
+ g_strfreev(timeservers_config);
}