X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fclock.c;h=40729b2e4f2859be729322ba2e3b50d5d7b281e5;hb=a01a64f7444af4734621ba43af3f11216891e245;hp=1c16d40496c0558b1e8061b3abb66987df190903;hpb=bd086f6ab14d5f59d170dc51e0c41e4d97705027;p=platform%2Fupstream%2Fconnman.git diff --git a/src/clock.c b/src/clock.c old mode 100644 new mode 100755 index 1c16d40..40729b2 --- a/src/clock.c +++ b/src/clock.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007-2012 Intel Corporation. All rights reserved. + * Copyright (C) 2007-2013 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -39,6 +39,9 @@ static enum time_updates time_updates_config = TIME_UPDATES_AUTO; static enum timezone_updates timezone_updates_config = TIMEZONE_UPDATES_AUTO; static char *timezone_config = NULL; +#if defined TIZEN_EXT +static bool time_updated = false; +#endif static const char *time_updates2string(enum time_updates value) { @@ -88,6 +91,65 @@ static enum timezone_updates string2timezone_updates(const char *value) return TIMEZONE_UPDATES_UNKNOWN; } +static void clock_properties_load(void) +{ + GKeyFile *keyfile; + char *str; + enum time_updates time_value; + enum timezone_updates timezone_value; + + keyfile = __connman_storage_load_global(); + if (!keyfile) + return; + + str = g_key_file_get_string(keyfile, "global", "TimeUpdates", NULL); + + time_value = string2time_updates(str); + if (time_value != TIME_UPDATES_UNKNOWN) + time_updates_config = time_value; + + g_free(str); + + str = g_key_file_get_string(keyfile, "global", "TimezoneUpdates", + NULL); + + timezone_value = string2timezone_updates(str); + if (timezone_value != TIMEZONE_UPDATES_UNKNOWN) + timezone_updates_config = timezone_value; + + g_free(str); + + g_key_file_free(keyfile); +} + +static void clock_properties_save(void) +{ + GKeyFile *keyfile; + const char *str; + + keyfile = __connman_storage_load_global(); + if (!keyfile) + keyfile = g_key_file_new(); + + str = time_updates2string(time_updates_config); + if (str) + g_key_file_set_string(keyfile, "global", "TimeUpdates", str); + else + g_key_file_remove_key(keyfile, "global", "TimeUpdates", NULL); + + str = timezone_updates2string(timezone_updates_config); + if (str) + g_key_file_set_string(keyfile, "global", "TimezoneUpdates", + str); + else + g_key_file_remove_key(keyfile, "global", "TimezoneUpdates", + NULL); + + __connman_storage_save_global(keyfile); + + g_key_file_free(keyfile); +} + enum time_updates __connman_clock_timeupdates(void) { return time_updates_config; @@ -98,10 +160,10 @@ static void append_timeservers(DBusMessageIter *iter, void *user_data) int i; char **timeservers = __connman_timeserver_system_get(); - if (timeservers == NULL) + if (!timeservers) return; - for (i = 0; timeservers[i] != NULL; i++) { + for (i = 0; timeservers[i]; i++) { dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, ×ervers[i]); } @@ -116,17 +178,26 @@ static DBusMessage *get_properties(DBusConnection *conn, DBusMessageIter array, dict; struct timeval tv; const char *str; +#if defined TIZEN_EXT + dbus_bool_t val = time_updated; +#endif DBG("conn %p", conn); reply = dbus_message_new_method_return(msg); - if (reply == NULL) + if (!reply) return NULL; dbus_message_iter_init_append(reply, &array); connman_dbus_dict_open(&array, &dict); +#if defined TIZEN_EXT + connman_dbus_dict_append_basic(&dict, "TimeUpdated", + DBUS_TYPE_BOOLEAN, + &val); +#endif + if (gettimeofday(&tv, NULL) == 0) { dbus_uint64_t val = tv.tv_sec; @@ -135,16 +206,16 @@ static DBusMessage *get_properties(DBusConnection *conn, } str = time_updates2string(time_updates_config); - if (str != NULL) + if (str) connman_dbus_dict_append_basic(&dict, "TimeUpdates", DBUS_TYPE_STRING, &str); - if (timezone_config != NULL) + if (timezone_config) connman_dbus_dict_append_basic(&dict, "Timezone", DBUS_TYPE_STRING, &timezone_config); str = timezone_updates2string(timezone_updates_config); - if (str != NULL) + if (str) connman_dbus_dict_append_basic(&dict, "TimezoneUpdates", DBUS_TYPE_STRING, &str); @@ -165,7 +236,7 @@ static DBusMessage *set_property(DBusConnection *conn, DBG("conn %p", conn); - if (dbus_message_iter_init(msg, &iter) == FALSE) + if (!dbus_message_iter_init(msg, &iter)) return __connman_error_invalid_arguments(msg); if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) @@ -181,7 +252,12 @@ static DBusMessage *set_property(DBusConnection *conn, type = dbus_message_iter_get_arg_type(&value); - if (g_str_equal(name, "Time") == TRUE) { + if (g_str_equal(name, "Time")) { +#if defined TIZEN_EXT + /* Tizen updates time (ntp) by system service */ + + return __connman_error_permission_denied(msg); +#else struct timeval tv; dbus_uint64_t newval; @@ -202,7 +278,8 @@ static DBusMessage *set_property(DBusConnection *conn, connman_dbus_property_changed_basic(CONNMAN_MANAGER_PATH, CONNMAN_CLOCK_INTERFACE, "Time", DBUS_TYPE_UINT64, &newval); - } else if (g_str_equal(name, "TimeUpdates") == TRUE) { +#endif + } else if (g_str_equal(name, "TimeUpdates")) { const char *strval; enum time_updates newval; @@ -220,10 +297,11 @@ static DBusMessage *set_property(DBusConnection *conn, time_updates_config = newval; + clock_properties_save(); connman_dbus_property_changed_basic(CONNMAN_MANAGER_PATH, CONNMAN_CLOCK_INTERFACE, "TimeUpdates", DBUS_TYPE_STRING, &strval); - } else if (g_str_equal(name, "Timezone") == TRUE) { + } else if (g_str_equal(name, "Timezone")) { const char *strval; if (type != DBUS_TYPE_STRING) @@ -235,8 +313,8 @@ static DBusMessage *set_property(DBusConnection *conn, dbus_message_iter_get_basic(&value, &strval); if (__connman_timezone_change(strval) < 0) - return __connman_error_invalid_arguments(msg); - } else if (g_str_equal(name, "TimezoneUpdates") == TRUE) { + return __connman_error_invalid_arguments(msg); + } else if (g_str_equal(name, "TimezoneUpdates")) { const char *strval; enum timezone_updates newval; @@ -254,10 +332,11 @@ static DBusMessage *set_property(DBusConnection *conn, timezone_updates_config = newval; + clock_properties_save(); connman_dbus_property_changed_basic(CONNMAN_MANAGER_PATH, CONNMAN_CLOCK_INTERFACE, "TimezoneUpdates", DBUS_TYPE_STRING, &strval); - } else if (g_str_equal(name, "Timeservers") == TRUE) { + } else if (g_str_equal(name, "Timeservers")) { DBusMessageIter entry; char **str = NULL; GSList *list = NULL; @@ -283,10 +362,10 @@ static DBusMessage *set_property(DBusConnection *conn, dbus_message_iter_next(&entry); } - if (list != NULL) { + if (list) { str = g_new0(char *, count+1); - while (list != NULL) { + while (list) { count--; str[count] = list->data; list = g_slist_delete_link(list, list); @@ -295,7 +374,7 @@ static DBusMessage *set_property(DBusConnection *conn, __connman_timeserver_system_set(str); - if (str != NULL) + if (str) g_strfreev(str); connman_dbus_property_changed_array(CONNMAN_MANAGER_PATH, @@ -325,6 +404,13 @@ static const GDBusSignalTable clock_signals[] = { static DBusConnection *connection = NULL; +#if defined TIZEN_EXT +void __connman_clock_set_time_updated(bool updated) +{ + time_updated = updated; +} +#endif + void __connman_clock_update_timezone(void) { DBG(""); @@ -332,7 +418,7 @@ void __connman_clock_update_timezone(void) g_free(timezone_config); timezone_config = __connman_timezone_lookup(); - if (timezone_config == NULL) + if (!timezone_config) return; connman_dbus_property_changed_basic(CONNMAN_MANAGER_PATH, @@ -345,7 +431,7 @@ int __connman_clock_init(void) DBG(""); connection = connman_dbus_get_connection(); - if (connection == NULL) + if (!connection) return -1; __connman_timezone_init(); @@ -357,6 +443,7 @@ int __connman_clock_init(void) clock_methods, clock_signals, NULL, NULL, NULL); + clock_properties_load(); return 0; } @@ -364,7 +451,7 @@ void __connman_clock_cleanup(void) { DBG(""); - if (connection == NULL) + if (!connection) return; g_dbus_unregister_interface(connection, CONNMAN_MANAGER_PATH,