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>