[wifi-manager] Refactor wifi Specific AP scan to fix syncup issue. 49/144049/2 accepted/tizen/unified/20170818.000123 submit/tizen/20170817.042132
authorNiraj Kumar Goit <niraj.g@samsung.com>
Mon, 14 Aug 2017 14:19:12 +0000 (19:49 +0530)
committerNiraj Kumar Goit <niraj.g@samsung.com>
Wed, 16 Aug 2017 05:39:29 +0000 (11:09 +0530)
To search specific AP, use connman "SpecificScan" dbus
method instead of net-config "RequestSpecificScan" method.

Change-Id: I77b61efe679126bdc935e295a3b9f69fd3496c2f
Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
src/network_dbus.c
src/network_signal.c

index 673d4b4cd446e7e317eb6dccc30716645dca25d8..83fa5af05aa884036e92e5aed89328a326185bd0 100755 (executable)
@@ -446,56 +446,6 @@ static void __net_wifi_power_reply(GObject *source_object, GAsyncResult *res, gp
        __NETWORK_FUNC_EXIT__;
 }
 
-static void __net_specific_scan_wifi_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
-{
-       __NETWORK_FUNC_ENTER__;
-
-       GDBusConnection *conn = NULL;
-       GError *error = NULL;
-       net_err_e Error = NET_ERR_NONE;
-       net_event_info_s event_data = { 0, };
-
-       conn = G_DBUS_CONNECTION(source_object);
-       g_dbus_connection_call_finish(conn, res, &error);
-       if (error != NULL) {
-               Error = __net_netconfig_error_string_to_enum(error->message);
-               g_error_free(error);
-       }
-
-       if (Error != NET_ERR_NONE)
-               WIFI_LOG(WIFI_ERROR, "Find specific AP failed[%d]", Error);
-       else
-               WIFI_LOG(WIFI_INFO, "Specific AP found");
-
-       if (request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN].flag == TRUE) {
-               if (NET_ERR_NONE != Error) {
-                       /* An error occurred.
-                        * So lets reset specific scan request entry in the request table */
-                       memset(&request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN],
-                                       0, sizeof(network_request_table_s));
-               }
-
-               event_data.Event = NET_EVENT_WIFI_SPECIFIC_SCAN_RSP;
-
-               WIFI_LOG(WIFI_INFO,
-                               "Sending NET_EVENT_SPECIFIC_SCAN_RSP Wi-Fi: %d Error[%d]",
-                               NetworkInfo.wifi_state, Error);
-
-               event_data.Datalength = sizeof(net_wifi_state_e);
-               event_data.Data = &(NetworkInfo.wifi_state);
-               event_data.Error = Error;
-
-               _net_dbus_pending_call_unref();
-               _net_client_callback(&event_data);
-       } else {
-               _net_dbus_pending_call_unref();
-               __NETWORK_FUNC_EXIT__;
-               return;
-       }
-
-       __NETWORK_FUNC_EXIT__;
-}
-
 static void __net_bssid_scan_wifi_reply(GObject *source_object, GAsyncResult *res, gpointer user_data)
 {
        __NETWORK_FUNC_ENTER__;
@@ -1741,16 +1691,26 @@ int _net_dbus_remove_wifi_driver(void)
 int _net_dbus_specific_scan_request(const char *ssid)
 {
        __NETWORK_FUNC_ENTER__;
+       WIFI_LOG(WIFI_ERROR, "specific scan ssid : %s", ssid);
 
        GVariant *params = NULL;
+       GVariantBuilder *builder;
        net_err_e Error = NET_ERR_NONE;
 
-       params = g_variant_new("(s)", ssid);
+       builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
+       g_variant_builder_add(builder, "{sv}", "SSID", g_variant_new_string(ssid));
 
-       Error = _net_invoke_dbus_method_nonblock(NETCONFIG_SERVICE,
-                       NETCONFIG_WIFI_PATH, NETCONFIG_WIFI_INTERFACE,
-                       "RequestSpecificScan", params, 6 * DBUS_REPLY_TIMEOUT,
-                       __net_specific_scan_wifi_reply);
+       params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
+       g_variant_builder_unref(builder);
+
+       /* use DBus signal than reply pending because of performance reason */
+       Error = _net_invoke_dbus_method_nonblock(CONNMAN_SERVICE,
+                       CONNMAN_WIFI_TECHNOLOGY_PREFIX,
+                       CONNMAN_TECHNOLOGY_INTERFACE, "SpecificScan", params,
+                       DBUS_REPLY_TIMEOUT, NULL);
+
+       if (Error == NET_ERR_IN_PROGRESS)
+               Error = NET_ERR_NONE; //LCOV_EXCL_LINE
 
        __NETWORK_FUNC_EXIT__;
        return Error;
index cbc9e6d2f4d543b4ef2290a94b4b2a9edff293fa..2a81f1ea22013894ffc865e01acc66c25b3796c0 100755 (executable)
@@ -689,9 +689,21 @@ static int __net_handle_scan_done(GVariant *param)
 {
        net_event_info_s event_data = { 0, };
 
-       if (request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN].flag == TRUE)
-               return NET_ERR_NONE;
-       else if (request_table[NETWORK_REQUEST_TYPE_SCAN].flag == TRUE) {
+       if (request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN].flag == TRUE) {
+               memset(&request_table[NETWORK_REQUEST_TYPE_SPECIFIC_SCAN],
+                               0, sizeof(network_request_table_s));
+
+               _net_dbus_pending_call_unref();
+
+               WIFI_LOG(WIFI_INFO, "Specific scan completed");
+
+               event_data.Event = NET_EVENT_WIFI_SPECIFIC_SCAN_IND;
+               event_data.Datalength = 0;
+               event_data.Data = NULL;
+
+               _net_client_callback(&event_data);
+
+       } else if (request_table[NETWORK_REQUEST_TYPE_SCAN].flag == TRUE) {
                memset(&request_table[NETWORK_REQUEST_TYPE_SCAN], 0,
                                sizeof(network_request_table_s));