Modify wifi_aware_disable API 02/318102/3
authora-nijhara <a.nijhara@samsung.com>
Tue, 24 Sep 2024 10:05:20 +0000 (15:35 +0530)
committera-nijhara <a.nijhara@samsung.com>
Fri, 27 Sep 2024 11:16:44 +0000 (16:46 +0530)
Change-Id: I102d8f2690e5fc0d4439345c361d73859e9cd270

15 files changed:
cts-verifier/cts-verifier-common.c
include/wifi-aware.h
src/include/wifi-aware-gdbus.h
src/include/wifi-aware-private.h
src/wifi-aware-gdbus.c
src/wifi-aware-private.c
src/wifi-aware.c
tests/nan-test/wifi-aware-publish-matching-filter-test.c
tests/nan-test/wifi-aware-subscribe-matching-filter-test.c
tests/nan-test/wifi-aware-test.c
tests/unittest/mocks/wifi-aware-mock-gdbus-internal.c
tests/unittest/wifi-aware-data-path-unittest.cpp
tests/unittest/wifi-aware-session-unittest-fixture.h
tests/unittest/wifi-aware-unittest-fixture.h
tests/unittest/wifi-aware-unittest.cpp

index 8b2fd1381d9b967f0e55347eb3b4fb74007c8fe7..f28bc245f3974401427dca26d15aca7a1aaf90af 100644 (file)
@@ -71,6 +71,14 @@ static void __print_result(int ret, gchar *msg)
                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]);
@@ -84,7 +92,7 @@ void test_init()
 
 void test_deinit()
 {
-       wifi_aware_disable();
+       wifi_aware_disable(__disabled_cb , NULL);
        int ret = wifi_aware_deinitialize();
        __print_result(ret, "deinitialize");
 }
index 93174e82d95885be0e3f456bd7ee4de5dfbabf4c..79a83e0587a5977a74b84f6937127c3d50227a51 100644 (file)
@@ -261,11 +261,29 @@ typedef void(*wifi_aware_enabled_cb)(wifi_aware_error_e error, void *user_data);
  */
 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
@@ -275,7 +293,7 @@ int wifi_aware_enable(wifi_aware_enabled_cb callback, void *user_data);
  * @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.
index ae54c5691a1b8be02af53cda27bf11612bb5cddd..4a34ebb66fbed1183a67b6f2fae9a168c6d37a38 100644 (file)
@@ -62,7 +62,7 @@ guint wifi_aware_gdbus_register_signal(wifi_aware_signal_e signal,
 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);
index 5f9a12ba165030e0381e4fc9ddec5a1554ff1772..68476e4d4d2359dee90bcc622c06bddb3d44e07e 100644 (file)
@@ -37,6 +37,7 @@ bool _wifi_aware_is_initialized();
 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();
index cea1fe2de1c4f5fc3d373608f3b01195e4d2b3f3..1ab428646d9b29ac62795682048bc70ad8c22d90 100644 (file)
@@ -450,16 +450,6 @@ int wifi_aware_gdbus_enable(wifi_aware_enable_request_s *req, GAsyncReadyCallbac
        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;
@@ -468,21 +458,21 @@ static int __handle_ndp_close_reply(GVariant *reply)
        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;
index 9f82e968cbc9188f884e19347a307e5c873dead2..24f78cec9efed7419664353fa9d48a69c84dfd37 100644 (file)
@@ -54,6 +54,8 @@ typedef struct {
        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;
 
@@ -269,6 +271,37 @@ static void __enable_request_reply(GObject *src, GAsyncResult *res, gpointer use
        }
 }
 
+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)
 {
@@ -533,6 +566,12 @@ void _add_enabled_callback(wifi_aware_enabled_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;
@@ -561,7 +600,7 @@ bool _wifi_aware_is_enabled()
 
 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;
 }
index af5758bae849cd448d626dda7eeb027aca4c09ad..916a8dfd1c01fd857571a1a800668e62cd354262 100644 (file)
@@ -76,7 +76,7 @@ API int wifi_aware_enable(wifi_aware_enabled_cb callback, void *user_data)
        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;
 
@@ -85,6 +85,8 @@ API int wifi_aware_disable(void)
        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");
 
index 9457f2e8897b9ad9b27d8ee3c9e9ad443f46ebe7..7f5cd4edae467020eb26b048f044bed50c2a3111 100644 (file)
@@ -125,6 +125,14 @@ static void __enabled_cb(wifi_aware_error_e error, void *user_data)
        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)
@@ -168,7 +176,7 @@ void test_init()
 
 void test_deinit()
 {
-       wifi_aware_disable();
+       wifi_aware_disable(__disabled_cb, NULL);
        wifi_aware_deinitialize();
 }
 
index beaefa8497f924c616b93c7a5eece81e5a4f2132..1a0cf6bfe1bb752164cb96d59ce681d564fa40a8 100644 (file)
@@ -177,6 +177,14 @@ static void __enabled_cb(wifi_aware_error_e error, void *user_data)
        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;
@@ -203,7 +211,7 @@ void test_init()
 
 void test_deinit()
 {
-       wifi_aware_disable();
+       wifi_aware_disable(__disabled_cb, NULL);
        wifi_aware_deinitialize();
 }
 
index 0b3a286d000808ac076c8379dd42a608a8ab9a39..19d17c001ee9631604840146a8f454ecb9c8be91 100644 (file)
@@ -339,6 +339,14 @@ static void __enabled_cb(wifi_aware_error_e error, void *user_data)
                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;
@@ -355,7 +363,7 @@ void test_disable()
 
        RET_IF_LOOP_IS_NULL();
 
-       ret = wifi_aware_disable();
+       ret = wifi_aware_disable(__disabled_cb, NULL);
        __print_result(ret, "wifi_aware_disable");
 }
 
index afb80d83b3d6f93cf2ed2b28e0f1ecda8bacb609..0a960f2c4c0a8e483f3c11e387dcd70ae49cc3cf 100644 (file)
@@ -44,9 +44,13 @@ static void __enable_handler(GVariant *parameters, GAsyncReadyCallback callback,
        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)
@@ -125,8 +129,8 @@ struct {
        {
                "net.nan.discovery",
                "Disable",
-               NULL,
                __disable_handler,
+               NULL,
        },
        {
                "net.nan.discovery",
index 2f0d692381e4f7fe480cba458c1f95af9ace93ed..a229d27e68834a64833cac2fd6f6499f84fbfa48 100644 (file)
@@ -185,7 +185,8 @@ TEST_F(WifiAwareDataPath, wifi_aware_data_path_open_close_p1)
        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)
@@ -207,7 +208,8 @@ 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)
@@ -230,7 +232,8 @@ 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)
@@ -246,7 +249,8 @@ 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)
index 9346ef311b021c94b70544ca56d02306a4c0808e..cf42aa33b4c2b9ef12e802367d801840b66aa3db 100644 (file)
@@ -36,7 +36,7 @@ protected:
 
        virtual void TearDown()
        {
-               wifi_aware_disable();
+               wifi_aware_disable(WifiAware::__disabled_cb, NULL);
                WifiAware::TearDown();
        }
 
index fb14af7c1e03219af2c36352704ecb47946a4f38..fdb023c983279033ba663237aa58dbd23cb424c5 100644 (file)
@@ -44,9 +44,11 @@ protected:
 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;
 };
index fcd0a1e62a011c0f9fd62a53d211dba64e7ae9d2..0d2ab1793b80940c92ae00d0edf8f949b78eab2c 100644 (file)
@@ -23,6 +23,7 @@ GMainLoop *WifiAware::g_main_loop;
 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)
@@ -44,6 +45,13 @@ void WifiAware::__enabled_cb(wifi_aware_error_e error, void *user_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;
@@ -88,7 +96,7 @@ TEST_F(WifiAware, wifi_aware_enable_p)
 
        ASSERT_TRUE(WifiAware::g_enabled) << "FAIL Enabled";
 
-       wifi_aware_disable();
+       wifi_aware_disable(__disabled_cb, NULL);
 }
 
 TEST_F(WifiAware, wifi_aware_enable_n)
@@ -101,7 +109,7 @@ 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)
@@ -111,16 +119,16 @@ 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");
 }