#include #include #include #include "ytdlsb-utils.h" typedef int ytdlsb_sock; #define YTDLSB_POLLIN POLLIN #define YTDLSB_POLLPRI POLLPRI #define YTDLSB_POLLOUT POLLOUT struct ytdlsb_pollfd{ ytdlsb_sock fd; short events; short revents; }; struct ytdlsb_task{ int (*process)(struct ytdlsb_task *); struct ytdlsb_pollfd *pollfd; size_t pollfd_num; struct timespec timeout; void *data; }; struct ytdlsb_tasks{ struct ytdlsb_task *tasks; size_t task_num; }; int ytdlsb_tasks_step(struct ytdlsb_tasks *tasks); int ytdlsb_task_timeout_ms(struct ytdlsb_task *task, int ms); int ytdlsb_task_timeout_ms_min(struct ytdlsb_task *task, int ms); int ytdlsb_task_timeout_unset(struct ytdlsb_task *task); int ytdlsb_task_event_init(struct ytdlsb_task *task, int (*cb)(void *), void *data); void ytdlsb_task_event_destroy(struct ytdlsb_task *task); int ytdlsb_task_event_wake(struct ytdlsb_task *task); int ytdlsb_task_fdto_from_curl( struct ytdlsb_task *task, size_t off, int overwrite_timeout, CURLM* cm);