Forget previous AP on successful connection to new AP 97/135197/1
authorAbhishek Sansanwal <abhishek.s94@samsung.com>
Wed, 21 Jun 2017 07:05:48 +0000 (12:35 +0530)
committerAbhishek Sansanwal <abhishek.s94@samsung.com>
Wed, 21 Jun 2017 07:09:59 +0000 (12:39 +0530)
Description: Forget and destroy the previously connected AP
when connection is succesfully established to new AP.
Also removed disconnect call on previously connected AP before
attempting to connecting to new AP, because this is
already handled by wifi-manager.

Signed-off-by: Abhishek Sansanwal <abhishek.s94@samsung.com>
Change-Id: I61bc0035cb6d097cb9f833df8b441d19db7837fe

src/data/system/data_wireless.c

index e95daa268ac7a79cd0a66b2621baf96ad1d7a7bc..0e7f78bff594256c2106188a4e976629e83818d9 100644 (file)
@@ -24,6 +24,7 @@ static void __wireless_background_scan_callback(wifi_manager_error_e error, void
 
 struct _priv {
        wifi_manager_h wifi;
+       wifi_manager_ap_h prev_ap;
        Eina_List *list;
        void (*event_cb)(enum event_type type, void *data);
        void *cb_data;
@@ -490,6 +491,7 @@ bool _wifi_set_passcode(wifi_manager_ap_h ap, char *passcode)
 static void _wifi_manager_connected_cb(wifi_manager_error_e err, void *data)
 {
        struct _priv *priv;
+       int rv;
 
        if (!data) {
                _ERR("Invalid argument.");
@@ -511,6 +513,11 @@ static void _wifi_manager_connected_cb(wifi_manager_error_e err, void *data)
 
                return;
        } else {
+               rv = wifi_manager_forget_ap(priv->wifi, priv->prev_ap);
+               if (rv != WIFI_MANAGER_ERROR_NONE)
+                       _ERR("Fail to forget previous AP");
+               else
+                       wifi_manager_ap_destroy(priv->prev_ap);
                if (priv->event_cb)
                        priv->event_cb(EVENT_DATA_CONNECTED, priv->cb_data);
 
@@ -541,20 +548,6 @@ static void _wifi_manager_connect_new_ap(struct _priv *priv)
        }
 }
 
-static void _wifi_prev_ap_disconnected(wifi_manager_error_e err, void *data)
-{
-       struct _priv *priv;
-
-       if (!data) {
-               _ERR("Invalid argument.");
-               return;
-       }
-
-       priv = data;
-
-       _wifi_manager_connect_new_ap(priv);
-}
-
 static bool _select(void *dclass_data, Elm_Object_Item *it, void *data)
 {
        struct _priv *priv;
@@ -585,14 +578,8 @@ static bool _select(void *dclass_data, Elm_Object_Item *it, void *data)
                return false;
        }
 
-       r = wifi_manager_disconnect(priv->wifi, prev_ap, _wifi_prev_ap_disconnected, priv);
-       if (r != WIFI_MANAGER_ERROR_NONE) {
-               _ERR("Forget ap failed.");
-               wifi_manager_ap_destroy(prev_ap);
-               return false;
-       }
-
-       wifi_manager_ap_destroy(prev_ap);
+       priv->prev_ap = prev_ap;
+       _wifi_manager_connect_new_ap(priv);
 
        return true;
 }