Mercurial > hg > nginx
diff src/http/ngx_http_core_module.c @ 45:f1ee46c036a4
nginx-0.0.1-2003-01-10-09:09:20 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 10 Jan 2003 06:09:20 +0000 |
parents | 0e81ac0bb3e2 |
children | f84a648211f4 |
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -11,16 +11,16 @@ #if 0 #include <ngx_http_write_filter.h> #include <ngx_http_output_filter.h> -#include <ngx_http_index_handler.h> #endif /* STUB */ #include <ngx_http_output_filter.h> int ngx_http_static_handler(ngx_http_request_t *r); -int ngx_http_index_handler(ngx_http_request_t *r); int ngx_http_proxy_handler(ngx_http_request_t *r); /**/ +static int ngx_http_core_index_handler(ngx_http_request_t *r); + static char *ngx_server_block(ngx_conf_t *cf, ngx_command_t *cmd, char *dummy); static char *ngx_location_block(ngx_conf_t *cf, ngx_command_t *cmd, @@ -173,9 +173,7 @@ ngx_log_debug(r->connection->log, "trans } if (r->uri.data[r->uri.len - 1] == '/') { - /* TODO: find index handler */ - /* STUB */ r->handler = ngx_http_index_handler; - + r->handler = ngx_http_core_index_handler; return NGX_OK; } @@ -234,6 +232,9 @@ ngx_log_debug(r->connection->log, "trans #if (WIN32) } else if (err == ERROR_PATH_NOT_FOUND) { return NGX_HTTP_NOT_FOUND; +#else + } else if (err == NGX_ENOTDIR) { + return NGX_HTTP_NOT_FOUND; #endif } else { return NGX_HTTP_INTERNAL_SERVER_ERROR; @@ -293,6 +294,62 @@ ngx_log_debug(r->connection->log, "trans } +static int ngx_http_core_index_handler(ngx_http_request_t *r) +{ + int i, rc; + ngx_err_t err; + ngx_http_handler_pt *h; + + h = (ngx_http_handler_pt *) ngx_http_index_handlers.elts; + for (i = 0; i < ngx_http_index_handlers.nelts; i++) { + rc = h[i](r); + + if (rc != NGX_DECLINED) { + return rc; + } + } + +#if (WIN32) + + if (r->path_not_found) { + return NGX_HTTP_NOT_FOUND; + + } else { + return NGX_HTTP_FORBIDDEN; + } + +#else + + if (r->path_not_found) { + return NGX_HTTP_NOT_FOUND; + } + + r->path.data[r->path.len] = '\0'; + if (stat(r->path.data, &r->file.info) == -1) { + + err = ngx_errno; + if (err == NGX_ENOENT) { + return NGX_HTTP_NOT_FOUND; + } + + ngx_log_error(NGX_LOG_ERR, r->connection->log, err, + "ngx_http_core_index_handler: " + "stat() %s failed", r->path.data); + + return NGX_HTTP_INTERNAL_SERVER_ERROR; + } + + if (ngx_is_dir(r->file.info)) { + return NGX_HTTP_FORBIDDEN; + + } else { + return NGX_HTTP_NOT_FOUND; + } + +#endif +} + + int ngx_http_send_header(ngx_http_request_t *r) { return (*ngx_http_top_header_filter)(r);