diff options
author | Niraj Kumar Goit <niraj.g@samsung.com> | 2019-08-26 17:30:39 +0530 |
---|---|---|
committer | Niraj Kumar Goit <niraj.g@samsung.com> | 2019-08-26 17:30:39 +0530 |
commit | 638c47033fb5d23c2ee62eae4f4f49fcb03c93f0 (patch) | |
tree | b9060fd71f44afd5aaf737c7fe6e90020585d5ea | |
parent | 6db18e809df41e6979741f55f88e745e14ad8fb5 (diff) | |
download | connman-638c47033fb5d23c2ee62eae4f4f49fcb03c93f0.tar.gz connman-638c47033fb5d23c2ee62eae4f4f49fcb03c93f0.tar.bz2 connman-638c47033fb5d23c2ee62eae4f4f49fcb03c93f0.zip |
Sort hidden profiles based on modified time.
When there are multiple hidden profiles stored in connman, sort
hidden profiles based on modified time (latest on top) and then
send scan request.
Change-Id: Ib27a31db94b4fafe9521414ab19702f08f5df783
Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
-rw-r--r-- | plugins/wifi.c | 112 |
1 files changed, 83 insertions, 29 deletions
diff --git a/plugins/wifi.c b/plugins/wifi.c index f39cf91f..f842b341 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -1529,6 +1529,35 @@ static void check_p2p_technology(void) } } +struct last_connected { + GTimeVal modified; + gchar *ssid; + int freq; +}; + +static gint sort_entry(gconstpointer a, gconstpointer b, gpointer user_data) +{ + GTimeVal *aval = (GTimeVal *)a; + GTimeVal *bval = (GTimeVal *)b; + + /* Note that the sort order is descending */ + if (aval->tv_sec < bval->tv_sec) + return 1; + + if (aval->tv_sec > bval->tv_sec) + return -1; + + return 0; +} + +static void free_entry(gpointer data) +{ + struct last_connected *entry = data; + + g_free(entry->ssid); + g_free(entry); +} + static void wifi_remove(struct connman_device *device) { struct wifi_data *wifi = connman_device_get_data(device); @@ -1721,7 +1750,16 @@ static int get_hidden_connections(GSupplicantScanParams *scan_data) int i, ret; bool value; int num_ssids = 0, add_param_failed = 0; +#if defined TIZEN_EXT + GSequenceIter *iter; + GSequence *latest_list; + struct last_connected *entry; + GTimeVal modified; + latest_list = g_sequence_new(free_entry); + if (!latest_list) + goto out; +#endif services = connman_storage_get_services(); for (i = 0; services && services[i]; i++) { if (strncmp(services[i], "wifi_", 5) != 0) @@ -1752,6 +1790,15 @@ static int get_hidden_connections(GSupplicantScanParams *scan_data) g_key_file_free(keyfile); continue; } + + gchar *str = g_key_file_get_string(keyfile, + services[i], "Modified", NULL); + if (!str) { + g_key_file_free(keyfile); + continue; + } + g_time_val_from_iso8601(str, &modified); + g_free(str); #endif ssid = g_key_file_get_string(keyfile, @@ -1760,6 +1807,22 @@ static int get_hidden_connections(GSupplicantScanParams *scan_data) name = g_key_file_get_string(keyfile, services[i], "Name", NULL); +#if defined TIZEN_EXT + entry = g_try_new(struct last_connected, 1); + if (!entry) { + g_sequence_free(latest_list); + g_free(ssid); + g_free(name); + g_key_file_free(keyfile); + goto out; + } + + entry->modified = modified; + entry->ssid = ssid; + + g_sequence_insert_sorted(latest_list, entry, + sort_entry, NULL); +#else ret = add_scan_param(ssid, NULL, 0, 0, scan_data, 0, name); if (ret < 0) add_param_failed++; @@ -1767,10 +1830,30 @@ static int get_hidden_connections(GSupplicantScanParams *scan_data) num_ssids++; g_free(ssid); +#endif g_free(name); g_key_file_free(keyfile); } +#if defined TIZEN_EXT + gint length = g_sequence_get_length(latest_list); + iter = g_sequence_get_begin_iter(latest_list); + + for (i = 0; i < length; i++) { + entry = g_sequence_get(iter); + + ret = add_scan_param(entry->ssid, NULL, 0, 0, scan_data, 0, entry->ssid); + if (ret < 0) + add_param_failed++; + else if (ret > 0) + num_ssids++; + + iter = g_sequence_iter_next(iter); + } + + g_sequence_free(latest_list); +out: +#endif /* * Check if there are any hidden AP that needs to be provisioned. */ @@ -2381,35 +2464,6 @@ static int wifi_disable(struct connman_device *device) return -EINPROGRESS; } -struct last_connected { - GTimeVal modified; - gchar *ssid; - int freq; -}; - -static gint sort_entry(gconstpointer a, gconstpointer b, gpointer user_data) -{ - GTimeVal *aval = (GTimeVal *)a; - GTimeVal *bval = (GTimeVal *)b; - - /* Note that the sort order is descending */ - if (aval->tv_sec < bval->tv_sec) - return 1; - - if (aval->tv_sec > bval->tv_sec) - return -1; - - return 0; -} - -static void free_entry(gpointer data) -{ - struct last_connected *entry = data; - - g_free(entry->ssid); - g_free(entry); -} - static int get_latest_connections(int max_ssids, GSupplicantScanParams *scan_data) { |