wifi_aware_send_message_result_cb send_cb;
void *send_cb_data;
- wifi_aware_received_message_cb received_cb;
+ wifi_aware_message_received_cb received_cb;
void *received_cb_data;
guint received_signal_id;
} wifi_aware_session_s;
static void __session_deregister_signals(wifi_aware_session_h session)
{
_wifi_aware_unset_service_discovered_cb(session);
+ _wifi_aware_unset_message_received_cb(session);
}
static void __enable_request_reply(GObject *src, GAsyncResult *res, gpointer user_data)
handle->discovered_cb_data);
}
+static void __wifi_aware_received_cb(wifi_aware_session_h session, wifi_aware_peer_h peer,
+ unsigned char *specific_info, size_t specific_info_len)
+{
+ RET_IF(session == NULL, "Session is NULL");
+ wifi_aware_session_s *handle = (wifi_aware_session_s *)session;
+
+ if (handle->received_cb)
+ handle->received_cb(session, peer,
+ specific_info, specific_info_len,
+ handle->received_cb_data);
+}
+
static wifi_aware_error_e __get_dbus_result(GObject *src, GAsyncResult *res, unsigned int *id)
{
GDBusConnection *conn = G_DBUS_CONNECTION(src);
wifi_aware_subscribe_h subscribe,
wifi_aware_subscribed_cb callback, void *user_data)
{
+ __WIFI_AWARE_FUNC_ENTER__;
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
RET_VAL_IF(subscribe == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_subscribe_h is NULL");
RET_VAL_IF(!__is_subscribe_session(session), WIFI_AWARE_ERROR_INVALID_OPERATION,
wifi_aware_subscribe_h subscribe,
wifi_aware_subscribed_cb callback, void *user_data)
{
+ __WIFI_AWARE_FUNC_ENTER__;
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
RET_VAL_IF(subscribe == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_subscribe_h is NULL");
RET_VAL_IF(!__is_subscribe_session(session), WIFI_AWARE_ERROR_INVALID_OPERATION,
static int __wifi_aware_cancel_publish_request(wifi_aware_session_h session)
{
+ __WIFI_AWARE_FUNC_ENTER__;
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
RET_VAL_IF(!__is_publish_session(session), WIFI_AWARE_ERROR_INVALID_OPERATION,
"This session is not for Publish");
static int __wifi_aware_cancel_subscribe_request(wifi_aware_session_h session)
{
+ __WIFI_AWARE_FUNC_ENTER__;
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
RET_VAL_IF(!__is_subscribe_session(session), WIFI_AWARE_ERROR_INVALID_OPERATION,
"This session is not for Subscribe");
int _wifi_aware_session_cancel(wifi_aware_session_h session)
{
+ __WIFI_AWARE_FUNC_ENTER__;
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
if (__is_publish_session(session)) {
WIFI_AWARE_LOGD("Stop publish session");
g_free(info_value);
}
-static int __handle_new_peer(wifi_aware_s *aware_handle, unsigned int peer_id, wifi_aware_peer_h *peer)
+static void __parsing_message_received_event(GVariant *parameters, unsigned int *peer_id,
+ unsigned char *specific_info, size_t *specific_info_len)
+{
+ gchar *info_value = NULL;
+
+ g_variant_get(parameters, "(usq)", peer_id,
+ &info_value, specific_info_len);
+
+ memcpy(specific_info, info_value, *specific_info_len);
+ g_free(info_value);
+}
+
+static int __get_peer_handle(wifi_aware_s *aware_handle, unsigned int peer_id, wifi_aware_peer_h *peer)
{
+ __WIFI_AWARE_FUNC_ENTER__;
int ret = WIFI_AWARE_ERROR_NONE;
- if (_wifi_aware_get_peer(aware_handle, peer_id) != NULL) {
+ *peer = _wifi_aware_get_peer(aware_handle, peer_id);
+ if (*peer != NULL) {
WIFI_AWARE_LOGI("Peer %u already exists", peer_id);
return WIFI_AWARE_ERROR_NONE;
}
GVariant *parameters, gpointer user_data)
{
__WIFI_AWARE_FUNC_ENTER__;
-
WIFI_AWARE_LOGD("NAN Service is discovered");
unsigned int sub_id = 0;
}
WIFI_AWARE_LOGD("subscribe ID: %u, Peer ID: %u", sub_id, peer_id);
- if (__handle_new_peer(__session_get_wifi_aware(session),
+ if (__get_peer_handle(__session_get_wifi_aware(session),
peer_id, &peer) != WIFI_AWARE_ERROR_NONE) {
WIFI_AWARE_LOGE("Invalid peer %u", peer_id);
return;
__wifi_aware_discovered_cb(session, peer, specific_info, specific_info_len);
}
+static void __message_received_cb(GDBusConnection *connection,
+ const gchar *sender, const gchar *object_path,
+ const gchar *interface, const gchar *signal,
+ GVariant *parameters, gpointer user_data)
+{
+ __WIFI_AWARE_FUNC_ENTER__;
+ WIFI_AWARE_LOGD("NAN Service is discovered");
+
+ unsigned int peer_id = 0;
+ unsigned char specific_info[WIFI_AWARE_MAX_SERVICE_SPECIFIC_INFO_LEN];
+ size_t specific_info_len = 0;
+
+ wifi_aware_session_h session = (wifi_aware_session_h)user_data;
+ wifi_aware_peer_h peer = NULL;
+
+ RET_IF(!__is_subscribe_session(session), "This session is not for Subscribe");
+
+ __parsing_message_received_event(parameters, &peer_id,
+ specific_info, &specific_info_len);
+
+ WIFI_AWARE_LOGD("Peer ID: %u", peer_id);
+ if (__get_peer_handle(__session_get_wifi_aware(session),
+ peer_id, &peer) != WIFI_AWARE_ERROR_NONE) {
+ WIFI_AWARE_LOGE("Invalid peer %u", peer_id);
+ return;
+ }
+
+ __wifi_aware_received_cb(session, peer, specific_info, specific_info_len);
+}
+
void _wifi_aware_set_service_discovered_cb(wifi_aware_session_h session,
wifi_aware_service_discovered_cb callback, void *user_data)
{
__WIFI_AWARE_FUNC_ENTER__;
+ RET_IF(session == NULL, "wifi_aware_session_h is NULL");
RET_IF(!__is_subscribe_session(session), "This session is not for Subscribe");
wifi_aware_session_s *handle = (wifi_aware_session_s *)session;
handle->discovered_cb = callback;
handle->discovered_cb_data = user_data;
handle->discovered_signal_id =
- wifi_aware_gdbus_register_signal(SERVICE_DISCOVERED_SIGNAL,
- __service_discovered_cb, session);
+ wifi_aware_gdbus_register_signal(SERVICE_DISCOVERED_SIGNAL, __service_discovered_cb, session);
}
void _wifi_aware_unset_service_discovered_cb(wifi_aware_session_h session)
{
__WIFI_AWARE_FUNC_ENTER__;
+ RET_IF(session == NULL, "wifi_aware_session_h is NULL");
RET_IF(!__is_subscribe_session(session), "This session is not for Subscribe");
wifi_aware_session_s *handle = (wifi_aware_session_s *)session;
handle->discovered_signal_id = 0;
}
+void _wifi_aware_set_message_received_cb(wifi_aware_session_h session,
+ wifi_aware_message_received_cb callback, void *user_data)
+{
+ __WIFI_AWARE_FUNC_ENTER__;
+ RET_IF(session == NULL, "wifi_aware_session_h is NULL");
+
+ wifi_aware_session_s *handle = (wifi_aware_session_s *)session;
+ handle->received_cb = callback;
+ handle->received_cb_data = user_data;
+ handle->received_signal_id =
+ wifi_aware_gdbus_register_signal(MESSAGE_RECEIVED_SIGNAL, __message_received_cb, session);
+}
+
+void _wifi_aware_unset_message_received_cb(wifi_aware_session_h session)
+{
+ __WIFI_AWARE_FUNC_ENTER__;
+ RET_IF(session == NULL, "wifi_aware_session_h is NULL");
+
+ wifi_aware_session_s *handle = (wifi_aware_session_s *)session;
+ handle->received_cb = NULL;
+ handle->received_cb_data = NULL;
+ if (handle->received_signal_id > 0)
+ wifi_aware_gdbus_deregister_signal(handle->received_signal_id);
+ handle->received_signal_id = 0;
+}
+
wifi_aware_message_s *__create_message_data(wifi_aware_session_h session,
wifi_aware_send_message_result_cb cb, void *user_data)
{
static void __send_message_reply(GObject *src, GAsyncResult *res, gpointer user_data)
{
+ __WIFI_AWARE_FUNC_ENTER__;
GDBusConnection *conn = NULL;
GError *dbus_error = NULL;
GVariant *reply = NULL;