File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / lighttpd / src / chunk.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 10:32:48 2013 UTC (10 years, 8 months ago) by misho
Branches: lighttpd, MAIN
CVS tags: v1_4_35p0, v1_4_35, v1_4_33, HEAD
1.4.33

    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>