Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 1 | #ifndef _NGX_HTTP_H_INCLUDED_ |
| 2 | #define _NGX_HTTP_H_INCLUDED_ |
| 3 | |
| 4 | |
| 5 | #include <ngx_config.h> |
Igor Sysoev | c181784 | 2002-12-27 16:22:50 +0000 | [diff] [blame] | 6 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 7 | #include <ngx_types.h> |
Igor Sysoev | a0bb31f | 2002-12-02 16:09:40 +0000 | [diff] [blame] | 8 | #include <ngx_string.h> |
| 9 | #include <ngx_table.h> |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 10 | #include <ngx_hunk.h> |
Igor Sysoev | a58e3ca | 2002-09-02 14:48:24 +0000 | [diff] [blame] | 11 | #include <ngx_files.h> |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 12 | #include <ngx_connection.h> |
Igor Sysoev | c181784 | 2002-12-27 16:22:50 +0000 | [diff] [blame] | 13 | #include <ngx_conf_file.h> |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 14 | |
Igor Sysoev | fcce8d5 | 2003-01-23 18:47:54 +0000 | [diff] [blame] | 15 | /* STUB */ |
| 16 | #include <ngx_event_timer.h> |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 17 | |
Igor Sysoev | 6a644c6 | 2003-03-04 06:33:48 +0000 | [diff] [blame] | 18 | #define NGX_HTTP_VERSION_9 9 |
Igor Sysoev | b086905 | 2002-12-10 18:05:12 +0000 | [diff] [blame] | 19 | #define NGX_HTTP_VERSION_10 1000 |
Igor Sysoev | 6a644c6 | 2003-03-04 06:33:48 +0000 | [diff] [blame] | 20 | #define NGX_HTTP_VERSION_11 1001 |
Igor Sysoev | b086905 | 2002-12-10 18:05:12 +0000 | [diff] [blame] | 21 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 22 | #define NGX_HTTP_GET 1 |
| 23 | #define NGX_HTTP_HEAD 2 |
| 24 | #define NGX_HTTP_POST 3 |
| 25 | |
| 26 | #define NGX_HTTP_CONN_CLOSE 0 |
| 27 | #define NGX_HTTP_CONN_KEEP_ALIVE 1 |
| 28 | |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 29 | |
Igor Sysoev | a09f08d | 2003-04-25 14:43:13 +0000 | [diff] [blame] | 30 | #define NGX_HTTP_PARSE_HEADER_DONE 1 |
| 31 | #define NGX_HTTP_PARSE_INVALID_METHOD 10 |
| 32 | #define NGX_HTTP_PARSE_INVALID_REQUEST 11 |
| 33 | #define NGX_HTTP_PARSE_TOO_LONG_URI 12 |
| 34 | #define NGX_HTTP_PARSE_INVALID_HEAD 13 |
| 35 | #define NGX_HTTP_PARSE_INVALID_HEADER 14 |
| 36 | #define NGX_HTTP_PARSE_TOO_LONG_HEADER 15 |
| 37 | #define NGX_HTTP_PARSE_NO_HOST_HEADER 16 |
| 38 | #define NGX_HTTP_PARSE_INVALID_CL_HEADER 17 |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 39 | |
Igor Sysoev | e0af1b8 | 2002-08-16 15:27:03 +0000 | [diff] [blame] | 40 | |
| 41 | #define NGX_HTTP_OK 200 |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 42 | |
Igor Sysoev | a58e3ca | 2002-09-02 14:48:24 +0000 | [diff] [blame] | 43 | #define NGX_HTTP_SPECIAL_RESPONSE 300 |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 44 | #define NGX_HTTP_MOVED_PERMANENTLY 301 |
| 45 | #define NGX_HTTP_MOVED_TEMPORARILY 302 |
| 46 | #define NGX_HTTP_NOT_MODIFIED 304 |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 47 | |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 48 | #define NGX_HTTP_BAD_REQUEST 400 |
Igor Sysoev | b262063 | 2003-01-10 06:09:20 +0000 | [diff] [blame] | 49 | #define NGX_HTTP_FORBIDDEN 403 |
Igor Sysoev | e0af1b8 | 2002-08-16 15:27:03 +0000 | [diff] [blame] | 50 | #define NGX_HTTP_NOT_FOUND 404 |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 51 | #define NGX_HTTP_REQUEST_TIME_OUT 408 |
Igor Sysoev | 1af7c82 | 2002-09-13 14:47:42 +0000 | [diff] [blame] | 52 | #define NGX_HTTP_REQUEST_URI_TOO_LARGE 414 |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 53 | |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 54 | #define NGX_HTTP_INTERNAL_SERVER_ERROR 500 |
Igor Sysoev | b738757 | 2003-03-11 20:38:13 +0000 | [diff] [blame] | 55 | #define NGX_HTTP_NOT_IMPLEMENTED 501 |
| 56 | #define NGX_HTTP_BAD_GATEWAY 502 |
| 57 | #define NGX_HTTP_SERVICE_UNAVAILABLE 503 |
| 58 | #define NGX_HTTP_GATEWAY_TIME_OUT 504 |
| 59 | |
Igor Sysoev | e0af1b8 | 2002-08-16 15:27:03 +0000 | [diff] [blame] | 60 | |
| 61 | |
| 62 | #define NGX_HTTP_STATIC_HANDLER 0 |
| 63 | #define NGX_HTTP_DIRECTORY_HANDLER 1 |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 64 | |
| 65 | |
Igor Sysoev | e0af1b8 | 2002-08-16 15:27:03 +0000 | [diff] [blame] | 66 | typedef struct { |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 67 | ngx_str_t name; |
| 68 | int offset; |
Igor Sysoev | a0bb31f | 2002-12-02 16:09:40 +0000 | [diff] [blame] | 69 | } ngx_http_header_t; |
| 70 | |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 71 | |
Igor Sysoev | a0bb31f | 2002-12-02 16:09:40 +0000 | [diff] [blame] | 72 | typedef struct { |
Igor Sysoev | 7300977 | 2003-02-06 17:21:13 +0000 | [diff] [blame] | 73 | size_t host_name_len; |
Igor Sysoev | a09f08d | 2003-04-25 14:43:13 +0000 | [diff] [blame] | 74 | ssize_t content_length_n; |
Igor Sysoev | a19a85e | 2003-01-28 15:56:37 +0000 | [diff] [blame] | 75 | |
Igor Sysoev | a0bb31f | 2002-12-02 16:09:40 +0000 | [diff] [blame] | 76 | ngx_table_elt_t *host; |
| 77 | ngx_table_elt_t *connection; |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 78 | ngx_table_elt_t *if_modified_since; |
Igor Sysoev | a09f08d | 2003-04-25 14:43:13 +0000 | [diff] [blame] | 79 | ngx_table_elt_t *content_length; |
Igor Sysoev | a0bb31f | 2002-12-02 16:09:40 +0000 | [diff] [blame] | 80 | ngx_table_elt_t *accept_encoding; |
| 81 | |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 82 | ngx_table_elt_t *user_agent; |
| 83 | |
Igor Sysoev | a0bb31f | 2002-12-02 16:09:40 +0000 | [diff] [blame] | 84 | ngx_table_t *headers; |
| 85 | } ngx_http_headers_in_t; |
| 86 | |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 87 | |
Igor Sysoev | a0bb31f | 2002-12-02 16:09:40 +0000 | [diff] [blame] | 88 | typedef struct { |
Igor Sysoev | 1d8d9ee | 2003-04-28 15:06:39 +0000 | [diff] [blame] | 89 | ngx_chain_t chain[4]; |
| 90 | ngx_hunk_t *header_out; |
| 91 | ngx_hunk_t *hunk; |
| 92 | ngx_hunk_t *file_hunk; |
| 93 | ngx_file_t temp_file; |
| 94 | ngx_path_t *temp_path; |
| 95 | off_t offset; |
| 96 | char *header_in_pos; |
| 97 | } ngx_http_request_body_t; |
| 98 | |
| 99 | |
| 100 | typedef struct { |
Igor Sysoev | b086905 | 2002-12-10 18:05:12 +0000 | [diff] [blame] | 101 | int status; |
| 102 | ngx_str_t status_line; |
| 103 | |
| 104 | ngx_table_elt_t *server; |
| 105 | ngx_table_elt_t *date; |
| 106 | ngx_table_elt_t *content_type; |
| 107 | ngx_table_elt_t *location; |
| 108 | ngx_table_elt_t *last_modified; |
| 109 | |
| 110 | ngx_table_t *headers; |
| 111 | |
| 112 | off_t content_length; |
| 113 | char *charset; |
| 114 | char *etag; |
| 115 | time_t date_time; |
| 116 | time_t last_modified_time; |
Igor Sysoev | 2b54238 | 2002-08-20 14:48:28 +0000 | [diff] [blame] | 117 | } ngx_http_headers_out_t; |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 118 | |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 119 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 120 | typedef struct ngx_http_request_s ngx_http_request_t; |
| 121 | |
| 122 | struct ngx_http_request_s { |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 123 | ngx_connection_t *connection; |
Igor Sysoev | b086905 | 2002-12-10 18:05:12 +0000 | [diff] [blame] | 124 | |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 125 | void **ctx; |
| 126 | void **srv_conf; |
| 127 | void **loc_conf; |
Igor Sysoev | 96f8377 | 2002-09-07 10:14:25 +0000 | [diff] [blame] | 128 | |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 129 | ngx_file_t file; |
| 130 | |
Igor Sysoev | 1d8d9ee | 2003-04-28 15:06:39 +0000 | [diff] [blame] | 131 | ngx_pool_t *pool; |
| 132 | ngx_hunk_t *header_in; |
| 133 | ngx_http_request_body_t *request_body; |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 134 | |
Igor Sysoev | 1d8d9ee | 2003-04-28 15:06:39 +0000 | [diff] [blame] | 135 | ngx_http_headers_in_t headers_in; |
| 136 | ngx_http_headers_out_t headers_out; |
Igor Sysoev | e0af1b8 | 2002-08-16 15:27:03 +0000 | [diff] [blame] | 137 | |
Igor Sysoev | e0af1b8 | 2002-08-16 15:27:03 +0000 | [diff] [blame] | 138 | int (*handler)(ngx_http_request_t *r); |
| 139 | |
Igor Sysoev | 3a40d48 | 2002-09-12 14:42:29 +0000 | [diff] [blame] | 140 | time_t lingering_time; |
| 141 | |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 142 | int method; |
| 143 | int http_version; |
| 144 | int http_major; |
| 145 | int http_minor; |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 146 | |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 147 | ngx_str_t request_line; |
| 148 | ngx_str_t uri; |
| 149 | ngx_str_t args; |
| 150 | ngx_str_t exten; |
| 151 | ngx_http_request_t *main; |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 152 | |
Igor Sysoev | 1b8b119 | 2003-01-29 17:02:48 +0000 | [diff] [blame] | 153 | u_int in_addr; |
Igor Sysoev | fe5cb6b | 2003-01-29 07:25:51 +0000 | [diff] [blame] | 154 | |
Igor Sysoev | 1b8b119 | 2003-01-29 17:02:48 +0000 | [diff] [blame] | 155 | int port; |
| 156 | ngx_str_t port_name; |
Igor Sysoev | 4e5e117 | 2002-08-22 15:24:03 +0000 | [diff] [blame] | 157 | |
Igor Sysoev | 1b8b119 | 2003-01-29 17:02:48 +0000 | [diff] [blame] | 158 | int filter; |
| 159 | |
Igor Sysoev | 1b8b119 | 2003-01-29 17:02:48 +0000 | [diff] [blame] | 160 | char *discarded_buffer; |
Igor Sysoev | a58e3ca | 2002-09-02 14:48:24 +0000 | [diff] [blame] | 161 | |
Igor Sysoev | b262063 | 2003-01-10 06:09:20 +0000 | [diff] [blame] | 162 | ngx_str_t path; |
Igor Sysoev | ad22e01 | 2003-01-15 07:02:27 +0000 | [diff] [blame] | 163 | int path_err; |
Igor Sysoev | b262063 | 2003-01-10 06:09:20 +0000 | [diff] [blame] | 164 | |
Igor Sysoev | e2a3154 | 2003-04-08 15:40:10 +0000 | [diff] [blame] | 165 | unsigned proxy:1; |
Igor Sysoev | fd67586 | 2003-04-11 16:01:14 +0000 | [diff] [blame] | 166 | unsigned cachable:1; |
Igor Sysoev | 3d062ad | 2003-03-05 06:37:42 +0000 | [diff] [blame] | 167 | unsigned pipeline:1; |
Igor Sysoev | 3a40d48 | 2002-09-12 14:42:29 +0000 | [diff] [blame] | 168 | unsigned keepalive:1; |
| 169 | unsigned lingering_close:1; |
| 170 | |
Igor Sysoev | 682bf8e | 2002-09-16 15:01:44 +0000 | [diff] [blame] | 171 | unsigned header_read:1; |
Igor Sysoev | 9b25d69 | 2003-01-26 21:08:14 +0000 | [diff] [blame] | 172 | unsigned header_timeout_set:1; |
Igor Sysoev | 1af7c82 | 2002-09-13 14:47:42 +0000 | [diff] [blame] | 173 | |
| 174 | unsigned logging:1; |
Igor Sysoev | 016b852 | 2002-08-29 16:59:54 +0000 | [diff] [blame] | 175 | |
Igor Sysoev | 2b54238 | 2002-08-20 14:48:28 +0000 | [diff] [blame] | 176 | unsigned header_only:1; |
Igor Sysoev | 2ba1ee0 | 2002-10-04 17:58:04 +0000 | [diff] [blame] | 177 | unsigned unusual_uri:1; /* URI is not started with '/' - "GET http://" */ |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 178 | unsigned complex_uri:1; /* URI with "/." or with "//" (WIN32) */ |
Igor Sysoev | b262063 | 2003-01-10 06:09:20 +0000 | [diff] [blame] | 179 | unsigned path_not_found:1; |
Igor Sysoev | 1e7ec9d | 2003-02-11 07:14:40 +0000 | [diff] [blame] | 180 | #ifdef NGX_EVENT |
| 181 | unsigned write_level_event:1; |
| 182 | #endif |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 183 | |
| 184 | int state; |
| 185 | char *uri_start; |
| 186 | char *uri_end; |
| 187 | char *uri_ext; |
| 188 | char *args_start; |
Igor Sysoev | 3d062ad | 2003-03-05 06:37:42 +0000 | [diff] [blame] | 189 | char *request_start; |
Igor Sysoev | 2ba1ee0 | 2002-10-04 17:58:04 +0000 | [diff] [blame] | 190 | char *request_end; |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 191 | char *header_name_start; |
| 192 | char *header_name_end; |
| 193 | char *header_start; |
| 194 | char *header_end; |
| 195 | #ifdef NGX_EVENT |
| 196 | int (*state_handler)(ngx_http_request_t *r); |
| 197 | #endif |
| 198 | }; |
| 199 | |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 200 | |
Igor Sysoev | 0ad17c0 | 2002-08-26 15:18:19 +0000 | [diff] [blame] | 201 | typedef struct { |
| 202 | char *action; |
| 203 | char *client; |
| 204 | char *url; |
| 205 | } ngx_http_log_ctx_t; |
| 206 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 207 | |
Igor Sysoev | b262063 | 2003-01-10 06:09:20 +0000 | [diff] [blame] | 208 | typedef int (*ngx_http_handler_pt)(ngx_http_request_t *r); |
| 209 | |
Igor Sysoev | 960ffa4 | 2002-12-26 07:24:21 +0000 | [diff] [blame] | 210 | typedef int (*ngx_http_output_header_filter_p)(ngx_http_request_t *r); |
| 211 | |
| 212 | typedef int (*ngx_http_output_body_filter_p) |
| 213 | (ngx_http_request_t *r, ngx_chain_t *chain); |
| 214 | |
| 215 | |
Igor Sysoev | 960ffa4 | 2002-12-26 07:24:21 +0000 | [diff] [blame] | 216 | #define ngx_http_get_module_ctx(r, module) r->ctx[module.index] |
Igor Sysoev | 96f8377 | 2002-09-07 10:14:25 +0000 | [diff] [blame] | 217 | |
Igor Sysoev | b738757 | 2003-03-11 20:38:13 +0000 | [diff] [blame] | 218 | #define ngx_http_create_ctx(r, cx, module, size, error) \ |
Igor Sysoev | e0268b9 | 2002-09-11 15:18:33 +0000 | [diff] [blame] | 219 | do { \ |
Igor Sysoev | b738757 | 2003-03-11 20:38:13 +0000 | [diff] [blame] | 220 | ngx_test_null(cx, ngx_pcalloc(r->pool, size), error); \ |
Igor Sysoev | 4e9393a | 2003-01-09 05:36:00 +0000 | [diff] [blame] | 221 | r->ctx[module.index] = cx; \ |
Igor Sysoev | e0268b9 | 2002-09-11 15:18:33 +0000 | [diff] [blame] | 222 | } while (0) |
| 223 | |
Igor Sysoev | 96f8377 | 2002-09-07 10:14:25 +0000 | [diff] [blame] | 224 | |
| 225 | |
| 226 | /* STUB */ |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 227 | #define NGX_INDEX "index.html" |
| 228 | |
| 229 | |
Igor Sysoev | a58e3ca | 2002-09-02 14:48:24 +0000 | [diff] [blame] | 230 | /* STUB */ |
| 231 | int ngx_http_init(ngx_pool_t *pool, ngx_log_t *log); |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 232 | /**/ |
Igor Sysoev | a58e3ca | 2002-09-02 14:48:24 +0000 | [diff] [blame] | 233 | |
Igor Sysoev | 6b863e3 | 2003-05-12 15:52:24 +0000 | [diff] [blame^] | 234 | void ngx_http_init_connection(ngx_connection_t *c); |
| 235 | int ngx_parse_http_request_line(ngx_http_request_t *r); |
| 236 | int ngx_parse_http_header_line(ngx_http_request_t *r, ngx_hunk_t *h); |
Igor Sysoev | 7300977 | 2003-02-06 17:21:13 +0000 | [diff] [blame] | 237 | int ngx_http_handler(ngx_http_request_t *r); |
| 238 | |
| 239 | |
Igor Sysoev | 1d8d9ee | 2003-04-28 15:06:39 +0000 | [diff] [blame] | 240 | int ngx_http_init_client_request_body(ngx_http_request_t *r, int size); |
| 241 | int ngx_http_read_client_request_body(ngx_http_request_t *r); |
| 242 | int ngx_http_init_client_request_body_chain(ngx_http_request_t *r); |
| 243 | void ngx_http_reinit_client_request_body_hunks(ngx_http_request_t *r); |
| 244 | |
| 245 | |
Igor Sysoev | 7300977 | 2003-02-06 17:21:13 +0000 | [diff] [blame] | 246 | int ngx_http_send_header(ngx_http_request_t *r); |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 247 | int ngx_http_special_response_handler(ngx_http_request_t *r, int error); |
Igor Sysoev | 7300977 | 2003-02-06 17:21:13 +0000 | [diff] [blame] | 248 | |
| 249 | |
| 250 | time_t ngx_http_parse_time(char *value, size_t len); |
| 251 | size_t ngx_http_get_time(char *buf, time_t t); |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 252 | |
| 253 | |
Igor Sysoev | 42feecb | 2002-12-15 06:25:09 +0000 | [diff] [blame] | 254 | int ngx_http_discard_body(ngx_http_request_t *r); |
| 255 | |
| 256 | |
Igor Sysoev | 2a2d2b5 | 2003-01-30 18:21:39 +0000 | [diff] [blame] | 257 | |
| 258 | |
Igor Sysoev | 4e9393a | 2003-01-09 05:36:00 +0000 | [diff] [blame] | 259 | extern int ngx_max_module; |
| 260 | extern ngx_array_t ngx_http_servers; |
Igor Sysoev | e0268b9 | 2002-09-11 15:18:33 +0000 | [diff] [blame] | 261 | |
Igor Sysoev | 4e9393a | 2003-01-09 05:36:00 +0000 | [diff] [blame] | 262 | |
| 263 | extern int ngx_http_post_accept_timeout; |
| 264 | extern int ngx_http_connection_pool_size; |
| 265 | extern int ngx_http_request_pool_size; |
| 266 | extern int ngx_http_client_header_timeout; |
| 267 | extern int ngx_http_client_header_buffer_size; |
Igor Sysoev | 6a644c6 | 2003-03-04 06:33:48 +0000 | [diff] [blame] | 268 | extern int ngx_http_large_client_header; |
Igor Sysoev | 4e9393a | 2003-01-09 05:36:00 +0000 | [diff] [blame] | 269 | extern int ngx_http_discarded_buffer_size; |
| 270 | |
Igor Sysoev | 6a644c6 | 2003-03-04 06:33:48 +0000 | [diff] [blame] | 271 | extern int ngx_http_url_in_error_log; |
Igor Sysoev | 4e9393a | 2003-01-09 05:36:00 +0000 | [diff] [blame] | 272 | |
Igor Sysoev | dc479b4 | 2003-03-20 16:09:44 +0000 | [diff] [blame] | 273 | extern ngx_array_t ngx_http_translate_handlers; |
Igor Sysoev | b262063 | 2003-01-10 06:09:20 +0000 | [diff] [blame] | 274 | extern ngx_array_t ngx_http_index_handlers; |
| 275 | |
Igor Sysoev | e2a3154 | 2003-04-08 15:40:10 +0000 | [diff] [blame] | 276 | extern int (*ngx_http_top_header_filter) (ngx_http_request_t *r); |
| 277 | extern int (*ngx_http_top_body_filter) (ngx_http_request_t *r, ngx_chain_t *ch); |
| 278 | |
Igor Sysoev | b262063 | 2003-01-10 06:09:20 +0000 | [diff] [blame] | 279 | |
Igor Sysoev | 7300977 | 2003-02-06 17:21:13 +0000 | [diff] [blame] | 280 | /* STUB */ |
| 281 | int ngx_http_log_handler(ngx_http_request_t *r); |
| 282 | /**/ |
| 283 | |
Igor Sysoev | e0268b9 | 2002-09-11 15:18:33 +0000 | [diff] [blame] | 284 | |
Igor Sysoev | 6de5c2c | 2002-08-06 16:39:45 +0000 | [diff] [blame] | 285 | #endif /* _NGX_HTTP_H_INCLUDED_ */ |