Implement disable function
authorSeonah Moon <seonah1.moon@samsung.com>
Fri, 14 Feb 2020 07:56:12 +0000 (16:56 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Fri, 14 Feb 2020 07:56:12 +0000 (16:56 +0900)
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

index ccdcbef..07004ce 100644 (file)
@@ -383,6 +383,29 @@ int wifi_aware_enable(wifi_aware_h wifi_aware,
                wifi_aware_enabled_cb callback, void *user_data);
 
 /**
+ * @brief
+ * @since_tizen 6.0
+ * @param[in] error
+ * @param[in] user_data
+ * @return 0 on success, otherwise a negative error value
+ * @retval #WIFI_AWARE_ERROR_NONE
+ */
+typedef void(*wifi_aware_disabled_cb)(wifi_aware_error_e error, void *user_data);
+
+/**
+ * @brief Disable Wi-Fi Aware functions.
+ * @remark If Wi-Fi Aware has not been enabled, an error is immediately returend without invoking the callback.
+ * @since_tizen 6.0
+ * @param[in] wifi_aware The handle for the Wi-Fi aware
+ * @param[in] callback The result of disable request is asynchrously delivered
+ * @param[in] user_data User data
+ * @return 0 on success, otherwise a negative error value
+ * @retval #WIFI_AWARE_ERROR_NONE
+ */
+int wifi_aware_disable(wifi_aware_h wifi_aware,
+               wifi_aware_disabled_cb callback, void *user_data);
+
+/**
  * @brief This callback delivers the result of a Publish request.
  *        If the request is successfully done, @a publish_id is set to the Wi-Fi Aware service.
  *        @a publish_id can be used to update or cancel the service.
index 5524c10..680b0d0 100644 (file)
@@ -56,6 +56,7 @@ guint wifi_aware_gdbus_register_signal(wifi_aware_signal_e signal,
 
 int wifi_aware_gdbus_enable(wifi_aware_h wifi_aware,
                wifi_aware_enable_request_s *req, GAsyncReadyCallback cb);
+int wifi_aware_gdbus_disable(wifi_aware_h wifi_aware, GAsyncReadyCallback cb);
 int wifi_aware_gdbus_publish(wifi_aware_publish_h publish, int client_id, GAsyncReadyCallback cb);
 int wifi_aware_gdbus_cancel_publish(wifi_aware_publish_h publish, int client_id);
 int wifi_aware_gdbus_update_publish(wifi_aware_publish_h publish, int client_id, GAsyncReadyCallback cb);
index 21aa696..5d05915 100644 (file)
@@ -38,6 +38,10 @@ int _wifi_aware_handle_create(wifi_aware_h *wifi_aware);
 int _wifi_aware_init();
 void _add_enabled_callback(wifi_aware_h wifi_aware, wifi_aware_enabled_cb callback, void *user_data);
 int _wifi_aware_enable_request(wifi_aware_h wifi_aware);
+int _wifi_aware_is_enabled(wifi_aware_h wifi_aware);
+
+void _add_disabled_callback(wifi_aware_h wifi_aware, wifi_aware_disabled_cb callback, void *user_data);
+int _wifi_aware_disable_request(wifi_aware_h wifi_aware);
 
 int _wifi_aware_publish_handle_create(wifi_aware_h wifi_aware, wifi_aware_publish_h *publish);
 void _wifi_aware_publish_request_set_default_values(wifi_aware_publish_h publish);
index 48dfe6d..196cf22 100644 (file)
@@ -332,6 +332,26 @@ int wifi_aware_gdbus_enable(wifi_aware_h wifi_aware,
        return ret;
 }
 
+int wifi_aware_gdbus_disable(wifi_aware_h wifi_aware, GAsyncReadyCallback cb)
+{
+       __WIFI_AWARE_FUNC_ENTER__;
+       int ret = WIFI_AWARE_ERROR_NONE;
+
+       ret = __wifi_aware_dbus_method_call_async(
+               WIFI_AWARE_DISCOVERY_INTERFACE,
+               WIFI_AWARE_DISCOVERY_PATH,
+               "Disable", NULL, cb, wifi_aware);
+
+       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 wifi_aware_gdbus_publish(wifi_aware_publish_h publish, int client_id, GAsyncReadyCallback cb)
 {
        __WIFI_AWARE_FUNC_ENTER__;
index 9b4f6a0..0c68a59 100644 (file)
@@ -56,8 +56,12 @@ enum {
 
 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;
 } wifi_aware_s;
 
 typedef struct {
@@ -212,6 +216,44 @@ static void __enable_request_reply(GObject *src, GAsyncResult *res, gpointer use
                aware->enabled_cb(error, aware->enabled_cb_data);
 }
 
+static wifi_aware_error_e __parse_disable_reply(GVariant *reply, wifi_aware_s *aware)
+{
+       int ret;
+       wifi_aware_error_e error;
+
+       g_variant_get(reply, "(i)", &ret);
+       error = _wifi_aware_convert_nan_manager_error(ret);
+       if (error == WIFI_AWARE_ERROR_NONE)
+               aware->client_id = -1; // reset client_id
+
+       return error;
+}
+
+static void __disable_request_reply(GObject *src, GAsyncResult *res, gpointer user_data)
+{
+       GDBusConnection *conn = NULL;
+       GError *dbus_error = NULL;
+       GVariant *reply = NULL;
+       wifi_aware_s *aware = (wifi_aware_s *)user_data;
+       wifi_aware_error_e error = WIFI_AWARE_ERROR_NONE;
+
+       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);
+       }
+
+       error = __parse_disable_reply(reply, aware);
+
+       if (aware->disabled_cb)
+               aware->disabled_cb(error, aware->enabled_cb_data);
+}
+
 static void __add_published_callback(wifi_aware_publish_h publish,
         wifi_aware_published_cb callback, void *user_data)
 {
@@ -390,6 +432,25 @@ int _wifi_aware_enable_request(wifi_aware_h wifi_aware)
        return wifi_aware_gdbus_enable(wifi_aware, req, __enable_request_reply);
 }
 
+int _wifi_aware_is_enabled(wifi_aware_h wifi_aware)
+{
+       wifi_aware_s *aware = (wifi_aware_s *)wifi_aware;
+       return (aware->client_id > 0 ? 1 : 0);
+}
+
+void _add_disabled_callback(wifi_aware_h wifi_aware,
+               wifi_aware_disabled_cb callback, void *user_data)
+{
+       wifi_aware_s *aware = (wifi_aware_s *)wifi_aware;
+       aware->disabled_cb = callback;
+       aware->disabled_cb_data = user_data;
+}
+
+int _wifi_aware_disable_request(wifi_aware_h wifi_aware)
+{
+       return wifi_aware_gdbus_disable(wifi_aware, __disable_request_reply);
+}
+
 int _wifi_aware_publish_handle_create(wifi_aware_h wifi_aware, wifi_aware_publish_h *publish)
 {
        wifi_aware_s *handle = (wifi_aware_s *)wifi_aware;
index 63f1a38..711ba27 100644 (file)
@@ -84,6 +84,27 @@ API int wifi_aware_enable(wifi_aware_h wifi_aware,
        return WIFI_AWARE_ERROR_NONE;
 }
 
+API int wifi_aware_diable(wifi_aware_h wifi_aware,
+               wifi_aware_disabled_cb callback, void *user_data)
+{
+       int ret = WIFI_AWARE_ERROR_NONE;
+
+       __WIFI_AWARE_FUNC_ENTER__;
+       CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+
+       RET_VAL_IF(_wifi_aware_is_enabled(wifi_aware) == 0,
+                       WIFI_AWARE_ERROR_INVALID_OPERATION,
+                       "_wifi_aware_is_enabled");
+
+       _add_disabled_callback(wifi_aware, callback, user_data);
+
+       ret = _wifi_aware_disable_request(wifi_aware);
+       RET_VAL_IF(ret != WIFI_AWARE_ERROR_NONE, ret, "_wifi_aware_disable_request");
+
+       __WIFI_AWARE_FUNC_EXIT__;
+       return WIFI_AWARE_ERROR_NONE;
+}
+
 API int wifi_aware_publish_create(wifi_aware_h wifi_aware, wifi_aware_publish_h *publish)
 {
        int ret = WIFI_AWARE_ERROR_NONE;