%bcond_without use_glib_event_loop
Name: capi-network-vine
Summary: An service discovery framework
-Version: 1.1.4
+Version: 1.1.5
Release: 0
Group: Network & Connectivity/API
License: Apache-2.0
VINE_LOGI("Succeeded to start GATT server.");
- // TODO
- //if (g_callbacks.opened_cb)
- // g_callbacks.opened_cb(VINE_DATA_PATH_ERROR_NONE, -1, gatt->user);
+ if (g_callbacks.opened_cb)
+ g_callbacks.opened_cb(VINE_DATA_PATH_ERROR_NONE, -1, gatt->user);
return VINE_DATA_PATH_ERROR_NONE;
ERR:
vine_event_handler handler, vine_event_free_handler free_func,
void *user_data);
+int vine_event_loop_add_idle_event(vine_event_queue_h event_queue, void *event_data,
+ vine_event_handler handler, vine_event_free_handler free_func,
+ void *user_data);
typedef struct {
int (*init)();
int (*add_event)(vine_event_queue_h event_queue, void *event_data,
vine_event_handler handler, vine_event_free_handler free_func,
void *user_data);
+ int (*add_idle_event)(vine_event_queue_h event_queue, void *event_data,
+ vine_event_handler handler, vine_event_free_handler free_func,
+ void *user_data);
} vine_event_loop_fn;
#define MAX_VINE_FDS 512
opened_event->result = result;
opened_event->port = port;
- vine_event_loop_add_event(dp->event_queue, opened_event,
+ vine_event_loop_add_idle_event(dp->event_queue, opened_event,
__invoke_opened_user_cb, free, dp);
}
return VINE_ERROR_NONE;
}
+// event-loop-epoll processes the events whenever idle time.
+// Therefore, this works the same with vine_event_loop_epoll_add_event().
+int vine_event_loop_epoll_add_idle_event(vine_event_queue_h event_queue, void *event_data,
+ vine_event_handler handler, vine_event_free_handler free_func,
+ void *user_data)
+{
+ return vine_event_loop_epoll_add_event(event_queue, event_data, handler, free_func, user_data);
+}
+
int vine_event_loop_epoll_process(vine_event_queue_h event_queue)
{
VINE_LOGD("Process a vine event. event_queue[%p]", event_queue);
.mod_io_handler = vine_event_loop_epoll_mod_io_handler,
.del_io_handler = vine_event_loop_epoll_del_io_handler,
.add_event = vine_event_loop_epoll_add_event,
+ .add_idle_event = vine_event_loop_epoll_add_idle_event,
};
#include "vine-utils.h"
typedef struct {
+ void *event_data;
+ vine_event_handler handler;
+ vine_event_free_handler free_func;
+ void *user_data;
+} vine_glib_idle_event_handler;
+
+typedef struct {
int fd;
vine_poll_handler handler;
void *user_data;
return VINE_ERROR_NONE;
}
+static gboolean _handle_idle_event(gpointer user_data)
+{
+ RET_VAL_IF(user_data == NULL, VINE_ERROR_INVALID_PARAMETER, "user_data is NULL");
+
+ vine_glib_idle_event_handler *idle_handler = (vine_glib_idle_event_handler *)user_data;
+ VINE_LOGD("event_data[%p]", idle_handler->event_data);
+
+ if (idle_handler->handler)
+ idle_handler->handler(idle_handler->event_data, idle_handler->user_data);
+
+ if (idle_handler->free_func)
+ idle_handler->free_func(idle_handler->event_data);
+
+ free(idle_handler);
+
+ return FALSE;
+}
+
+int vine_event_loop_glib_add_idle_event(vine_event_queue_h event_queue, void *event_data,
+ vine_event_handler handler, vine_event_free_handler free_func,
+ void *user_data)
+{
+ // Ignore event_queue
+
+ RET_VAL_IF(handler == NULL, VINE_ERROR_INVALID_PARAMETER, "handler is NULL");
+ VINE_LOGD("event_data[%p]", event_data);
+
+ vine_glib_idle_event_handler *idle_handler =
+ (vine_glib_idle_event_handler *) calloc(1, sizeof(vine_glib_idle_event_handler));
+ RET_VAL_IF(idle_handler == NULL, VINE_ERROR_INVALID_PARAMETER, "idle_handler is NULL");
+
+ idle_handler->event_data = event_data;
+ idle_handler->handler = handler;
+ idle_handler->free_func = free_func;
+ idle_handler->user_data = user_data;
+ g_idle_add(_handle_idle_event, idle_handler);
+
+ return VINE_ERROR_NONE;
+}
+
int vine_event_loop_glib_process(vine_event_queue_h event_queue)
{
return VINE_ERROR_NONE;
.mod_io_handler = vine_event_loop_glib_mod_io_handler,
.del_io_handler = vine_event_loop_glib_del_io_handler,
.add_event = vine_event_loop_glib_add_event,
+ .add_idle_event = vine_event_loop_glib_add_idle_event,
};
-#endif // USE_VINE_EVENT_LOOP_EXTERNAL_GLIB
\ No newline at end of file
+#endif // USE_VINE_EVENT_LOOP_EXTERNAL_GLIB
return __event_loop[__event_loop_type].add_event(event_queue, event_data, handler, free_func, user_data);
}
+int vine_event_loop_add_idle_event(vine_event_queue_h event_queue, void *event_data,
+ vine_event_handler handler, vine_event_free_handler free_func,
+ void *user_data)
+{
+ return __event_loop[__event_loop_type].add_idle_event(event_queue, event_data, handler, free_func, user_data);
+}
+
int vine_event_loop_process(vine_event_queue_h event_queue)
{
return __event_loop[__event_loop_type].process(event_queue);