upstream nginx-0.7.31
[nginx.git] / nginx / src / event / ngx_event_pipe.h
1
2 /*
3  * Copyright (C) Igor Sysoev
4  */
5
6
7 #ifndef _NGX_EVENT_PIPE_H_INCLUDED_
8 #define _NGX_EVENT_PIPE_H_INCLUDED_
9
10
11 #include <ngx_config.h>
12 #include <ngx_core.h>
13 #include <ngx_event.h>
14
15
16 typedef struct ngx_event_pipe_s  ngx_event_pipe_t;
17
18 typedef ngx_int_t (*ngx_event_pipe_input_filter_pt)(ngx_event_pipe_t *p,
19                                                     ngx_buf_t *buf);
20 typedef ngx_int_t (*ngx_event_pipe_output_filter_pt)(void *data,
21                                                      ngx_chain_t *chain);
22
23
24 struct ngx_event_pipe_s {
25     ngx_connection_t  *upstream;
26     ngx_connection_t  *downstream;
27
28     ngx_chain_t       *free_raw_bufs;
29     ngx_chain_t       *in;
30     ngx_chain_t      **last_in;
31
32     ngx_chain_t       *out;
33     ngx_chain_t      **last_out;
34
35     ngx_chain_t       *free;
36     ngx_chain_t       *busy;
37
38     /*
39      * the input filter i.e. that moves HTTP/1.1 chunks
40      * from the raw bufs to an incoming chain
41      */
42
43     ngx_event_pipe_input_filter_pt    input_filter;
44     void                             *input_ctx;
45
46     ngx_event_pipe_output_filter_pt   output_filter;
47     void                             *output_ctx;
48
49     unsigned           read:1;
50     unsigned           cacheable:1;
51     unsigned           single_buf:1;
52     unsigned           free_bufs:1;
53     unsigned           upstream_done:1;
54     unsigned           upstream_error:1;
55     unsigned           upstream_eof:1;
56     unsigned           upstream_blocked:1;
57     unsigned           downstream_done:1;
58     unsigned           downstream_error:1;
59     unsigned           cyclic_temp_file:1;
60
61     ngx_int_t          allocated;
62     ngx_bufs_t         bufs;
63     ngx_buf_tag_t      tag;
64
65     ssize_t            busy_size;
66
67     off_t              read_length;
68
69     off_t              max_temp_file_size;
70     ssize_t            temp_file_write_size;
71
72     ngx_msec_t         read_timeout;
73     ngx_msec_t         send_timeout;
74     ssize_t            send_lowat;
75
76     ngx_pool_t        *pool;
77     ngx_log_t         *log;
78
79     ngx_chain_t       *preread_bufs;
80     size_t             preread_size;
81     ngx_buf_t         *buf_to_file;
82
83     ngx_temp_file_t   *temp_file;
84
85     /* STUB */ int     num;
86 };
87
88
89 ngx_int_t ngx_event_pipe(ngx_event_pipe_t *p, ngx_int_t do_write);
90 ngx_int_t ngx_event_pipe_copy_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf);
91 ngx_int_t ngx_event_pipe_add_free_buf(ngx_event_pipe_t *p, ngx_buf_t *b);
92
93
94 #endif /* _NGX_EVENT_PIPE_H_INCLUDED_ */