From f95c36bee08956949cdf9e81bbb64f78cafb1f16 Mon Sep 17 00:00:00 2001 From: Cheoleun Moon Date: Tue, 21 Jan 2020 22:53:53 +0900 Subject: [PATCH] Add discovery_result_cb --- include/wifi-aware.h | 33 +++++----- src/CMakeLists.txt | 1 - src/include/wifi-aware-gdbus.h | 30 +-------- src/include/wifi-aware-peer.h | 2 + src/include/wifi-aware-private.h | 12 ++++ src/wifi-aware-gdbus-signal-adapter.c | 114 ---------------------------------- src/wifi-aware-gdbus.c | 99 +++++++++++++++++++++-------- src/wifi-aware-peer.c | 32 ++-------- src/wifi-aware-private.c | 100 ++++++++++++++++++++++++++--- src/wifi-aware-subscribe.c | 3 +- src/wifi-aware.c | 9 +-- test/wifi-aware-test.c | 4 +- 12 files changed, 215 insertions(+), 224 deletions(-) delete mode 100644 src/wifi-aware-gdbus-signal-adapter.c diff --git a/include/wifi-aware.h b/include/wifi-aware.h index 6bc5c00..a1f8330 100644 --- a/include/wifi-aware.h +++ b/include/wifi-aware.h @@ -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 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 288b3a8..e91fafc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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 diff --git a/src/include/wifi-aware-gdbus.h b/src/include/wifi-aware-gdbus.h index 628847b..785e537 100644 --- a/src/include/wifi-aware-gdbus.h +++ b/src/include/wifi-aware-gdbus.h @@ -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, diff --git a/src/include/wifi-aware-peer.h b/src/include/wifi-aware-peer.h index 597c60c..c661038 100644 --- a/src/include/wifi-aware-peer.h +++ b/src/include/wifi-aware-peer.h @@ -23,6 +23,8 @@ extern "C" { #endif +int wifi_aware_peer_create(wifi_aware_peer_h *peer, unsigned int peer_id); + #ifdef __cplusplus } #endif diff --git a/src/include/wifi-aware-private.h b/src/include/wifi-aware-private.h index ee06b84..41b7726 100644 --- a/src/include/wifi-aware-private.h +++ b/src/include/wifi-aware-private.h @@ -18,6 +18,7 @@ #define __TIZEN_NET_WIFI_AWARE_PRIAVTE_H__ #include +#include #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 index eb278f0..0000000 --- a/src/wifi-aware-gdbus-signal-adapter.c +++ /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 -#include -/***************************************************************************** - * 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; -} diff --git a/src/wifi-aware-gdbus.c b/src/wifi-aware-gdbus.c index 8925d0a..d0dc72d 100644 --- a/src/wifi-aware-gdbus.c +++ b/src/wifi-aware-gdbus.c @@ -27,16 +27,41 @@ #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, diff --git a/src/wifi-aware-peer.c b/src/wifi-aware-peer.c index a81ca4f..bf7ee3e 100644 --- a/src/wifi-aware-peer.c +++ b/src/wifi-aware-peer.c @@ -16,36 +16,14 @@ * */ -/** - * This file implements Wi-Fi Aware peer global. - * - * @file wifi-aware-peer.c - * @author Jiung Yu (jiung.yu@samsung.com) - */ - - -/***************************************************************************** - * Standard headers - *****************************************************************************/ #include -/***************************************************************************** - * 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; +} diff --git a/src/wifi-aware-private.c b/src/wifi-aware-private.c index 36f1e88..ce43e78 100644 --- a/src/wifi-aware-private.c +++ b/src/wifi-aware-private.c @@ -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); + } } diff --git a/src/wifi-aware-subscribe.c b/src/wifi-aware-subscribe.c index 4d491dc..b3b023a 100644 --- a/src/wifi-aware-subscribe.c +++ b/src/wifi-aware-subscribe.c @@ -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; } diff --git a/src/wifi-aware.c b/src/wifi-aware.c index 1cb293a..1f70346 100644 --- a/src/wifi-aware.c +++ b/src/wifi-aware.c @@ -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; diff --git a/test/wifi-aware-test.c b/test/wifi-aware-test.c index 76be80a..67c4308 100644 --- a/test/wifi-aware-test.c +++ b/test/wifi-aware-test.c @@ -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); -- 2.7.4