Mercurial > hg > nginx-quic
comparison src/http/ngx_http_event.c @ 3:34a521b1a148
nginx-0.0.1-2002-08-20-18:48:28 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 20 Aug 2002 14:48:28 +0000 |
parents | ffffe1499bce |
children | 669801705ab1 |
comparison
equal
deleted
inserted
replaced
2:ffffe1499bce | 3:34a521b1a148 |
---|---|
1 | 1 |
2 #include <ngx_config.h> | 2 #include <ngx_config.h> |
3 #include <ngx_file.h> | |
3 #include <ngx_log.h> | 4 #include <ngx_log.h> |
4 #include <ngx_alloc.h> | 5 #include <ngx_alloc.h> |
5 #include <ngx_hunk.h> | 6 #include <ngx_hunk.h> |
6 #include <ngx_connection.h> | 7 #include <ngx_connection.h> |
7 | 8 |
23 static int ngx_process_http_request_header(ngx_http_request_t *r); | 24 static int ngx_process_http_request_header(ngx_http_request_t *r); |
24 | 25 |
25 static int ngx_process_http_request(ngx_http_request_t *r); | 26 static int ngx_process_http_request(ngx_http_request_t *r); |
26 | 27 |
27 static int ngx_http_close_request(ngx_event_t *ev); | 28 static int ngx_http_close_request(ngx_event_t *ev); |
29 | |
30 /* STUB */ | |
31 static int ngx_http_writer(ngx_event_t *ev); | |
28 | 32 |
29 /* | 33 /* |
30 returns | 34 returns |
31 -1 if error | 35 -1 if error |
32 0 need more data or EOF (filter is deleted) | 36 0 need more data or EOF (filter is deleted) |
60 } | 64 } |
61 | 65 |
62 int ngx_http_init_request(ngx_event_t *ev) | 66 int ngx_http_init_request(ngx_event_t *ev) |
63 { | 67 { |
64 ngx_connection_t *c = (ngx_connection_t *) ev->data; | 68 ngx_connection_t *c = (ngx_connection_t *) ev->data; |
69 ngx_http_server_t *srv = (ngx_http_server_t *) c->server; | |
65 ngx_http_request_t *r; | 70 ngx_http_request_t *r; |
66 | 71 |
67 ngx_log_debug(ev->log, "ngx_http_init_request: entered"); | 72 ngx_log_debug(ev->log, "ngx_http_init_request: entered"); |
68 | 73 |
69 ngx_test_null(c->pool, ngx_create_pool(16384, ev->log), -1); | 74 ngx_test_null(c->pool, ngx_create_pool(16384, ev->log), -1); |
70 ngx_test_null(r, ngx_pcalloc(c->pool, sizeof(ngx_http_request_t)), -1); | 75 ngx_test_null(r, ngx_pcalloc(c->pool, sizeof(ngx_http_request_t)), -1); |
71 | 76 |
72 c->data = r; | 77 c->data = r; |
73 r->connection = c; | 78 r->connection = c; |
79 r->server = srv; | |
74 | 80 |
75 ngx_test_null(r->pool, ngx_create_pool(16384, ev->log), -1); | 81 ngx_test_null(r->pool, ngx_create_pool(16384, ev->log), -1); |
76 ngx_test_null(r->buff, ngx_palloc(r->pool, sizeof(ngx_buff_t)), -1); | 82 ngx_test_null(r->buff, ngx_palloc(r->pool, sizeof(ngx_buff_t)), -1); |
77 ngx_test_null(r->buff->buff, | 83 ngx_test_null(r->buff->buff, ngx_palloc(r->pool, srv->buff_size), -1); |
78 ngx_pcalloc(r->pool, sizeof(c->server->buff_size)), -1); | |
79 | 84 |
80 r->buff->pos = r->buff->last = r->buff->buff; | 85 r->buff->pos = r->buff->last = r->buff->buff; |
81 r->buff->end = r->buff->buff + c->server->buff_size; | 86 r->buff->end = r->buff->buff + srv->buff_size; |
82 | 87 |
83 r->state_handler = ngx_process_http_request_line; | 88 r->state_handler = ngx_process_http_request_line; |
84 | 89 |
85 ev->event_handler = ngx_http_process_request; | 90 ev->event_handler = ngx_http_process_request; |
86 ev->close_handler = ngx_http_close_request; | 91 ev->close_handler = ngx_http_close_request; |
178 return ngx_process_http_request(r); | 183 return ngx_process_http_request(r); |
179 } | 184 } |
180 | 185 |
181 static int ngx_process_http_request(ngx_http_request_t *r) | 186 static int ngx_process_http_request(ngx_http_request_t *r) |
182 { | 187 { |
183 int err; | 188 int err, rc; |
184 char *name, *loc, *file; | 189 char *name, *loc, *file; |
185 | 190 |
186 ngx_log_debug(r->connection->log, "HTTP request"); | 191 ngx_log_debug(r->connection->log, "HTTP request"); |
192 | |
193 ngx_test_null(r->headers_out, | |
194 ngx_pcalloc(r->pool, sizeof(ngx_http_headers_out_t)), | |
195 ngx_http_error(r, NGX_HTTP_INTERNAL_SERVER_ERROR)); | |
187 | 196 |
188 if (*(r->uri_end - 1) == '/') { | 197 if (*(r->uri_end - 1) == '/') { |
189 r->handler = NGX_HTTP_DIRECTORY_HANDLER; | 198 r->handler = NGX_HTTP_DIRECTORY_HANDLER; |
190 return NGX_OK; | 199 return NGX_OK; |
191 } | 200 } |
202 file = ngx_cpystrn(r->location, r->uri_start, | 211 file = ngx_cpystrn(r->location, r->uri_start, |
203 r->uri_end - r->uri_start + 1); | 212 r->uri_end - r->uri_start + 1); |
204 | 213 |
205 ngx_log_debug(r->connection->log, "HTTP filename: '%s'" _ r->filename); | 214 ngx_log_debug(r->connection->log, "HTTP filename: '%s'" _ r->filename); |
206 | 215 |
207 } | 216 if (ngx_file_type(r->filename, &r->file_info) == -1) { |
208 #if 0 | |
209 | |
210 if (ngx_stat(r->filename, &r->stat) == -1) { | |
211 err = ngx_errno; | 217 err = ngx_errno; |
212 ngx_log_error(GX_LOG_ERR, r->connection->log, err, | 218 ngx_log_error(NGX_LOG_ERR, r->connection->log, err, |
213 "ngx_process_http_request: " | 219 "ngx_process_http_request: " |
214 ngx_stat_n " %s failed", r->filename); | 220 ngx_file_type_n " %s failed", r->filename); |
215 | 221 |
216 if (err == NGX_ENOENT) | 222 if (err == NGX_ENOENT) |
217 return ngx_http_error(r, NGX_HTTP_NOT_FOUND); | 223 return ngx_http_error(r, NGX_HTTP_NOT_FOUND); |
218 else | 224 else |
219 return ngx_http_error(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | 225 return ngx_http_error(r, NGX_HTTP_INTERNAL_SERVER_ERROR); |
220 } | 226 } |
221 | 227 |
222 if (ngx_is_dir(r->stat)) { | 228 if (ngx_is_dir(r->file_info)) { |
229 ngx_log_debug(r->connection->log, "HTTP DIR: '%s'" _ r->filename); | |
223 *file++ = '/'; | 230 *file++ = '/'; |
224 *file = '\0'; | 231 *file = '\0'; |
225 r->headers_out->location = r->location; | 232 r->headers_out->location = r->location; |
226 return ngx_http_redirect(r, NGX_HTTP_MOVED_PERMANENTLY); | 233 return ngx_http_redirect(r, NGX_HTTP_MOVED_PERMANENTLY); |
227 } | 234 } |
228 | 235 |
229 r->stat_valid = 1; | 236 /* STUB */ |
237 rc = ngx_http_static_handler(r); | |
238 if (rc == 0) { | |
239 r->connection->write->event_handler = ngx_http_writer; | |
240 ngx_add_event(r->connection->write, NGX_WRITE_EVENT, NGX_CLEAR_EVENT); | |
241 } | |
242 return rc; | |
243 | |
230 r->handler = NGX_HTTP_STATIC_HANDLER; | 244 r->handler = NGX_HTTP_STATIC_HANDLER; |
231 return NGX_OK; | 245 return NGX_OK; |
232 } | 246 } |
233 | 247 |
248 | |
249 static int ngx_http_writer(ngx_event_t *ev) | |
250 { | |
251 int rc; | |
252 ngx_connection_t *c = (ngx_connection_t *) ev->data; | |
253 ngx_http_request_t *r = (ngx_http_request_t *) c->data; | |
254 | |
255 rc = ngx_http_write_filter(r, NULL); | |
256 ngx_log_debug(r->connection->log, "write_filter: %d" _ rc); | |
257 return rc; | |
258 } | |
259 | |
234 static int ngx_http_handler(ngx_http_request_t *r, int handler) | 260 static int ngx_http_handler(ngx_http_request_t *r, int handler) |
235 { | 261 { |
236 if (handler == NGX_HTTP_STATIC_HANDLER) | 262 if (handler == NGX_HTTP_STATIC_HANDLER) |
237 return ngx_http_static_handler(r); | 263 return ngx_http_static_handler(r); |
238 | 264 |
265 #if 0 | |
239 elsif (handler == NGX_HTTP_DIRECTORY_HANDLER) | 266 elsif (handler == NGX_HTTP_DIRECTORY_HANDLER) |
240 return ngx_http_index_handler(r); | 267 return ngx_http_index_handler(r); |
268 #endif | |
241 | 269 |
242 return ngx_http_error(r, NGX_HTTP_INTERNAL_SERVER_ERROR); | 270 return ngx_http_error(r, NGX_HTTP_INTERNAL_SERVER_ERROR); |
243 } | 271 } |
244 #endif | |
245 | 272 |
246 static int ngx_http_redirect(ngx_http_request_t *r, int redirect) | 273 static int ngx_http_redirect(ngx_http_request_t *r, int redirect) |
247 { | 274 { |
248 /* STUB */ | 275 /* STUB */ |
249 return -1; | 276 return -1; |