printf("fail to %s: %s \n", msg, __print_error(ret));
}
+static void __disabled_cb(wifi_aware_error_e error, void *user_data)
+{
+ if (error == WIFI_AWARE_ERROR_NONE)
+ printf("Wi-Fi Aware is disabled\n");
+ else
+ printf("Wi-Fi Aware is not disabled. Error: %s\n", __print_error(error));
+}
+
void __print_mac(unsigned char mac[6])
{
printf(MACSTR, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
void test_deinit()
{
- wifi_aware_disable();
+ wifi_aware_disable(__disabled_cb , NULL);
int ret = wifi_aware_deinitialize();
__print_result(ret, "deinitialize");
}
*/
int wifi_aware_enable(wifi_aware_enabled_cb callback, void *user_data);
+/**
+ * @brief Called when Wi-Fi Aware is disabled.
+ * @details The following error codes can be received: \n
+ * #WIFI_AWARE_ERROR_NONE Successful \n
+ * #WIFI_AWARE_ERROR_NOT_SUPPORTED Not supported \n
+ * #WIFI_AWARE_ERROR_PERMISSION_DENIED Permission denied \n
+ * #WIFI_AWARE_ERROR_INVALID_PARAMETER Invalid function parameter \n
+ * #WIFI_AWARE_ERROR_INVALID_OPERATION Invalid operation \n
+ * #WIFI_AWARE_ERROR_OPERATION_FAILED Operation failed
+ * @since_tizen 9.0
+ * @param[in] error The error code
+ * @param[in] user_data The user data passed from the request function
+ * @see wifi_aware_disable()
+ */
+typedef void(*wifi_aware_disabled_cb)(wifi_aware_error_e error, void *user_data);
+
/**
* @brief Disables Wi-Fi Aware functions.
* @since_tizen 9.0
* @privlevel public
* @privilege %http://tizen.org/privilege/network.set
+ * @param[in] callback The result of disable request is asynchronously delivered
+ * @param[in] user_data The user data passed to the callback function
* @return 0 on success, otherwise a negative error value
* @retval #WIFI_AWARE_ERROR_NONE Successful
* @retval #WIFI_AWARE_ERROR_NOT_SUPPORTED Not supported
* @retval #WIFI_AWARE_ERROR_OPERATION_FAILED Operation failed
* @see wifi_aware_enable()
*/
-int wifi_aware_disable(void);
+int wifi_aware_disable(wifi_aware_disabled_cb callback, void *user_data);
/**
* @brief Creates the Wi-Fi Aware Session.
void wifi_aware_gdbus_deregister_signal(guint signal_id);
int wifi_aware_gdbus_enable(wifi_aware_enable_request_s *req, GAsyncReadyCallback cb);
-int wifi_aware_gdbus_disable(int client_id);
+int wifi_aware_gdbus_disable(int client_id, GAsyncReadyCallback cb);
int wifi_aware_gdbus_publish(wifi_aware_session_h session,
wifi_aware_publish_h publish, int client_id, GAsyncReadyCallback cb);
int wifi_aware_gdbus_cancel_publish(wifi_aware_session_h session, int client_id);
int _wifi_aware_init();
int _wifi_aware_deinit();
void _add_enabled_callback(wifi_aware_enabled_cb callback, void *user_data);
+void _add_disabled_callback(wifi_aware_disabled_cb callback, void *user_data);
int _wifi_aware_enable_request();
bool _wifi_aware_is_enabled();
int _wifi_aware_disable_request();
return ret;
}
-// Should this need to be unified?
-// It is the same as __handle_cancel_*_reply().
-static int __handle_disable_reply(GVariant *reply)
-{
- int error;
- g_variant_get(reply, "(i)", &error);
- WIFI_AWARE_LOGI("Reply for Disable %d", error);
- return error;
-}
-
static int __handle_ndp_close_reply(GVariant *reply)
{
int error;
return error;
}
-int wifi_aware_gdbus_disable(int client_id)
+int wifi_aware_gdbus_disable(int client_id, GAsyncReadyCallback cb)
{
__WIFI_AWARE_FUNC_ENTER__;
int ret = WIFI_AWARE_ERROR_NONE;
- GVariant *reply = NULL;
- ret = __wifi_aware_dbus_method_call_sync(
+ ret = __wifi_aware_dbus_method_call_async(
WIFI_AWARE_DISCOVERY_INTERFACE,
WIFI_AWARE_DISCOVERY_PATH,
- "Disable", g_variant_new("(i)", client_id), &reply);
-
- RET_VAL_IF(ret != WIFI_AWARE_ERROR_NONE, ret, "Disable failed");
+ "Disable", g_variant_new("(i)", client_id), cb, NULL);
- ret = __handle_disable_reply(reply);
- g_variant_unref(reply);
+ if (ret != WIFI_AWARE_ERROR_NONE) {
+ WIFI_AWARE_LOGE("wifi_aware_dbus_method_call_async() failed");
+ __WIFI_AWARE_FUNC_EXIT__;
+ return ret;
+ }
__WIFI_AWARE_FUNC_EXIT__;
return ret;
int client_id;
wifi_aware_enabled_cb enabled_cb;
void *enabled_cb_data;
+ wifi_aware_disabled_cb disabled_cb;
+ void *disabled_cb_data;
GHashTable *peer_map;
} wifi_aware_s;
}
}
+static void __disable_request_reply(GObject *src, GAsyncResult *res, gpointer user_data)
+{
+ GDBusConnection *conn = NULL;
+ GError *dbus_error = NULL;
+ GVariant *reply = NULL;
+ wifi_aware_error_e error = WIFI_AWARE_ERROR_NONE;
+ int nan_error = 0;
+
+ WIFI_AWARE_LOGI("Reply for Disable Request");
+
+ conn = G_DBUS_CONNECTION(src);
+ reply = g_dbus_connection_call_finish(conn, res, &dbus_error);
+
+ if (dbus_error != NULL) {
+ WIFI_AWARE_LOGE("Disable Request failure: %s", dbus_error->message);
+ error = _wifi_aware_convert_error_string_to_enum(dbus_error->message);
+ g_error_free(dbus_error);
+ } else {
+ g_variant_get(reply, "(i)", &nan_error);
+ WIFI_AWARE_LOGI("error: %d", nan_error);
+ error = _wifi_aware_convert_nan_manager_error(nan_error);
+ }
+
+ if (g_wifi_aware->disabled_cb) {
+ wifi_aware_disabled_cb disabled_cb = g_wifi_aware->disabled_cb;
+ g_wifi_aware->disabled_cb = NULL;
+ disabled_cb(error, g_wifi_aware->disabled_cb_data);
+ g_wifi_aware->disabled_cb_data = NULL;
+ }
+}
+
static void __session_add_published_callback(wifi_aware_session_h session,
wifi_aware_published_cb callback, void *user_data)
{
g_wifi_aware->enabled_cb_data = user_data;
}
+void _add_disabled_callback(wifi_aware_enabled_cb callback, void *user_data)
+{
+ g_wifi_aware->disabled_cb = callback;
+ g_wifi_aware->disabled_cb_data = user_data;
+}
+
static void __wifi_aware_enable_request_set_default_values(wifi_aware_enable_request_s *req)
{
req->master_pref = 0x2;
int _wifi_aware_disable_request()
{
- int ret = wifi_aware_gdbus_disable(g_wifi_aware->client_id);
+ int ret = wifi_aware_gdbus_disable(g_wifi_aware->client_id, __disable_request_reply);
g_wifi_aware->client_id = -1;
return ret;
}
return WIFI_AWARE_ERROR_NONE;
}
-API int wifi_aware_disable(void)
+API int wifi_aware_disable(wifi_aware_disabled_cb callback, void *user_data)
{
int ret = WIFI_AWARE_ERROR_NONE;
RET_VAL_IF(!_wifi_aware_is_initialized(), WIFI_AWARE_ERROR_NOT_INITIALIZED, "Not initialized");
RET_VAL_IF(!_wifi_aware_is_enabled(), WIFI_AWARE_ERROR_INVALID_OPERATION, "Not enabled");
+ _add_disabled_callback(callback, user_data);
+
ret = _wifi_aware_disable_request();
RET_VAL_IF(ret != WIFI_AWARE_ERROR_NONE, ret, "_wifi_aware_disable_request");
g_main_loop_quit(g_main_loop_p);
}
+static void __disabled_cb(wifi_aware_error_e error, void *user_data)
+{
+ if (error == WIFI_AWARE_ERROR_NONE)
+ printf("Wi-Fi Aware is disabled\n");
+ else
+ printf("Wi-Fi Aware is not disabled");
+}
+
void clear_resources()
{
if (g_publish_handle)
void test_deinit()
{
- wifi_aware_disable();
+ wifi_aware_disable(__disabled_cb, NULL);
wifi_aware_deinitialize();
}
g_main_loop_quit(g_main_loop_p);
}
+static void __disabled_cb(wifi_aware_error_e error, void *user_data)
+{
+ if (error == WIFI_AWARE_ERROR_NONE)
+ printf("Wi-Fi Aware is disabled\n");
+ else
+ printf("Wi-Fi Aware is not disabled");
+}
+
void test_init()
{
int ret = 0;
void test_deinit()
{
- wifi_aware_disable();
+ wifi_aware_disable(__disabled_cb, NULL);
wifi_aware_deinitialize();
}
printf("Wi-Fi Aware is not enabled. Error: %s\n", __print_error(error));
}
+static void __disabled_cb(wifi_aware_error_e error, void *user_data)
+{
+ if (error == WIFI_AWARE_ERROR_NONE)
+ printf("Wi-Fi Aware is disabled\n");
+ else
+ printf("Wi-Fi Aware is not disabled. Error: %s\n", __print_error(error));
+}
+
void test_enable()
{
int ret = 0;
RET_IF_LOOP_IS_NULL();
- ret = wifi_aware_disable();
+ ret = wifi_aware_disable(__disabled_cb, NULL);
__print_result(ret, "wifi_aware_disable");
}
g_timeout_add(ASYNC_RESULT_DELAY, __reply_async_method, &_gdbus_async_result);
}
-static GVariant *__disable_handler(GVariant *parameters)
+static void __disable_handler(GVariant *parameters, GAsyncReadyCallback callback, gpointer user_data)
{
- return g_variant_new("(i)", WIFI_AWARE_ERROR_NONE);
+ // Always Success
+ _gdbus_async_result.callback = callback;
+ _gdbus_async_result.result = g_variant_new("(i)", WIFI_AWARE_ERROR_NONE);
+ _gdbus_async_result.user_data = user_data;
+ g_timeout_add(ASYNC_RESULT_DELAY, __reply_async_method, &_gdbus_async_result);
}
static void __publish_handler(GVariant *parameters, GAsyncReadyCallback callback, gpointer user_data)
{
"net.nan.discovery",
"Disable",
- NULL,
__disable_handler,
+ NULL,
},
{
"net.nan.discovery",
ret = wifi_aware_data_path_close(g_data_path);
CHECK_RESULT(WIFI_AWARE_ERROR_NONE, ret, "wifi_aware_data_path_close");
- wifi_aware_disable();
+ wifi_aware_disable(WifiAware::__disabled_cb, NULL);
+ RUN_GMAIN_LOOP;
}
TEST_F(WifiAwareDataPath, wifi_aware_data_path_open_close_p2)
ret = wifi_aware_data_path_close(g_data_path);
CHECK_RESULT(WIFI_AWARE_ERROR_NONE, ret, "wifi_aware_data_path_close");
- wifi_aware_disable();
+ wifi_aware_disable(WifiAware::__disabled_cb, NULL);
+ RUN_GMAIN_LOOP;
}
TEST_F(WifiAwareDataPath, wifi_aware_data_path_open_close_p3)
ret = wifi_aware_data_path_close(g_data_path);
CHECK_RESULT(WIFI_AWARE_ERROR_NONE, ret, "wifi_aware_data_path_close");
- wifi_aware_disable();
+ wifi_aware_disable(WifiAware::__disabled_cb, NULL);
+ RUN_GMAIN_LOOP;
}
TEST_F(WifiAwareDataPath, wifi_aware_data_path_open_n)
ret = wifi_aware_data_path_open(NULL, NULL, NULL);
CHECK_RESULT(WIFI_AWARE_ERROR_INVALID_PARAMETER, ret, "wifi_aware_data_path_open");
- wifi_aware_disable();
+ wifi_aware_disable(WifiAware::__disabled_cb, NULL);
+ RUN_GMAIN_LOOP;
}
TEST_F(WifiAwareDataPath, wifi_aware_data_path_close_n)
virtual void TearDown()
{
- wifi_aware_disable();
+ wifi_aware_disable(WifiAware::__disabled_cb, NULL);
WifiAware::TearDown();
}
public:
static gboolean _wifi_aware_callback_timeout(gpointer data);
static void __enabled_cb(wifi_aware_error_e error, void *user_data);
+ static void __disabled_cb(wifi_aware_error_e error, void *user_data);
static GMainLoop *g_main_loop;
static guint g_timeout_id;
static bool g_enabled;
+ static bool g_disabled;
static bool g_wifi_aware_supported;
};
guint WifiAware::g_timeout_id;
bool WifiAware::g_enabled;
+bool WifiAware::g_disabled;
bool WifiAware::g_wifi_aware_supported;
gboolean WifiAware::_wifi_aware_callback_timeout(gpointer data)
QUIT_GMAIN_LOOP;
}
+void WifiAware::__disabled_cb(wifi_aware_error_e error, void *user_data)
+{
+ if (error == WIFI_AWARE_ERROR_NONE)
+ WifiAware::g_disabled = true;
+ QUIT_GMAIN_LOOP;
+}
+
TEST_F(WifiAware, wifi_aware_initialize_p)
{
int ret = 0;
ASSERT_TRUE(WifiAware::g_enabled) << "FAIL Enabled";
- wifi_aware_disable();
+ wifi_aware_disable(__disabled_cb, NULL);
}
TEST_F(WifiAware, wifi_aware_enable_n)
ret = wifi_aware_enable(__enabled_cb, NULL);
CHECK_RESULT(WIFI_AWARE_ERROR_ALREADY_ENABLED, ret, "wifi_aware_enable");
- wifi_aware_disable();
+ wifi_aware_disable(__disabled_cb, NULL);
}
TEST_F(WifiAware, wifi_aware_disable_p)
wifi_aware_enable(__enabled_cb, NULL);
RUN_GMAIN_LOOP;
- ret = wifi_aware_disable();
+ ret = wifi_aware_disable(__disabled_cb, NULL);
CHECK_RESULT(WIFI_AWARE_ERROR_NONE, ret, "wifi_aware_disable");
- wifi_aware_disable();
+ wifi_aware_disable(__disabled_cb, NULL);
}
TEST_F(WifiAware, wifi_aware_disable_n)
{
int ret = 0;
- ret = wifi_aware_disable();
+ ret = wifi_aware_disable(__disabled_cb, NULL);
CHECK_RESULT(WIFI_AWARE_ERROR_INVALID_OPERATION, ret, "wifi_aware_disable");
}