From c3f5553678546713d155eb379ecd33f2f34c4aeb Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Wed, 25 May 2016 18:15:40 -0400 Subject: initial --- include/uv_link.h | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 include/uv_link.h (limited to 'include/uv_link.h') diff --git a/include/uv_link.h b/include/uv_link.h new file mode 100644 index 0000000..2d2b744 --- /dev/null +++ b/include/uv_link.h @@ -0,0 +1,61 @@ +#ifndef INCLUDE_UV_LINK_H_ +#define INCLUDE_UV_LINK_H_ + +#include + +typedef struct uv_link_s uv_link_t; +typedef struct uv_link_source_s uv_link_source_t; + +typedef void (*uv_link_close_cb)(uv_link_t* link); +typedef void (*uv_link_alloc_cb)(uv_link_t* link, + size_t suggested_size, + uv_buf_t* buf); +typedef void (*uv_link_read_cb)(uv_link_t* link, + ssize_t nread, + const uv_buf_t* buf); +typedef void (*uv_link_write_cb)(uv_link_t* link, int status); +typedef void (*uv_link_shutdown_cb)(uv_link_t* link, int status); + +struct uv_link_s { + uv_link_t* parent; + uv_link_t* child; + + uv_link_alloc_cb alloc_cb; + uv_link_read_cb read_cb; + + /* Sort of virtual table */ + int (*read_start)(uv_link_t* link); + int (*read_stop)(uv_link_t* link); + + int (*write)(uv_link_t* link, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_stream_t* send_handle, + uv_link_write_cb cb); + int (*try_write)(uv_link_t* link, + const uv_buf_t bufs[], + unsigned int nbufs); + + int (*shutdown)(uv_link_t* link, uv_link_shutdown_cb cb); +}; + +struct uv_link_source_s { + uv_link_t link; + + uv_stream_t* stream; +}; + +UV_EXTERN int uv_link_init(uv_loop_t* loop, uv_link_t* link); +UV_EXTERN int uv_link_close(uv_link_t* link, uv_link_close_cb close_cb); + +UV_EXTERN int uv_link_chain(uv_link_t* from, uv_link_t* to); + +/* Source */ + +/* NOTE: uses `stream->data` field */ +UV_EXTERN int uv_link_source_init(uv_loop_t* loop, + uv_link_source_t* source, + uv_stream_t* stream); +UV_EXTERN int uv_link_source_destroy(uv_link_source_t* source); + +#endif /* INCLUDE_UV_LINK_H_ */ -- cgit 1.4.1-2-gfad0