diff options
author | Jaehyun Kim <jeik01.kim@samsung.com> | 2019-10-14 12:53:54 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@review.ap-northeast-2.compute.internal> | 2019-10-14 12:53:54 +0000 |
commit | fcfb1714c531184c6e32b32fcd1a47714d054053 (patch) | |
tree | 477e0f2e92a7cc5cbd95452f8bd7ca7c1b5d3fec | |
parent | 85aa71a6d25c806e2ef43cbb3caddb1fcfb67f77 (diff) | |
parent | 7ab66353f97478e11a9179cea237a429273b3071 (diff) | |
download | connman-fcfb1714c531184c6e32b32fcd1a47714d054053.tar.gz connman-fcfb1714c531184c6e32b32fcd1a47714d054053.tar.bz2 connman-fcfb1714c531184c6e32b32fcd1a47714d054053.zip |
Merge "Try to auto-connect with favorite service before full channel scan" into tizen
-rwxr-xr-x[-rw-r--r--] | plugins/wifi.c | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/plugins/wifi.c b/plugins/wifi.c index e1f23aeb..57d8572c 100644..100755 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -2091,6 +2091,12 @@ static void scan_callback(int result, GSupplicantInterface *interface, struct connman_device *device = user_data; struct wifi_data *wifi = connman_device_get_data(device); bool scanning; +#if defined TIZEN_EXT + GSList *list = NULL; + bool favorite_exists = false; + struct connman_network *network = NULL; + struct connman_service *service = NULL; +#endif DBG("result %d wifi %p", result, wifi); @@ -2138,18 +2144,35 @@ static void scan_callback(int result, GSupplicantInterface *interface, } #if defined TIZEN_EXT - if (wifi && wifi->allow_full_scan) { - int ret; - DBG("Trigger Full Channel Scan"); - wifi->allow_full_scan = FALSE; + if (wifi) { + for (list = wifi->networks; list; list = list->next) { + network = list->data; + service = connman_service_lookup_from_network(network); + + if (service != NULL && + (connman_service_get_favorite(service) == true) && + (connman_service_get_autoconnect(service) == true)) { + DBG("Favorite service exists [%s]", connman_network_get_string(network, "Name")); + favorite_exists = true; + break; + } + } + } - ret = g_supplicant_interface_scan(wifi->interface, NULL, - scan_callback_hidden, device); - if (ret == 0) - return; + if (favorite_exists == false) { + if (wifi && wifi->allow_full_scan) { + int ret; + DBG("Trigger full channel scan"); + wifi->allow_full_scan = false; - /* On error, let's recall scan_callback, which will cleanup */ - return scan_callback(ret, interface, user_data); + ret = g_supplicant_interface_scan(wifi->interface, NULL, + scan_callback_hidden, device); + if (ret == 0) + return; + + /* On error, let's recall scan_callback, which will cleanup */ + return scan_callback(ret, interface, user_data); + } } #endif |