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