summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrik Flykt <patrik.flykt@linux.intel.com>2012-04-20 16:07:31 +0300
committerMarcel Holtmann <marcel@holtmann.org>2012-04-20 15:11:40 +0200
commit43ef1744df09023ccc1ea850283ac0316b0797b3 (patch)
tree04f72b07d0e05a197041b7588565b0dff3236109
parent87aec23ff8b680fde1a26a5883aa6576f0a15a1a (diff)
downloadconnman-43ef1744df09023ccc1ea850283ac0316b0797b3.tar.gz
connman-43ef1744df09023ccc1ea850283ac0316b0797b3.tar.bz2
connman-43ef1744df09023ccc1ea850283ac0316b0797b3.zip
service: Implement service Timeservers property
Fixes BMC#25054.
-rw-r--r--src/connman.h2
-rw-r--r--src/service.c38
2 files changed, 40 insertions, 0 deletions
diff --git a/src/connman.h b/src/connman.h
index 62467916..317af708 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -632,6 +632,8 @@ int __connman_service_timeserver_append(struct connman_service *service,
const char *timeserver);
int __connman_service_timeserver_remove(struct connman_service *service,
const char *timeserver);
+void __connman_service_timeserver_changed(struct connman_service *service,
+ GSList *ts_list);
void __connman_service_set_pac(struct connman_service *service,
const char *pac);
connman_bool_t __connman_service_is_hidden(struct connman_service *service);
diff --git a/src/service.c b/src/service.c
index c9ec6b3c..5ff92b60 100644
--- a/src/service.c
+++ b/src/service.c
@@ -1475,6 +1475,21 @@ static void append_dnsconfig(DBusMessageIter *iter, void *user_data)
}
}
+static void append_ts(DBusMessageIter *iter, void *user_data)
+{
+ GSList *list = user_data;
+
+ while (list != NULL) {
+ char *timeserver = list->data;
+
+ if (timeserver != NULL)
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING,
+ &timeserver);
+
+ list = g_slist_next(list);
+ }
+}
+
static void append_tsconfig(DBusMessageIter *iter, void *user_data)
{
struct connman_service *service = user_data;
@@ -2040,6 +2055,7 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
struct connman_service *service)
{
const char *str;
+ GSList *list;
str = __connman_service_type2string(service->type);
if (str != NULL)
@@ -2119,6 +2135,17 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
connman_dbus_dict_append_array(dict, "Nameservers.Configuration",
DBUS_TYPE_STRING, append_dnsconfig, service);
+ if (service->state == CONNMAN_SERVICE_STATE_READY ||
+ service->state == CONNMAN_SERVICE_STATE_ONLINE)
+ list = __connman_timeserver_get_all(service);
+ else
+ list = NULL;
+
+ connman_dbus_dict_append_array(dict, "Timeservers",
+ DBUS_TYPE_STRING, append_ts, list);
+
+ g_slist_free_full(list, g_free);
+
connman_dbus_dict_append_array(dict, "Timeservers.Configuration",
DBUS_TYPE_STRING, append_tsconfig, service);
@@ -2453,6 +2480,17 @@ int __connman_service_timeserver_remove(struct connman_service *service,
return 0;
}
+void __connman_service_timeserver_changed(struct connman_service *service,
+ GSList *ts_list)
+{
+ if (service == NULL)
+ return;
+
+ connman_dbus_property_changed_array(service->path,
+ CONNMAN_SERVICE_INTERFACE, "Timeservers",
+ DBUS_TYPE_STRING, append_ts, ts_list);
+}
+
void __connman_service_set_pac(struct connman_service *service,
const char *pac)
{