#ifndef NONBLOCK_H #define NONBLOCK_H #include #include "fd.h" typedef struct buffer_s { fd_t *in_fd, *out_fd; list_t in_fd_list, out_fd_list; notifier_t readok, writeok, in_misc, out_misc; int offset, used, size, eof; int in_error, in_active, out_error, out_active; int chunk_size; char *buffer; void *arg; void (*notify_data)(struct buffer_s *this); void (*notify_full)(struct buffer_s *this); void (*notify_empty)(struct buffer_s *this); void (*notify_eof)(struct buffer_s *this); void (*notify_readerror)(struct buffer_s *this); void (*notify_writeerror)(struct buffer_s *this); void (*notify_finished)(struct buffer_s *this); } buffer_t; buffer_t *buffer_alloc(void); extern void buffer_init_incoming(buffer_t *buf, fd_t *fd, int size, void *arg); extern void buffer_init_outgoing(buffer_t *buf, fd_t *fd, int size, void *arg); extern void buffer_init_passthrough(buffer_t *buf, fd_t *in_fd, fd_t *out_fd, int size, void *arg); extern int buffer_extract_chars(buffer_t *buf, char *dst, int size); extern int buffer_append_chars(buffer_t *buf, char *src, int size); #endif