#define NTP_SERVER "pool.ntp.org"
#define CONNMAN_GLOBAL_SETTING "/var/lib/connman/settings"
+#define TIME_UPDATE_CONFIG_AUTO "auto"
+#define TIME_UPDATE_CONFIG_MANUAL "manual"
-static void __netconfig_clock_clear_timeserver(void)
-{
- GKeyFile *keyfile = NULL;
-
- keyfile = netconfig_keyfile_load(CONNMAN_GLOBAL_SETTING);
-
- if (keyfile == NULL)
- return;
+static Clock *clock_object = NULL;
- g_key_file_remove_key(keyfile, "global", "Timeservers", NULL);
-
- netconfig_keyfile_save(keyfile, CONNMAN_GLOBAL_SETTING);
- g_key_file_free(keyfile);
-}
-
-static gboolean __netconfig_clock_clear_timeserver_timer(gpointer data)
+Clock *get_clock_object(void)
{
- INFO("Clear NTP server");
-
- __netconfig_clock_clear_timeserver();
-
- return FALSE;
+ return clock_object;
}
static void __netconfig_clock_set_timeserver(const char *server)
return;
}
-static void __netconfig_set_timeserver(void)
+static void __netconfig_clock_set_time_update_policy(const char *time_update_method)
{
- int nitz_updated = 0;
-
- netconfig_vconf_get_int(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT, &nitz_updated);
-
- if (nitz_updated != 0)
- return;
-
- __netconfig_clock_set_timeserver((const char *)NTP_SERVER);
-}
+ GVariant* reply = NULL;
-static void __network_changed_cb(keynode_t *node, void *user_data)
-{
- int status = VCONFKEY_NETWORK_OFF;
- gboolean automatic_time_update = 0;
+ reply = netconfig_invoke_dbus_method(CONNMAN_SERVICE,
+ CONNMAN_MANAGER_PATH, CONNMAN_CLOCK_INTERFACE,
+ "SetProperty", g_variant_new("(sv)", "TimeUpdates",
+ g_variant_new_string(time_update_method)));
- if (node != NULL)
- status = vconf_keynode_get_int(node);
+ if (reply == NULL)
+ ERR("Failed to set Time Update Policy");
else
- netconfig_vconf_get_int(VCONFKEY_NETWORK_STATUS, &status);
-
- if (status == VCONFKEY_NETWORK_OFF)
- return;
-
- netconfig_vconf_get_bool(
- VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL,
- &automatic_time_update);
-
- if (automatic_time_update == FALSE) {
- INFO("Automatic time update is not set (%d)", automatic_time_update);
- return;
- }
+ g_variant_unref(reply);
- __netconfig_set_timeserver();
+ return;
}
static void __automatic_time_update_changed_cb(keynode_t *node, void *user_data)
if (automatic_time_update == FALSE) {
INFO("Automatic time update is changed to 'FALSE'");
- __netconfig_clock_unset_timeserver();
+ __netconfig_clock_set_time_update_policy((const char *)TIME_UPDATE_CONFIG_MANUAL);
return;
}
return;
}
- __netconfig_set_timeserver();
+ __netconfig_clock_set_time_update_policy((const char *)TIME_UPDATE_CONFIG_AUTO);
}
static void __nitz_event_cb(keynode_t *node, void *user_data)
if (nitz_updated != 0) {
INFO("Time is updated by NITZ");
- __netconfig_clock_unset_timeserver();
+ __netconfig_clock_set_time_update_policy((const char *)TIME_UPDATE_CONFIG_MANUAL);
return;
}
}
__automatic_time_update_changed_cb, NULL);
vconf_notify_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT,
__nitz_event_cb, NULL);
- vconf_notify_key_changed(VCONFKEY_NETWORK_STATUS,
- __network_changed_cb, NULL);
netconfig_vconf_get_bool(VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL, &automatic_time_update);
if (automatic_time_update == FALSE)
- __netconfig_clock_clear_timeserver_timer(NULL);
+ __netconfig_clock_set_time_update_policy((const char *)TIME_UPDATE_CONFIG_MANUAL);
+ else
+ __netconfig_clock_set_time_update_policy((const char *)TIME_UPDATE_CONFIG_AUTO);
}
void netconfig_clock_deinit(void)
__automatic_time_update_changed_cb);
vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NITZ_EVENT_GMT,
__nitz_event_cb);
- vconf_ignore_key_changed(VCONFKEY_NETWORK_STATUS,
- __network_changed_cb);
+}
+
+gboolean handle_set_ntp_server(Clock *object, GDBusMethodInvocation *invocation,
+ const gchar *server)
+{
+ if(server == NULL) {
+ netconfig_error_dbus_method_return(invocation,
+ NETCONFIG_ERROR_INTERNAL, "SetNtpServer Failed");
+ return TRUE;
+ }
+
+ __netconfig_clock_set_timeserver(server);
+
+ DBG("NTP Server:%s set successfully",server);
+
+ clock_complete_set_ntp_server(object, invocation);
+
+ return TRUE;
+}
+
+gboolean handle_unset_ntp_server(Clock *object, GDBusMethodInvocation *invocation)
+{
+ __netconfig_clock_unset_timeserver();
+
+ DBG("NTP Server unset successfully");
+
+ clock_complete_unset_ntp_server(object, invocation);
+
+ return TRUE;
+}
+
+/*****************************
+ * Initializations Functions *
+ ****************************/
+void clock_object_create_and_init(void)
+{
+ DBG("Create clock object.");
+ GDBusInterfaceSkeleton *interface_clock = NULL;
+ GDBusConnection *connection = NULL;
+ GDBusObjectManagerServer *server = netdbus_get_clock_manager();
+ if (server == NULL)
+ return;
+
+ connection = netdbus_get_connection();
+ g_dbus_object_manager_server_set_connection(server, connection);
+
+ /* Interface */
+ clock_object = clock_skeleton_new();
+ interface_clock = G_DBUS_INTERFACE_SKELETON(clock_object);
+
+ /* Set NTP Server */
+ g_signal_connect(clock_object, "handle-set-ntp-server",
+ G_CALLBACK(handle_set_ntp_server), NULL);
+
+ /* Unset NTP Server */
+ g_signal_connect(clock_object, "handle-unset-ntp-server",
+ G_CALLBACK(handle_unset_ntp_server), NULL);
+
+ if (!g_dbus_interface_skeleton_export(interface_clock, connection,
+ NETCONFIG_CLOCK_PATH, NULL)) {
+ ERR("Export NETCONFIG_CLOCK_PATH for clock failed");
+ }
+
+ return;
+}
+
+void clock_object_deinit(void)
+{
+ DBG("Deinit clock object.");
+
+ g_object_unref(clock_object);
}