summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlok Barsode <alok.barsode@linux.intel.com>2012-04-05 13:20:15 +0300
committerPatrik Flykt <patrik.flykt@linux.intel.com>2012-04-05 18:55:16 +0300
commit85d7f68601947d147c1eccff2d06cab74039f9f6 (patch)
tree26542dfd5f62f1d8a2dc966c6cbbf43b28cb23ec
parent5bb3888705ad0fd2f545f4b7fe1dad13c9d7f009 (diff)
downloadconnman-85d7f68601947d147c1eccff2d06cab74039f9f6.tar.gz
connman-85d7f68601947d147c1eccff2d06cab74039f9f6.tar.bz2
connman-85d7f68601947d147c1eccff2d06cab74039f9f6.zip
timeserver: Trigger ntp on default changed notifier
Trigger NTP sync on default service going to READY/ONLINE state instead of triggering NTP sync on ONLINE state only. This makes sense for local ntp servers even if the wispr check fails.
-rw-r--r--src/service.c5
-rw-r--r--src/timeserver.c32
2 files changed, 30 insertions, 7 deletions
diff --git a/src/service.c b/src/service.c
index 6f0e0fac..54d29a66 100644
--- a/src/service.c
+++ b/src/service.c
@@ -4163,9 +4163,6 @@ static int service_indicate_state(struct connman_service *service)
}
}
- if (new_state == CONNMAN_SERVICE_STATE_ONLINE)
- __connman_timeserver_sync(service);
-
if (new_state == CONNMAN_SERVICE_STATE_IDLE) {
connman_bool_t reconnect;
@@ -4235,8 +4232,6 @@ static int service_indicate_state(struct connman_service *service)
dns_changed(service);
domain_changed(service);
- __connman_timeserver_stop();
-
__connman_notifier_disconnect(service->type);
/*
diff --git a/src/timeserver.c b/src/timeserver.c
index 08dd81b5..8622431e 100644
--- a/src/timeserver.c
+++ b/src/timeserver.c
@@ -155,11 +155,20 @@ void __connman_timeserver_sync_next()
NULL);
}
-int __connman_timeserver_sync(struct connman_service *service)
+int __connman_timeserver_sync(struct connman_service *default_service)
{
- char **nameservers = NULL;
+ struct connman_service *service;
+ char **nameservers;
int i;
+ if (default_service != NULL)
+ service = default_service;
+ else
+ service = __connman_service_get_default();
+
+ if (service == NULL)
+ return -EINVAL;
+
DBG("service %p", service);
i = __connman_service_get_index(service);
@@ -242,14 +251,33 @@ char **__connman_timeserver_system_get()
return servers;
}
+static void default_changed(struct connman_service *default_service)
+{
+ DBG("");
+
+ if (default_service != NULL)
+ __connman_timeserver_sync(default_service);
+ else
+ __connman_timeserver_stop();
+}
+
+static struct connman_notifier timeserver_notifier = {
+ .name = "timeserver",
+ .default_changed = default_changed,
+};
+
int __connman_timeserver_init(void)
{
DBG("");
+ connman_notifier_register(&timeserver_notifier);
+
return 0;
}
void __connman_timeserver_cleanup(void)
{
DBG("");
+
+ connman_notifier_unregister(&timeserver_notifier);
}