Annotation of embedaddon/lighttpd/src/chunk.h, revision 1.1.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>