#ifndef __CHAINBUFFER_H__ #define __CHAINBUFFER_H__ #include #include #include typedef struct chain_buffer_node chain_buffer_node_t; typedef struct chain_buffer_s { chain_buffer_node_t *head; chain_buffer_node_t *tail; size_t total_len; size_t chunk_size; uint8_t *linear_cache; size_t linear_cap; } chain_buffer_t; void chain_buffer_init(chain_buffer_t *buf, size_t chunk_size); void chain_buffer_reset(chain_buffer_t *buf); size_t chain_buffer_len(const chain_buffer_t *buf); int chain_buffer_append(chain_buffer_t *buf, const void *data, size_t len); size_t chain_buffer_drain(chain_buffer_t *buf, size_t len); const uint8_t *chain_buffer_linearize(chain_buffer_t *buf, size_t *out_len); ssize_t chain_buffer_send_fd(chain_buffer_t *buf, int fd, int flags); #endif