Add discovery_result_cb
authorCheoleun Moon <chleun.moon@samsung.com>
Tue, 21 Jan 2020 13:53:53 +0000 (22:53 +0900)
committerCheoleun Moon <chleun.moon@samsung.com>
Tue, 21 Jan 2020 13:53:53 +0000 (22:53 +0900)
12 files changed:
include/wifi-aware.h
src/CMakeLists.txt
src/include/wifi-aware-gdbus.h
src/include/wifi-aware-peer.h
src/include/wifi-aware-private.h
src/wifi-aware-gdbus-signal-adapter.c [deleted file]
src/wifi-aware-gdbus.c
src/wifi-aware-peer.c
src/wifi-aware-private.c
src/wifi-aware-subscribe.c
src/wifi-aware.c
test/wifi-aware-test.c

index 6bc5c00..a1f8330 100644 (file)
@@ -155,9 +155,9 @@ int wifi_aware_deinitialize(wifi_aware_h wifi_aware);
  * @brief TODO (can be removed) Create a configuration for Enable request.
  * @since_tizen 6.0
  * @param[out] config
- * @return     0 on success, otherwise a negative error value
- * @retval     #WIFI_AWARE_ERROR_NONE
- * @see        wifi_aware_enable_config_destroy
+ * @return     0 on success, otherwise a negative error value
+ * @retval     #WIFI_AWARE_ERROR_NONE
+ * @see        wifi_aware_enable_config_destroy
  */
 int wifi_aware_enable_config_create(wifi_aware_enable_config_h *config);
 
@@ -165,9 +165,9 @@ int wifi_aware_enable_config_create(wifi_aware_enable_config_h *config);
  * @brief TODO (can be removed) Destroy a configuration for Enable request.
  * @since_tizen 6.0
  * @param[in] config
- * @return     0 on success, otherwise a negative error value
- * @retval     #WIFI_AWARE_ERROR_NONE
- * @see        wifi_aware_enable_config_create
+ * @return     0 on success, otherwise a negative error value
+ * @retval     #WIFI_AWARE_ERROR_NONE
+ * @see        wifi_aware_enable_config_create
  */
 int wifi_aware_enable_config_destroy(wifi_aware_enable_config_h config);
 
@@ -229,14 +229,13 @@ int wifi_aware_publish_config_set_ttl(wifi_aware_publish_config_h config, unsign
  * @return     0 on success, otherwise a negative error value
  * @retval     #WIFI_AWARE_ERROR_NONE
  */
-int wifi_aware_publish_config_set_publish_type(wifi_aware_publish_config_h config, wifi_aware_publish_type_e publish_type);
+int wifi_aware_publish_config_set_type(wifi_aware_publish_config_h config, wifi_aware_publish_type_e publish_type);
 
 /**
  * @brief Set the name of the service.
  * @since_tizen 6.0
  * @param[in] config
- * @param[in] service_name 
- * @param[in] len 
+ * @param[in] service_name. It should be a null-terminated string. 
  * @return     0 on success, otherwise a negative error value
  * @retval     #WIFI_AWARE_ERROR_NONE
  */
@@ -262,7 +261,9 @@ int wifi_aware_publish_config_set_service_specific_info(wifi_aware_publish_confi
  * @return     0 on success, otherwise a negative error value
  * @retval     #WIFI_AWARE_ERROR_NONE
  */
-int wifi_aware_publish_config_set_match_filter(wifi_aware_publish_config_h config, unsigned char *match_filter, size_t len);
+int wifi_aware_publish_config_add_match_filter(wifi_aware_publish_config_h config, unsigned char *match_filter, size_t len);
+
+int wifi_aware_publish_config_clear_all_match_filters(wifi_aware_publish_config_h config);
 
 /**
  * @brief TODO (Need decision to add) Set whether notifying a termination of the service or not.
@@ -306,14 +307,13 @@ int wifi_aware_subscribe_config_set_ttl(wifi_aware_subscribe_config_h config, un
  * @return     0 on success, otherwise a negative error value
  * @retval     #WIFI_AWARE_ERROR_NONE
  */
-int wifi_aware_subscribe_config_set_subscribe_type(wifi_aware_subscribe_config_h config, wifi_aware_subscribe_type_e subscribe_type);
+int wifi_aware_subscribe_config_set_type(wifi_aware_subscribe_config_h config, wifi_aware_subscribe_type_e subscribe_type);
 
 /**
  * @brief 
  * @since_tizen 6.0
  * @param[in] config
- * @param[in] service_name
- * @param[in] len
+ * @param[in] service_name. It should be a null-terminated string. 
  * @return     0 on success, otherwise a negative error value
  * @retval     #WIFI_AWARE_ERROR_NONE
  */
@@ -341,6 +341,8 @@ int wifi_aware_subscribe_config_set_service_specific_info(wifi_aware_subscribe_c
  */
 int wifi_aware_subscribe_config_set_match_filter(wifi_aware_subscribe_config_h config, unsigned char *match_filter, size_t len);
 
+int wifi_aware_subscribe_config_clear_all_match_filters(wifi_aware_subscribe_config_h config);
+
 /**
  * @brief 
  * @since_tizen 6.0
@@ -488,18 +490,19 @@ int wifi_aware_subscribe(wifi_aware_h wifi_aware, wifi_aware_subscribe_config_h
 typedef void(*wifi_aware_discovery_result_cb)(
                unsigned int subscribe_id, wifi_aware_peer_h peer,
                unsigned char *service_specific_info, size_t service_specific_info_len,
-               unsigned char *match_filter, size_t match_filter_len);
+               unsigned char *match_filter, size_t match_filter_len, void *user_data);
 
 /**
  * @brief
  * @since_tizen 6.0
  * @param[in] wifi_aware
  * @param[in] callback
+ * @param[in] user_data
  * @return     0 on success, otherwise a negative error value
  * @retval     #WIFI_AWARE_ERROR_NONE
  */
 int wifi_aware_set_discovery_result_cb(wifi_aware_h wifi_aware,
-               wifi_aware_discovery_result_cb callback);
+               wifi_aware_discovery_result_cb callback, void *user_data);
 
 /**
  * @brief
index 288b3a8..e91fafc 100644 (file)
@@ -26,7 +26,6 @@ SET(WIFI_AWARE_SOURCES
     ${WIFI_AWARE_PATH}/wifi-aware-config.c
     ${WIFI_AWARE_PATH}/wifi-aware-enable.c
     ${WIFI_AWARE_PATH}/wifi-aware-gdbus.c
-       ${WIFI_AWARE_PATH}/wifi-aware-gdbus-signal-adapter.c
     ${WIFI_AWARE_PATH}/wifi-aware-peer.c
     ${WIFI_AWARE_PATH}/wifi-aware-publish.c
     ${WIFI_AWARE_PATH}/wifi-aware-private.c
index 628847b..785e537 100644 (file)
@@ -43,38 +43,12 @@ extern "C" {
                g_free(parameters_debug_str);\
        } while (0)
 
-typedef enum {
-       WIFI_AWARE_GDBUS_SIGNAL,
-
-       WIFI_AWARE_GDBUS_SIGNAL_MAX,
-} wifi_aware_gdbus_signal_e;
-
-typedef void (*wifi_aware_gdbus_signal_callback)(const gchar *key,
-               GVariant *value,
-               gpointer user_data);
-
-int wifi_aware_gdbus_signal_adapter_create();
-void wifi_aware_gdbus_signal_adapter_set_cb(
-               wifi_aware_gdbus_signal_e type,
-               wifi_aware_gdbus_signal_callback cb,
-               gpointer user_data);
-void wifi_aware_gdbus_signal_adapter_invoke_cb(const gchar *key,
-               GVariant *value,
-               wifi_aware_gdbus_signal_e type);
-
-int wifi_aware_gdbus_signal_adapter_destroy();
-
-void wifi_aware_gdbus_unsubscribe_signal(guint subscribe_id);
-
-GVariant *wifi_aware_dbus_method_call_sync(const char *interface_name,
-               const char *method,
-               GVariant *params,
-               GError **error);
-
 
 int wifi_aware_gdbus_init();
 int wifi_aware_gdbus_deinit();
 
+void wifi_aware_gdbus_register_signal();
+
 int wifi_aware_gdbus_enable(wifi_aware_h wifi_aware,
                wifi_aware_enable_request_s *req, GAsyncReadyCallback cb);
 int wifi_aware_gdbus_publish(wifi_aware_h wifi_aware, int client_id,
index 597c60c..c661038 100644 (file)
@@ -23,6 +23,8 @@
 extern "C" {
 #endif
 
+int wifi_aware_peer_create(wifi_aware_peer_h *peer, unsigned int peer_id);
+
 #ifdef __cplusplus
 }
 #endif
index ee06b84..41b7726 100644 (file)
@@ -18,6 +18,7 @@
 #define __TIZEN_NET_WIFI_AWARE_PRIAVTE_H__
 
 #include <tizen.h>
+#include <gio/gio.h>
 
 #include "wifi-aware.h"
 #include "wifi-aware-log.h"
@@ -26,6 +27,9 @@
 extern "C" {
 #endif
 
+// TODO
+#define WIFI_AWARE_HANDLE_LOCK
+#define WIFI_AWARE_HANDLE_UNLOCK
 
 const char *_wifi_aware_convert_error_type_to_string(wifi_aware_error_e err);
 bool _wifi_aware_handle_is_valid(wifi_aware_h wifi_aware);
@@ -44,6 +48,14 @@ int _wifi_aware_publish_request(wifi_aware_h wifi_aware,
 int _wifi_aware_subscribe_request(wifi_aware_h wifi_aware,
                wifi_aware_subscribe_config_h config);
 
+void _set_discovery_result_cb(wifi_aware_h wifi_aware,
+               wifi_aware_discovery_result_cb callback, void *user_data);
+
+void _mac_address_changed(GDBusConnection *connection,
+               const gchar *object_path, GVariant *parameters);
+void _service_discovered(GDBusConnection *connection,
+               const gchar *object_path, GVariant *parameters);
+
 
 #ifdef __cplusplus
 }
diff --git a/src/wifi-aware-gdbus-signal-adapter.c b/src/wifi-aware-gdbus-signal-adapter.c
deleted file mode 100644 (file)
index eb278f0..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Intelligent Network Monitoring(WIFI_AWARE)
- *
- * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-
-/*****************************************************************************
- *  Standard headers
- *****************************************************************************/
-#include <glib.h>
-#include <gio/gio.h>
-/*****************************************************************************
- *  System headers
- *****************************************************************************/
-
-/*****************************************************************************
- *  Wi-Fi Aware headers
- *****************************************************************************/
-#include "wifi-aware-log.h"
-#include "wifi-aware.h"
-#include "wifi-aware-utils.h"
-#include "wifi-aware-gdbus.h"
-/*****************************************************************************
- *  Macros and Typedefs
- *****************************************************************************/
-
-typedef struct {
-       guint signal_sub_id;
-       wifi_aware_gdbus_signal_callback cbs[WIFI_AWARE_GDBUS_SIGNAL_MAX];
-       void *cbs_user_data[WIFI_AWARE_GDBUS_SIGNAL_MAX];
-} wifi_aware_gdbus_signal_adapter_s;
-
-/*****************************************************************************
- *  Global Variables
- *****************************************************************************/
-
-static wifi_aware_gdbus_signal_adapter_s *g_gdbus_signal_adapter = NULL;
-
-/*****************************************************************************
- *  Local Functions Definition
- *****************************************************************************/
-
-int wifi_aware_gdbus_signal_adapter_create()
-{
-
-       if (g_gdbus_signal_adapter) {
-               WIFI_AWARE_LOGI("DBus signal adapter is already created");
-               return WIFI_AWARE_ERROR_OPERATION_FAILED;
-       }
-
-       g_gdbus_signal_adapter = g_try_malloc0(sizeof(wifi_aware_gdbus_signal_adapter_s));
-       if (!g_gdbus_signal_adapter) {
-               WIFI_AWARE_LOGI("Failed to create DBus signal adapter");
-               return WIFI_AWARE_ERROR_OUT_OF_MEMORY;
-       }
-
-       return WIFI_AWARE_ERROR_NONE;
-}
-
-void wifi_aware_gdbus_signal_adapter_set_cb(
-               wifi_aware_gdbus_signal_e type,
-               wifi_aware_gdbus_signal_callback cb,
-               gpointer user_data)
-{
-       if (!g_gdbus_signal_adapter || !cb)
-               return;
-
-       g_gdbus_signal_adapter->cbs[type] = cb;
-       g_gdbus_signal_adapter->cbs_user_data[type] = user_data;
-
-       return;
-}
-
-void wifi_aware_gdbus_signal_adapter_invoke_cb(const gchar *key,
-               GVariant *value,
-               wifi_aware_gdbus_signal_e type)
-{
-       if (!g_gdbus_signal_adapter || !(g_gdbus_signal_adapter->cbs[type])) {
-               WIFI_AWARE_LOGI("DBus signal adapter is not created/assigned yet");
-               return;
-       }
-
-       g_gdbus_signal_adapter->cbs[type](key,
-                       value,
-                       g_gdbus_signal_adapter->cbs_user_data[type]);
-
-       return;
-}
-
-int wifi_aware_gdbus_signal_adapter_destroy()
-{
-       if (!g_gdbus_signal_adapter) {
-               WIFI_AWARE_LOGI("DBus signal adapter is not created yet");
-               return WIFI_AWARE_ERROR_OPERATION_FAILED;
-       }
-
-       g_free(g_gdbus_signal_adapter);
-       g_gdbus_signal_adapter = NULL;
-
-       return 0;
-}
index 8925d0a..d0dc72d 100644 (file)
 
 #include "wifi-aware-log.h"
 #include "wifi-aware.h"
+#include "wifi-aware-private.h"
 #include "wifi-aware-utils.h"
 #include "wifi-aware-gdbus.h"
 
 typedef struct {
        GDBusConnection *connection;
        GCancellable *cancellable;
+       guint signal_subscribe_id;
 } wifi_aware_gdbus_data;
 
-static wifi_aware_gdbus_data gdbus_data = {NULL, NULL};
-
+static wifi_aware_gdbus_data gdbus_data = {NULL, NULL, -1};
+
+static struct {
+    const char *interface;
+    const char *member;
+    void (*function) (GDBusConnection *connection,
+              const gchar *object_path,
+              GVariant *parameters);
+} wifi_aware_gdbus_signal_map[] = {
+        {
+                WIFI_AWARE_DISCOVERY_INTERFACE,
+                "MacAddressChanged",
+                _mac_address_changed
+        },
+        {
+                WIFI_AWARE_DISCOVERY_INTERFACE,
+                "ServiceDiscovered",
+                _service_discovered
+        },
+               {
+                       NULL,
+                       NULL,
+                       NULL
+               }
+};
 
 static int __wifi_aware_error_string_to_enum(const char *error)
 {
@@ -60,10 +85,49 @@ static int __wifi_aware_error_string_to_enum(const char *error)
         return WIFI_AWARE_ERROR_OPERATION_FAILED;
 }
 
-int wifi_aware_gdbus_init()
+static void __gdbus_signal_cb(GDBusConnection *connection,
+                    const gchar *sender, const gchar *object_path,
+                    const gchar *interface, const gchar *signal,
+                    GVariant *parameters, gpointer user_data)
+{
+    int i = 0;
+
+    WIFI_AWARE_LOGD("Signal Name [%s]", signal);
+    DBUS_DEBUG_VARIANT(parameters);
+
+    for (i = 0; wifi_aware_gdbus_signal_map[i].member != NULL; ++i) {
+        if (!g_strcmp0(signal, wifi_aware_gdbus_signal_map[i].member) &&
+            !g_strcmp0(interface, wifi_aware_gdbus_signal_map[i].interface) &&
+            wifi_aware_gdbus_signal_map[i].function != NULL) {
+            wifi_aware_gdbus_signal_map[i].function(connection, object_path, parameters);
+            break;
+        }   
+    } 
+}
+
+void wifi_aware_gdbus_register_signal()
+{
+       __WIFI_AWARE_FUNC_ENTER__;
+
+       gdbus_data.signal_subscribe_id = g_dbus_connection_signal_subscribe(
+                                                                               gdbus_data.connection,
+                                                                               WIFI_AWARE_INTERFACE,
+                                                                               NULL,
+                                                                               NULL,
+                                                                               NULL,
+                                                                               NULL,
+                                                                               G_DBUS_SIGNAL_FLAGS_NONE,
+                                                                               __gdbus_signal_cb,
+                                                                               NULL,
+                                                                               NULL);
+
+       WIFI_AWARE_LOGI("Signal subscribe ID %u", gdbus_data.signal_subscribe_id);
+       __WIFI_AWARE_FUNC_ENTER__;
+}
+
+int wifi_aware_gdbus_init(wifi_aware_h wifi_aware)
 {
        GError *error = NULL;
-       int ret;
 
        __WIFI_AWARE_FUNC_ENTER__;
        if (gdbus_data.connection != NULL) {
@@ -80,42 +144,27 @@ int wifi_aware_gdbus_init()
        }
        gdbus_data.cancellable = g_cancellable_new();
 
-       ret = wifi_aware_gdbus_signal_adapter_create();
-       if (ret != WIFI_AWARE_ERROR_NONE) {
-               WIFI_AWARE_LOGI("Failed to create adapter"); //LCOV_EXCL_LINE
-               g_object_unref(gdbus_data.connection);
-               gdbus_data.connection = NULL;
-               return -1;
-       }
-
-       /* TODO: subscribe signal */
-
        __WIFI_AWARE_FUNC_EXIT__;
-       return 0;
+       return WIFI_AWARE_ERROR_NONE;
 }
 
 int wifi_aware_gdbus_deinit()
 {
-       int ret;
-
        __WIFI_AWARE_FUNC_ENTER__;
+
        if (!gdbus_data.connection) {
-               WIFI_AWARE_LOGI("There's no gdbus connection"); //LCOV_EXCL_LINE
-               __WIFI_AWARE_FUNC_EXIT__; //LCOV_EXCL_LINE
-               return 0; //LCOV_EXCL_LINE
+               WIFI_AWARE_LOGI("There's no gdbus connection");
+               __WIFI_AWARE_FUNC_EXIT__;
+               return WIFI_AWARE_ERROR_OPERATION_FAILED;
        }
 
-       ret = wifi_aware_gdbus_signal_adapter_destroy();
-       if (!ret)
-               WIFI_AWARE_LOGI("Failed to destroy adapter"); //LCOV_EXCL_LINE
-
 
        /* TODO: unsubscribe signal */
 
        g_object_unref(gdbus_data.connection);
        gdbus_data.connection = NULL;
        __WIFI_AWARE_FUNC_EXIT__;
-       return 0;
+       return WIFI_AWARE_ERROR_NONE;
 }
 
 static int __wifi_aware_dbus_method_call_async(const char *interface_name,
index a81ca4f..bf7ee3e 100644 (file)
  *
  */
 
-/**
- * This file implements Wi-Fi Aware peer global.
- *
- * @file        wifi-aware-peer.c
- * @author      Jiung Yu (jiung.yu@samsung.com)
- */
-
-
-/*****************************************************************************
- *  Standard headers
- *****************************************************************************/
 #include <glib.h>
-/*****************************************************************************
- *  System headers
- *****************************************************************************/
 
-/*****************************************************************************
- *  Wi-Fi Aware headers
- *****************************************************************************/
 #include "wifi-aware.h"
 #include "wifi-aware-log.h"
 #include "wifi-aware-peer.h"
-/*****************************************************************************
- *  Macros and Typedefs
- *****************************************************************************/
-
-/*****************************************************************************
- *  Global Variables
- *****************************************************************************/
 
-/*****************************************************************************
- *  Local Functions Definition
- *****************************************************************************/
+int wifi_aware_peer_create(wifi_aware_peer_h *peer, unsigned int peer_id)
+{
+       // Check peer_id validation
+       return WIFI_AWARE_ERROR_NONE;
+}
index 36f1e88..ce43e78 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "wifi-aware-gdbus.h"
 #include "wifi-aware-log.h"
+#include "wifi-aware-peer.h"
 #include "wifi-aware-private.h"
 #include "wifi-aware-utils.h"
 
@@ -41,6 +42,9 @@ typedef struct {
        void *published_cb_data;
        wifi_aware_subscribed_cb subscribed_cb;
        void *subscribed_cb_data;
+
+       wifi_aware_discovery_result_cb discovered_cb;
+       void *discovered_cb_data;
 } wifi_aware_s;
 
 /**
@@ -64,6 +68,7 @@ enum {
 } nan_manager_error_e;
 
 static bool __is_init = false;
+static GList *__wifi_aware_handle_list = NULL;
 
 const char *_wifi_aware_convert_error_type_to_string(wifi_aware_error_e err)
 {
@@ -244,6 +249,10 @@ int _wifi_aware_handle_create(wifi_aware_h *wifi_aware)
                return WIFI_AWARE_ERROR_OUT_OF_MEMORY;
        }
 
+       WIFI_AWARE_HANDLE_LOCK;
+       __wifi_aware_handle_list = g_list_append(__wifi_aware_handle_list, wifi_aware);
+       WIFI_AWARE_HANDLE_UNLOCK;
+
        WIFI_AWARE_LOGI("Crate new handle [%p]", *wifi_aware);
        return WIFI_AWARE_ERROR_NONE;
 }
@@ -259,10 +268,7 @@ int _wifi_aware_init()
        ret = wifi_aware_gdbus_init();
        RET_VAL_IF(ret != WIFI_AWARE_ERROR_NONE, ret, "wifi_aware_gdbus_init() failed");
 
-       /*
-       ret = wifi_aware_gdbus_register_signal();
-       RET_VAL_IF_ERR(ret, ret, "wifi_aware_gdbus_register_signal() failed");
-       */
+       wifi_aware_gdbus_register_signal();
        __is_init = true;
 
        return WIFI_AWARE_ERROR_NONE;
@@ -276,7 +282,6 @@ void _add_enabled_callback(wifi_aware_h wifi_aware,
        aware->enabled_cb_data = user_data;
 }
 
-
 void _add_published_callback(wifi_aware_h wifi_aware,
                wifi_aware_published_cb callback, void *user_data)
 {
@@ -308,7 +313,8 @@ int _wifi_aware_publish_request(wifi_aware_h wifi_aware,
 {
        wifi_aware_s *aware = (wifi_aware_s *)wifi_aware;
        wifi_aware_publish_request_s *req = (wifi_aware_publish_request_s *)config;
-       return wifi_aware_gdbus_publish(wifi_aware, aware->client_id, req, __publish_request_reply);
+       return wifi_aware_gdbus_publish(wifi_aware, aware->client_id,
+                       req, __publish_request_reply);
 }
 
 int _wifi_aware_subscribe_request(wifi_aware_h wifi_aware,
@@ -316,5 +322,85 @@ int _wifi_aware_subscribe_request(wifi_aware_h wifi_aware,
 {
        wifi_aware_s *aware = (wifi_aware_s *)wifi_aware;
        wifi_aware_subscribe_request_s *req = (wifi_aware_subscribe_request_s *)config;
-       return wifi_aware_gdbus_subscribe(wifi_aware, aware->client_id, req, __subscribe_request_reply);
+       return wifi_aware_gdbus_subscribe(wifi_aware, aware->client_id,
+                       req, __subscribe_request_reply);
+}
+
+void _set_discovery_result_cb(wifi_aware_h wifi_aware,
+               wifi_aware_discovery_result_cb callback, void *user_data)
+{
+       __WIFI_AWARE_FUNC_ENTER__;
+       wifi_aware_s *aware = (wifi_aware_s *)wifi_aware;
+
+       aware->discovered_cb = callback;
+       aware->discovered_cb_data = user_data;
+}
+
+void _mac_address_changed(GDBusConnection *connection,
+               const gchar *object_path, GVariant *parameters)
+{
+       __WIFI_AWARE_FUNC_ENTER__;
+       WIFI_AWARE_LOGD("MAC Address is changed");
+}
+
+static void __parsing_service_discovered_event(GVariant *parameters,
+               unsigned int *sub_id, unsigned int *peer_id,
+               unsigned char *specific_info, size_t *specific_info_len,
+               unsigned char *match_filters, size_t *match_filters_len)
+{
+       gchar *info_value = NULL;
+       gchar *filter_value = NULL;
+
+       g_variant_get(parameters, "(uusqsq)", sub_id, peer_id,
+                       info_value, specific_info_len,
+                       filter_value, match_filters_len);
+
+       memcpy(specific_info, info_value, *specific_info_len);
+       memcpy(match_filters, filter_value, *match_filters_len);
+}
+
+void _service_discovered(GDBusConnection *connection,
+               const gchar *object_path, GVariant *parameters)
+{
+       __WIFI_AWARE_FUNC_ENTER__;
+
+       WIFI_AWARE_LOGD("NAN Service is discovered");
+
+       unsigned int sub_id = 0;
+       unsigned int peer_id = 0;
+       unsigned char *specific_info = NULL;
+       size_t specific_info_len = 0;
+       unsigned char *match_filters = NULL;
+       size_t match_filters_len = 0;
+
+       wifi_aware_h peer = NULL;
+       GList *list;
+
+       __parsing_service_discovered_event(parameters,
+                       &sub_id, &peer_id,
+                       specific_info, &specific_info_len,
+                       match_filters, &match_filters_len);
+
+       if (sub_id == 0) {
+               WIFI_AWARE_LOGE("Invalid subscribe ID");
+               return;
+       }
+
+       WIFI_AWARE_LOGD("Peer ID: %u", peer_id);
+       if (wifi_aware_peer_create(&peer, peer_id) != WIFI_AWARE_ERROR_NONE) {
+               WIFI_AWARE_LOGE("Fail to create peer");
+               return;
+       }
+
+       // TODO: Add peer list to wifi_aware_s
+
+       // TODO: Need to consider thread safety
+       for (list = __wifi_aware_handle_list; list; list = list->next) {
+               wifi_aware_s *aware = (wifi_aware_s *)list;
+               if (aware->discovered_cb)
+                       aware->discovered_cb(sub_id, peer,
+                                       specific_info, specific_info_len,
+                                       match_filters, match_filters_len,
+                                       aware->discovered_cb_data);
+       }
 }
index 4d491dc..b3b023a 100644 (file)
@@ -191,12 +191,13 @@ API int wifi_aware_subscribe(wifi_aware_h wifi_aware,
 }
 
 API int wifi_aware_set_discovery_result_cb(wifi_aware_h wifi_aware,
-               wifi_aware_discovery_result_cb callback)
+               wifi_aware_discovery_result_cb callback, void *user_data)
 {
        __WIFI_AWARE_FUNC_ENTER__;
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
        RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi_aware);
 
+       _set_discovery_result_cb(wifi_aware, callback, user_data);
        __WIFI_AWARE_FUNC_EXIT__;
        return WIFI_AWARE_ERROR_NONE;
 }
index 1cb293a..1f70346 100644 (file)
@@ -44,14 +44,14 @@ API int wifi_aware_initialize(wifi_aware_h *wifi_aware)
        RET_VAL_IF(wifi_aware == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER,
                        "parameter(wifi_aware) is NULL");
 
-       ret = _wifi_aware_init();
-       RET_VAL_IF(ret != WIFI_AWARE_ERROR_NONE, ret, "_wifi_aware_init failed [%s]",
-                       _wifi_aware_convert_error_type_to_string(ret));
-
        ret = _wifi_aware_handle_create(wifi_aware);
        RET_VAL_IF(ret != WIFI_AWARE_ERROR_NONE, ret, "_wifi_aware_handle_create failed [%s]",
                        _wifi_aware_convert_error_type_to_string(ret));
 
+       ret = _wifi_aware_init(wifi_aware);
+       RET_VAL_IF(ret != WIFI_AWARE_ERROR_NONE, ret, "_wifi_aware_init failed [%s]",
+                       _wifi_aware_convert_error_type_to_string(ret));
+
        __WIFI_AWARE_FUNC_EXIT__;
        return WIFI_AWARE_ERROR_NONE;
 }
@@ -84,6 +84,7 @@ API int wifi_aware_set_received_message_cb(wifi_aware_h wifi_aware,
 {
        __WIFI_AWARE_FUNC_ENTER__;
        CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+       RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi_aware);
 
        __WIFI_AWARE_FUNC_EXIT__;
        return WIFI_AWARE_ERROR_NONE;
index 76be80a..67c4308 100644 (file)
@@ -400,7 +400,7 @@ static void __subscribed_cb(wifi_aware_error_e error, unsigned int subscribe_id,
 
 static void __discovery_result_cb(unsigned int subscribe_id, wifi_aware_peer_h peer,
                unsigned char *service_specific_info, size_t service_specific_info_len,
-               unsigned char *match_filter, size_t match_filter_len)
+               unsigned char *match_filter, size_t match_filter_len, void *user_data)
 {
        printf("Find A Wi-Fi Aware Peer\n");
        printf("Subscribe ID: %u\n", subscribe_id);
@@ -452,7 +452,7 @@ void test_subscribe()
        RET_IF_LOOP_IS_NULL();
        RET_IF_HANDLE_IS_NULL();
 
-       ret = wifi_aware_set_discovery_result_cb(g_wifi_aware_handle, __discovery_result_cb);
+       ret = wifi_aware_set_discovery_result_cb(g_wifi_aware_handle, __discovery_result_cb, NULL);
        __print_result(ret, "wifi_aware_set_discovery_result_cb");
 
        ret = wifi_aware_subscribe_config_create(&config);