summaryrefslogtreecommitdiff
path: root/ytdlsb-tasks.h
blob: 86d3070c0a1cc4e77bc660d083b73ac0f34f5128 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <poll.h>
#include <time.h>
#include <curl/curl.h>
#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);