Annotation of embedaddon/lighttpd/src/chunk.h, revision 1.1
1.1 ! misho 1: #ifndef _CHUNK_H_
! 2: #define _CHUNK_H_
! 3:
! 4: #include "buffer.h"
! 5: #include "array.h"
! 6: #include "sys-mmap.h"
! 7:
! 8: typedef struct chunk {
! 9: enum { UNUSED_CHUNK, MEM_CHUNK, FILE_CHUNK } type;
! 10:
! 11: buffer *mem; /* either the storage of the mem-chunk or the read-ahead buffer */
! 12:
! 13: struct {
! 14: /* filechunk */
! 15: buffer *name; /* name of the file */
! 16: off_t start; /* starting offset in the file */
! 17: off_t length; /* octets to send from the starting offset */
! 18:
! 19: int fd;
! 20: struct {
! 21: char *start; /* the start pointer of the mmap'ed area */
! 22: size_t length; /* size of the mmap'ed area */
! 23: off_t offset; /* start is <n> octet away from the start of the file */
! 24: } mmap;
! 25:
! 26: int is_temp; /* file is temporary and will be deleted if on cleanup */
! 27: } file;
! 28:
! 29: off_t offset; /* octets sent from this chunk
! 30: the size of the chunk is either
! 31: - mem-chunk: mem->used - 1
! 32: - file-chunk: file.length
! 33: */
! 34:
! 35: struct chunk *next;
! 36: } chunk;
! 37:
! 38: typedef struct {
! 39: chunk *first;
! 40: chunk *last;
! 41:
! 42: chunk *unused;
! 43: size_t unused_chunks;
! 44:
! 45: array *tempdirs;
! 46:
! 47: off_t bytes_in, bytes_out;
! 48: } chunkqueue;
! 49:
! 50: chunkqueue *chunkqueue_init(void);
! 51: int chunkqueue_set_tempdirs(chunkqueue *c, array *tempdirs);
! 52: int chunkqueue_append_file(chunkqueue *c, buffer *fn, off_t offset, off_t len);
! 53: int chunkqueue_append_mem(chunkqueue *c, const char *mem, size_t len);
! 54: int chunkqueue_append_buffer(chunkqueue *c, buffer *mem);
! 55: int chunkqueue_append_buffer_weak(chunkqueue *c, buffer *mem);
! 56: int chunkqueue_prepend_buffer(chunkqueue *c, buffer *mem);
! 57:
! 58: buffer * chunkqueue_get_append_buffer(chunkqueue *c);
! 59: buffer * chunkqueue_get_prepend_buffer(chunkqueue *c);
! 60: chunk * chunkqueue_get_append_tempfile(chunkqueue *cq);
! 61:
! 62: int chunkqueue_remove_finished_chunks(chunkqueue *cq);
! 63:
! 64: off_t chunkqueue_length(chunkqueue *c);
! 65: off_t chunkqueue_written(chunkqueue *c);
! 66: void chunkqueue_free(chunkqueue *c);
! 67: void chunkqueue_reset(chunkqueue *c);
! 68:
! 69: int chunkqueue_is_empty(chunkqueue *c);
! 70:
! 71: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>