__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__;
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;
{
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));