60 lines
1.7 KiB
C
60 lines
1.7 KiB
C
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
|
|
/*
|
|
* lsquic_frab_list.h -- List of buffer for simple reading and writing
|
|
*
|
|
* Useful for buffering data that cannot be packetized immediately.
|
|
*/
|
|
|
|
#ifndef LSQUIC_FRAB_LIST_H
|
|
#define LSQUIC_FRAB_LIST_H 1
|
|
|
|
struct frame_buf
|
|
{
|
|
TAILQ_ENTRY(frame_buf) frab_next;
|
|
unsigned short frab_size,
|
|
frab_off,
|
|
frab_buf_size; /* Total bytes in frab_buf */
|
|
unsigned char frab_buf[0];
|
|
};
|
|
|
|
#define frab_left_to_read(f) ((f)->frab_size - (f)->frab_off)
|
|
#define frab_left_to_write(f) ((f)->frab_buf_size - \
|
|
(unsigned short) sizeof(*(f)) - (f)->frab_size)
|
|
#define frab_write_to(f) ((f)->frab_buf + (f)->frab_size)
|
|
|
|
TAILQ_HEAD(frame_buf_head, frame_buf);
|
|
|
|
struct frab_list
|
|
{
|
|
struct frame_buf_head fl_frabs;
|
|
void * (*fl_alloc)(void *alloc_ctx, size_t size);
|
|
void (*fl_free)(void *alloc_ctx, void *obj);
|
|
void *fl_alloc_ctx;
|
|
size_t fl_size; /* Size of payload in frab_list */
|
|
unsigned short fl_buf_size; /* Size of frame_buf */
|
|
};
|
|
|
|
void
|
|
lsquic_frab_list_init (struct frab_list *, unsigned short buf_size,
|
|
void * (*fl_alloc)(void *alloc_ctx, size_t size),
|
|
void (*fl_free)(void *alloc_ctx, void *obj), void *fl_alloc_ctx);
|
|
|
|
void
|
|
lsquic_frab_list_cleanup (struct frab_list *);
|
|
|
|
int
|
|
lsquic_frab_list_write (struct frab_list *, const void *, size_t);
|
|
|
|
size_t
|
|
lsquic_frab_list_size (void *);
|
|
|
|
size_t
|
|
lsquic_frab_list_read (void *, void *, size_t);
|
|
|
|
#define lsquic_frab_list_empty(fral) TAILQ_EMPTY(&(fral)->fl_frabs)
|
|
|
|
size_t
|
|
lsquic_frab_list_mem_used (const struct frab_list *);
|
|
|
|
#endif
|