1d4afb5ceSopenharmony_ci/*
2d4afb5ceSopenharmony_ci * lws-minimal-http-server-eventlib-foreign
3d4afb5ceSopenharmony_ci *
4d4afb5ceSopenharmony_ci * Written in 2010-2020 by Andy Green <andy@warmcat.com>
5d4afb5ceSopenharmony_ci *
6d4afb5ceSopenharmony_ci * This file is made available under the Creative Commons CC0 1.0
7d4afb5ceSopenharmony_ci * Universal Public Domain Dedication.
8d4afb5ceSopenharmony_ci *
9d4afb5ceSopenharmony_ci * The uloop specific code
10d4afb5ceSopenharmony_ci */
11d4afb5ceSopenharmony_ci
12d4afb5ceSopenharmony_ci#include <libwebsockets.h>
13d4afb5ceSopenharmony_ci
14d4afb5ceSopenharmony_ci#include <libubox/uloop.h>
15d4afb5ceSopenharmony_ci
16d4afb5ceSopenharmony_ci#include <string.h>
17d4afb5ceSopenharmony_ci#include <signal.h>
18d4afb5ceSopenharmony_ci
19d4afb5ceSopenharmony_ci#include "private.h"
20d4afb5ceSopenharmony_ci
21d4afb5ceSopenharmony_cistatic struct uloop_timeout timer_outer_uloop;
22d4afb5ceSopenharmony_ci
23d4afb5ceSopenharmony_cistatic void
24d4afb5ceSopenharmony_citimer_cb_uloop(struct uloop_timeout *ti)
25d4afb5ceSopenharmony_ci{
26d4afb5ceSopenharmony_ci	foreign_timer_service(NULL);
27d4afb5ceSopenharmony_ci	uloop_timeout_set(&timer_outer_uloop, 1090);
28d4afb5ceSopenharmony_ci}
29d4afb5ceSopenharmony_ci
30d4afb5ceSopenharmony_cistatic void
31d4afb5ceSopenharmony_ciforeign_event_loop_init_and_run_uloop(void)
32d4afb5ceSopenharmony_ci{
33d4afb5ceSopenharmony_ci	uloop_init();
34d4afb5ceSopenharmony_ci
35d4afb5ceSopenharmony_ci	timer_outer_uloop.cb = timer_cb_uloop;
36d4afb5ceSopenharmony_ci	uloop_timeout_add(&timer_outer_uloop);
37d4afb5ceSopenharmony_ci
38d4afb5ceSopenharmony_ci	uloop_timeout_set(&timer_outer_uloop, 1090);
39d4afb5ceSopenharmony_ci
40d4afb5ceSopenharmony_ci	uloop_run();
41d4afb5ceSopenharmony_ci}
42d4afb5ceSopenharmony_ci
43d4afb5ceSopenharmony_cistatic void
44d4afb5ceSopenharmony_ciforeign_event_loop_stop_uloop(void)
45d4afb5ceSopenharmony_ci{
46d4afb5ceSopenharmony_ci	uloop_end();
47d4afb5ceSopenharmony_ci}
48d4afb5ceSopenharmony_ci
49d4afb5ceSopenharmony_cistatic void
50d4afb5ceSopenharmony_ciforeign_event_loop_cleanup_uloop(void)
51d4afb5ceSopenharmony_ci{
52d4afb5ceSopenharmony_ci	uloop_timeout_cancel(&timer_outer_uloop);
53d4afb5ceSopenharmony_ci}
54d4afb5ceSopenharmony_ci
55d4afb5ceSopenharmony_ciconst struct ops ops_uloop = {
56d4afb5ceSopenharmony_ci	foreign_event_loop_init_and_run_uloop,
57d4afb5ceSopenharmony_ci	foreign_event_loop_stop_uloop,
58d4afb5ceSopenharmony_ci	foreign_event_loop_cleanup_uloop
59d4afb5ceSopenharmony_ci};
60