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;