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>