summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiraj Kumar Goit <niraj.g@samsung.com>2019-08-26 17:30:39 +0530
committerNiraj Kumar Goit <niraj.g@samsung.com>2019-08-26 17:30:39 +0530
commit638c47033fb5d23c2ee62eae4f4f49fcb03c93f0 (patch)
treeb9060fd71f44afd5aaf737c7fe6e90020585d5ea
parent6db18e809df41e6979741f55f88e745e14ad8fb5 (diff)
downloadconnman-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.c112
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)
{