} wifi_aware_error_e;
typedef enum {
+ WIFI_AWARE_TERMINATION_REASON_UNKNOWN = 0,
+} wifi_aware_termination_reason_e;
+
+typedef enum {
WIFI_AWARE_SESSION_PUBLISH = 0,
WIFI_AWARE_SESSION_SUBSCRIBE,
} wifi_aware_session_type_e;
int wifi_aware_session_destroy(wifi_aware_session_h session);
/**
+ * @brief Callback to notify that the Wi-Fi Aware Session has been lost.
+ * @since_tizen 6.0
+ * @param[in] session
+ * @param[in] reason
+ * @param[in] user_data
+ */
+typedef(*wifi_aware_session_terminated_cb)(wifi_aware_session_h session,
+ wifi_aware_termination_reason_e reason, void *user_data);
+
+/**
+ * @brief
+ * @since_tizen 6.0
+ * @param[in] session
+ * @param[in] callback
+ * @param[in] user_data
+ * @return 0 on success, otherwise a negative error value
+ * @retval #WIFI_AWARE_ERROR_NONE
+ */
+int wifi_aware_session_set_terminated_cb(wifi_aware_session_h session,
+ wifi_aware_session_terminated_cb callback, void *user_data);
+
+/**
+ * @brief
+ * @since_tizen 6.0
+ * @param[in] session
+ * @return 0 on success, otherwise a negative error value
+ * @retval #WIFI_AWARE_ERROR_NONE
+ */
+int wifi_aware_session_unset_terminated_cb(wifi_aware_session_h session);
+
+/**
* @brief This callback delivers the result of a Publish request.
* @since_tizen 6.0
* @param[in] session
WIFI_AWARE_SECURITY_TYPE_PMK,
} wifi_aware_security_type_e;
-typedef enum {
- WIFI_AWARE_TERMINATION_REASON_UNKNOWN = 0,
-} wifi_aware_termination_reason_e;
-
/**
* @brief Create a handle to be used for Wi-Fi Aware Data Path
* @since_tizen 6.0
SERVICE_DISCOVERED_SIGNAL = 0,
MESSAGE_RECEIVED_SIGNAL,
DATA_PATH_OPEN_RESULT,
+ SESSION_TERMINATED_SIGNAL,
} wifi_aware_signal_e;
int wifi_aware_gdbus_init();
bool _wifi_aware_session_is_subscribe_type(wifi_aware_session_h session_handle);
int _wifi_aware_get_client_id();
+void _wifi_aware_session_set_terminated_cb(wifi_aware_session_h session,
+ wifi_aware_session_terminated_cb callback, void *user_data);
+void _wifi_aware_session_unset_terminated_cb(wifi_aware_session_h session);
+
int _wifi_aware_publish_handle_create(wifi_aware_publish_h *publish);
void _wifi_aware_publish_set_default_values(wifi_aware_publish_h publish);
void _wifi_aware_publish_set_ttl(wifi_aware_publish_h publish, unsigned short ttl);
WIFI_AWARE_DISCOVERY_INTERFACE,
"DataPathOpenResult",
},
+ [SESSION_TERMINATED_SIGNAL] = {
+ WIFI_AWARE_DISCOVERY_INTERFACE,
+ "SessionTerminated",
+ },
+
};
guint wifi_aware_gdbus_register_signal(wifi_aware_signal_e signal,
wifi_aware_message_received_cb received_cb;
void *received_cb_data;
guint received_signal_id;
+
+ wifi_aware_session_terminated_cb terminated_cb;
+ void *terminated_cb_data;
+ guint terminated_signal_id;
} wifi_aware_session_s;
typedef struct {
handle->received_cb_data);
}
+static void __wifi_aware_session_terminated_cb(wifi_aware_session_h session, int reason)
+{
+ RET_IF(session == NULL, "Session is NULL");
+ wifi_aware_session_s *handle = (wifi_aware_session_s *)session;
+
+ if (handle->terminated_cb)
+ handle->terminated_cb(session, reason, handle->terminated_cb_data);
+}
+
static wifi_aware_error_e __get_dbus_result(GObject *src, GAsyncResult *res, uint16_t *id)
{
GDBusConnection *conn = G_DBUS_CONNECTION(src);
g_free(session_handle);
}
+static void __parsing_session_terminated_event(GVariant *parameters, uint16_t *pub_sub_id, int reason)
+{
+ g_variant_get(parameters, "(qi)", pub_sub_id, reason);
+}
+
+static void __session_terminated_cb(GDBusConnection *connection,
+ const gchar *sender, const gchar *object_path,
+ const gchar *interface, const gchar *signal,
+ GVariant *parameters, gpointer user_data)
+{
+ WIFI_AWARE_LOGD("session is terminated.");
+
+ uint16_t pub_sub_id;
+ int reason;
+ wifi_aware_session_h session = (wifi_aware_session_h)user_data;
+
+ __parsing_session_terminated_event(parameters, &pub_sub_id, &reason);
+
+ uint16_t session_pub_sub_id = _wifi_aware_session_get_pub_sub_id(session);
+ if (pub_sub_id != session_pub_sub_id) {
+ WIFI_AWARE_LOGE("Invalid PubSub Id (%u:%u)", session_pub_sub_id, pub_sub_id);
+ return;
+ }
+ __session_set_pub_sub_id(session, 0);
+ __wifi_aware_session_terminated_cb(session, (wifi_aware_termination_reason_e)reason);
+}
+
+void _wifi_aware_session_set_terminated_cb(wifi_aware_session_h session,
+ wifi_aware_session_terminated_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->terminated_cb = callback;
+ handle->terminated_cb_data = user_data;
+ handle->terminated_signal_id =
+ wifi_aware_gdbus_register_signal(SESSION_TERMINATED_SIGNAL,
+ __session_terminated_cb, session);
+}
+
+void _wifi_aware_session_unset_terminated_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->terminated_cb = NULL;
+ handle->terminated_cb_data = NULL;
+ if (handle->terminated_signal_id > 0)
+ wifi_aware_gdbus_deregister_signal(handle->terminated_signal_id);
+ handle->terminated_signal_id = 0;
+}
+
int _wifi_aware_publish_handle_create(wifi_aware_publish_h *publish)
{
wifi_aware_publish_request_s *req =
return WIFI_AWARE_ERROR_NONE;
}
+API int wifi_aware_session_set_terminated_cb(wifi_aware_session_h session,
+ wifi_aware_session_terminated_cb callback, void *user_data)
+{
+ __WIFI_AWARE_FUNC_ENTER__;
+ CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+ RET_VAL_IF(!_wifi_aware_is_initialized(), WIFI_AWARE_ERROR_NOT_INITIALIZED, "Not initialized");
+ RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
+
+ _wifi_aware_session_set_terminated_cb(session, callback, user_data);
+
+ return WIFI_AWARE_ERROR_NONE;
+}
+
+API int wifi_aware_session_unset_terminated_cb(wifi_aware_session_h session)
+{
+ __WIFI_AWARE_FUNC_ENTER__;
+ CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+ RET_VAL_IF(!_wifi_aware_is_initialized(), WIFI_AWARE_ERROR_NOT_INITIALIZED, "Not initialized");
+ RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
+
+ _wifi_aware_session_unset_terminated_cb(session);
+
+ return WIFI_AWARE_ERROR_NONE;
+}
+
API int wifi_aware_publish_create(wifi_aware_publish_h *publish)
{
int ret = WIFI_AWARE_ERROR_NONE;