X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fwifi-config.c;h=97b9c6d4a55a66567be08ec8008148da0cda6cbe;hb=4d049dc6877bf31694283630ce72a2736108c5a1;hp=943a6cf1085e16a8843f11a2250d65a15d0914ac;hpb=3cbe1607ce779477648bf8dd173a099fa96699af;p=platform%2Fcore%2Fconnectivity%2Fnet-config.git diff --git a/src/wifi-config.c b/src/wifi-config.c index 943a6cf..97b9c6d 100755 --- a/src/wifi-config.c +++ b/src/wifi-config.c @@ -55,6 +55,8 @@ #define NET_DNS_ADDR_MAX 2 +#define MAX_WIFI_PROFILES 200 + struct wifi_eap_config { gchar *anonymous_identity; gchar *ca_cert; @@ -86,6 +88,7 @@ struct wifi_config { gboolean favorite; gboolean autoconnect; gchar *is_hidden; + gboolean is_created; gchar *proxy_address; struct wifi_eap_config *eap_config; wifi_ip_info_s *ip_info; @@ -192,7 +195,7 @@ static gboolean __get_mac_address(gchar **mac_address) return TRUE; } -static gboolean __get_group_name(const gchar *prefix, const gchar *config_id, gchar **group_name) +gboolean wifi_config_get_group_name(const gchar *prefix, const gchar *config_id, gchar **group_name) { gchar *mac_address = NULL; gchar *g_name = NULL; @@ -300,7 +303,6 @@ static gboolean __remove_configuration(const gchar *pathname) ERR("Cannot remove [%s]", pathname); return FALSE; } - return TRUE; } @@ -311,7 +313,7 @@ static gboolean _load_configuration(const gchar *config_id, struct wifi_config * gboolean hidden = FALSE; gboolean ret = FALSE; - ret = __get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); + ret = wifi_config_get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); if (ret != TRUE) { ERR("Fail to get_wifi_config_group_name"); return FALSE; @@ -336,6 +338,9 @@ static gboolean _load_configuration(const gchar *config_id, struct wifi_config * } DBG("security_type [%s]", config->security_type); + config->passphrase = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_PASSPHRASE, NULL); + DBG("passphrase []"); + config->proxy_address = g_key_file_get_string(keyfile, group_name, WIFI_CONFIG_PROXY_SERVER, NULL); if (config->proxy_address) DBG("proxy_address [%s]", config->proxy_address); @@ -449,14 +454,14 @@ static gboolean _load_configuration(const gchar *config_id, struct wifi_config * return TRUE; } -static gboolean _save_configuration(const gchar *config_id, GKeyFile *keyfile) +gboolean wifi_config_save_configuration(const gchar *config_id, GKeyFile *keyfile) { gchar *dir; gchar *path; gchar *group_name; gboolean ret = FALSE; - ret = __get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); + ret = wifi_config_get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); if (ret != TRUE) { ERR("Fail to get_wifi_config_group_name"); return FALSE; @@ -494,7 +499,7 @@ static gboolean _remove_configuration(const gchar *config_id) gchar *dir; gchar *group_name; - ret = __get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); + ret = wifi_config_get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); if (ret != TRUE) { ERR("Fail to get_wifi_config_group_name"); return FALSE; @@ -526,7 +531,7 @@ static gboolean _set_field(const gchar *config_id, const gchar *key, const gchar GKeyFile *keyfile; gchar *group_name; - ret = __get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); + ret = wifi_config_get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); if (ret != TRUE) { ERR("Fail to get_wifi_config_group_name"); return FALSE; @@ -570,7 +575,7 @@ static gboolean _set_field(const gchar *config_id, const gchar *key, const gchar ret = FALSE; } - _save_configuration(config_id, keyfile); + wifi_config_save_configuration(config_id, keyfile); g_key_file_free(keyfile); g_free(group_name); @@ -586,7 +591,7 @@ static gboolean _get_field(const gchar *config_id, const gchar *key, gchar **val gboolean hidden = FALSE; gboolean ret = FALSE; - ret = __get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); + ret = wifi_config_get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); if (ret != TRUE) { ERR("Fail to get_wifi_config_group_name"); return FALSE; @@ -1072,6 +1077,7 @@ gboolean handle_load_configuration(Wifi *wifi, GDBusMethodInvocation *context, b = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); g_variant_builder_add(b, "{sv}", WIFI_CONFIG_NAME, g_variant_new_string(conf->name)); g_variant_builder_add(b, "{sv}", WIFI_CONFIG_SECURITY_TYPE, g_variant_new_string(conf->security_type)); + g_variant_builder_add(b, "{sv}", WIFI_CONFIG_PASSPHRASE, g_variant_new_string(conf->passphrase)); g_variant_builder_add(b, "{sv}", WIFI_CONFIG_HIDDEN, g_variant_new_string(conf->is_hidden)); if (conf->proxy_address != NULL) @@ -1192,6 +1198,13 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, } else { conf->is_hidden = NULL; } + } else if (g_strcmp0(field, WIFI_CONFIG_CREATED) == 0) { + if (g_variant_is_of_type(value, G_VARIANT_TYPE_BOOLEAN)) { + conf->is_created = g_variant_get_boolean(value); + DBG("is_created [%d]", conf->is_created); + } else { + conf->is_created = FALSE; + } } else if (g_strcmp0(field, WIFI_CONFIG_IPV4_METHOD) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->ip_info->ip_type = g_strdup(g_variant_get_string(value, NULL)); @@ -1255,7 +1268,7 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, conf->favorite = TRUE; conf->autoconnect = TRUE; - ret = __get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); + ret = wifi_config_get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); if (ret != TRUE) { __free_wifi_configuration(conf); ERR("Fail to get_wifi_config_group_name"); @@ -1269,7 +1282,11 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, if (conf->passphrase != NULL) { gchar *enc_data = NULL; - enc_data = _netconfig_encrypt_passphrase(conf->passphrase); + + if (conf->is_created == true) + enc_data = _netconfig_encrypt_passphrase(conf->passphrase); + else + enc_data = g_strdup(conf->passphrase); if (!enc_data) { ERR("Failed to encrypt the passphrase"); @@ -1284,6 +1301,32 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, g_key_file_set_boolean(keyfile, group_name, WIFI_CONFIG_FAVORITE, conf->favorite); g_key_file_set_boolean(keyfile, group_name, WIFI_CONFIG_AUTOCONNECT, conf->autoconnect); +#if GLIB_CHECK_VERSION(2,62,0) + gint64 real_time = 0; + GDateTime *dt_real_time = NULL; + + real_time = g_get_real_time(); + dt_real_time = g_date_time_new_from_unix_utc(real_time); + if (dt_real_time) { + gchar *str = g_date_time_format_iso8601(dt_real_time); + g_date_time_unref(dt_real_time); + if (str) { + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_MODIFIED, str); + g_free(str); + } + } +#else /* GLIB_CHECK_VERSION(2,62,0) */ + GTimeVal modified; + g_get_current_time(&modified); + gchar *str = g_time_val_to_iso8601(&modified); + if (str) { + g_key_file_set_string(keyfile, group_name, + WIFI_CONFIG_MODIFIED, str); + g_free(str); + } +#endif /* GLIB_CHECK_VERSION(2,62,0) */ + /* Optional field */ if (conf->proxy_address != NULL) { g_key_file_set_string(keyfile, group_name, WIFI_CONFIG_PROXY_METHOD, "manual"); @@ -1335,10 +1378,25 @@ gboolean handle_save_configuration(Wifi *wifi, GDBusMethodInvocation *context, i += 1; } - ret = _save_configuration(config_id, keyfile); + ret = wifi_config_save_configuration(config_id, keyfile); if (ret == TRUE) { INFO("Success to save configuration [%s]", config_id); wifi_complete_save_configuration(wifi, context); + char *file; + if (get_files_count(CONNMAN_STORAGE) > MAX_WIFI_PROFILES) { + file = get_least_recently_profile(CONNMAN_STORAGE); + if (file) { + gchar *profileName = g_strdup_printf(CONNMAN_STORAGE "/%s", file); + INFO("least modified file: %s", profileName); + if (profileName) { + if (__remove_configuration(profileName) != TRUE) + DBG("Failed to remove profile: [%s]", profileName); + } else + ERR("Profile: [%s] does not exist", file); + + g_free(profileName); + } + } } else { INFO("Fail to save configuration [%s]", config_id); netconfig_error_dbus_method_return(context, NETCONFIG_ERROR_INTERNAL, "FailSaveConfiguration"); @@ -1494,6 +1552,13 @@ gboolean handle_save_eap_configuration(Wifi *wifi, GDBusMethodInvocation *contex } else { conf->is_hidden = NULL; } + } else if (g_strcmp0(field, WIFI_CONFIG_CREATED) == 0) { + if (g_variant_is_of_type(value, G_VARIANT_TYPE_BOOLEAN)) { + conf->is_created = g_variant_get_boolean(value); + DBG("is_created [%d]", conf->is_created); + } else { + conf->is_created = FALSE; + } } else if (g_strcmp0(field, WIFI_CONFIG_PROXYADDRESS) == 0) { if (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING)) { conf->proxy_address = g_strdup(g_variant_get_string(value, NULL)); @@ -1569,7 +1634,7 @@ gboolean handle_save_eap_configuration(Wifi *wifi, GDBusMethodInvocation *contex conf->favorite = TRUE; conf->autoconnect = TRUE; - ret = __get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); + ret = wifi_config_get_group_name(WIFI_CONFIG_PREFIX, config_id, &group_name); if (ret != TRUE) { __free_wifi_configuration(conf); ERR("Fail to get_wifi_config_group_name"); @@ -1582,7 +1647,11 @@ gboolean handle_save_eap_configuration(Wifi *wifi, GDBusMethodInvocation *contex if (conf->passphrase != NULL) { gchar *enc_data = NULL; - enc_data = _netconfig_encrypt_passphrase(conf->passphrase); + + if (conf->is_created == true) + enc_data = _netconfig_encrypt_passphrase(conf->passphrase); + else + enc_data = g_strdup(conf->passphrase); if (!enc_data) { ERR("Failed to encrypt the passphrase"); @@ -1645,7 +1714,7 @@ gboolean handle_save_eap_configuration(Wifi *wifi, GDBusMethodInvocation *contex g_key_file_set_string(keyfile, group_name, WIFI_CONFIG_EAP_SUBJECT_MATCH, conf->eap_config->subject_match); - ret = _save_configuration(config_id, keyfile); + ret = wifi_config_save_configuration(config_id, keyfile); if (ret == TRUE) { INFO("Success to save eap configuration [%s]", config_id); wifi_complete_save_eap_configuration(wifi, context);