summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiraj Kumar Goit <niraj.g@samsung.com>2019-05-16 11:34:40 +0530
committerNiraj Kumar Goit <niraj.g@samsung.com>2019-05-16 11:41:07 +0530
commit04c6c60d23b121e2aed176e1a1d8a3b8525a1599 (patch)
tree60297bde121f760bcd4dd4816bb7afc9fe3ef2bd
parent69efc565b595bb39ebdbe635f063675ecf59278c (diff)
downloadconnman-04c6c60d23b121e2aed176e1a1d8a3b8525a1599.tar.gz
connman-04c6c60d23b121e2aed176e1a1d8a3b8525a1599.tar.bz2
connman-04c6c60d23b121e2aed176e1a1d8a3b8525a1599.zip
Refactoring of scan for stored hidden profiles.
To improve scan performance, when there are hidden profiles stored in connman and user request for scan, send ScanDone signal after scanning maximum scan ssids supported by driver instead of sending signal after scanning all the stored hidden profiles. Similarly in next scan request, perform scanning (maximum scan ssids) from remaining hidden profiles and send ScanDone signal. Change-Id: I6195668c59b0a75bd0e0097ab6e6b7e3d33aae38 Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
-rw-r--r--plugins/wifi.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/plugins/wifi.c b/plugins/wifi.c
index dfcff59c..ea71df36 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -161,6 +161,7 @@ struct wifi_data {
struct connman_network *scan_pending_network;
bool allow_full_scan;
unsigned int automaxspeed_timeout;
+ GSupplicantScanParams *hidden_scan_params;
#endif
int disconnect_code;
int assoc_code;
@@ -1574,6 +1575,16 @@ static void wifi_remove(struct connman_device *device)
if (wifi->scan_params)
g_supplicant_free_scan_params(wifi->scan_params);
+#if defined TIZEN_EXT
+ if (wifi->hidden_scan_params) {
+ while (wifi->hidden_scan_params->ssids) {
+ struct scan_ssid *ssid;
+ ssid = wifi->hidden_scan_params->ssids->data;
+ wifi->hidden_scan_params->ssids = g_slist_remove(wifi->hidden_scan_params->ssids, ssid);
+ }
+ g_supplicant_free_scan_params(wifi->hidden_scan_params);
+ }
+#endif
g_free(wifi->autoscan);
g_free(wifi->identifier);
@@ -1810,6 +1821,22 @@ static int get_hidden_connections_params(struct wifi_data *wifi,
DBG("max ssids %d", driver_max_ssids);
+#if defined TIZEN_EXT
+ if (!wifi->hidden_scan_params) {
+ wifi->hidden_scan_params = g_try_malloc0(sizeof(GSupplicantScanParams));
+ if (!wifi->hidden_scan_params)
+ return 0;
+
+ if (get_hidden_connections(wifi->hidden_scan_params) == 0) {
+ g_supplicant_free_scan_params(wifi->hidden_scan_params);
+ wifi->hidden_scan_params = NULL;
+
+ return 0;
+ }
+ }
+
+ orig_params = wifi->hidden_scan_params;
+#else
if (!wifi->scan_params) {
wifi->scan_params = g_try_malloc0(sizeof(GSupplicantScanParams));
if (!wifi->scan_params)
@@ -1824,12 +1851,17 @@ static int get_hidden_connections_params(struct wifi_data *wifi,
}
orig_params = wifi->scan_params;
+#endif
/* Let's transfer driver_max_ssids params */
for (i = 0; i < driver_max_ssids; i++) {
struct scan_ssid *ssid;
+#if defined TIZEN_EXT
+ if (!wifi->hidden_scan_params->ssids)
+#else
if (!wifi->scan_params->ssids)
+#endif
break;
ssid = orig_params->ssids->data;
@@ -1857,8 +1889,13 @@ static int get_hidden_connections_params(struct wifi_data *wifi,
err:
g_slist_free_full(scan_params->ssids, g_free);
+#if defined TIZEN_EXT
+ g_supplicant_free_scan_params(wifi->hidden_scan_params);
+ wifi->hidden_scan_params = NULL;
+#else
g_supplicant_free_scan_params(wifi->scan_params);
wifi->scan_params = NULL;
+#endif
return 0;
}
@@ -1968,6 +2005,13 @@ static void scan_callback(int result, GSupplicantInterface *interface,
g_supplicant_free_scan_params(wifi->scan_params);
wifi->scan_params = NULL;
}
+
+#if defined TIZEN_EXT
+ if (wifi->hidden_scan_params && !wifi->hidden_scan_params->ssids) {
+ g_supplicant_free_scan_params(wifi->hidden_scan_params);
+ wifi->hidden_scan_params = NULL;
+ }
+#endif
}
if (result < 0)
@@ -2072,8 +2116,13 @@ static void scan_callback_hidden(int result,
if (get_hidden_connections_params(wifi, scan_params) > 0) {
ret = g_supplicant_interface_scan(wifi->interface,
scan_params,
+#if defined TIZEN_EXT
+ scan_callback,
+#else
scan_callback_hidden,
+#endif
device);
+
if (ret == 0)
return;
}