aboutsummaryrefslogtreecommitdiff
path: root/src/http/ngx_http_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/ngx_http_core.c')
-rw-r--r--src/http/ngx_http_core.c87
1 files changed, 58 insertions, 29 deletions
diff --git a/src/http/ngx_http_core.c b/src/http/ngx_http_core.c
index e20d4683a..0890ca579 100644
--- a/src/http/ngx_http_core.c
+++ b/src/http/ngx_http_core.c
@@ -7,7 +7,6 @@
#include <ngx_http_config.h>
/* 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);
@@ -18,60 +17,85 @@ static void *ngx_http_core_create_loc_conf(ngx_pool_t *pool);
static int ngx_http_core_translate_handler(ngx_http_request_t *r);
-static ngx_command_t ngx_http_core_commands[] = {
+int (*ngx_http_top_header_filter) (ngx_http_request_t *r);
+
+int ngx_http_max_module;
+
- {"send_timeout", ngx_conf_set_time_slot,
- offsetof(ngx_http_core_loc_conf_t, send_timeout),
- NGX_HTTP_LOC_CONF, NGX_CONF_TAKE1,
- "set timeout for sending response"},
+static ngx_command_t ngx_http_core_commands[] = {
- {NULL}
+ {ngx_string("send_timeout"),
+ NGX_CONF_TAKE1,
+ ngx_conf_set_time_slot,
+ NGX_HTTP_LOC_CONF,
+ offsetof(ngx_http_core_loc_conf_t, send_timeout)},
+ {ngx_string(""), 0, NULL, 0, 0}
};
-ngx_http_module_t ngx_http_core_module = {
+ngx_http_module_t ngx_http_core_module_ctx = {
NGX_HTTP_MODULE,
ngx_http_core_create_srv_conf, /* create server config */
ngx_http_core_create_loc_conf, /* create location config */
- ngx_http_core_commands, /* module directives */
- /* STUB */ NULL, /* init module */
ngx_http_core_translate_handler, /* translate handler */
- NULL /* init output body filter */
+ NULL, /* output header filter */
+ NULL, /* next output header filter */
+ NULL, /* output body filter */
+ NULL, /* next output body filter */
+};
+
+
+ngx_module_t ngx_http_core_module = {
+ &ngx_http_core_module_ctx, /* module context */
+ ngx_http_core_commands, /* module directives */
+ NGX_HTTP_MODULE_TYPE, /* module type */
+ NULL /* init module */
};
int ngx_http_handler(ngx_http_request_t *r)
{
int rc, i;
+ ngx_http_module_t *module;
r->connection->unexpected_eof = 0;
r->lingering_close = 1;
r->keepalive = 0;
-#if 1
+#if 0
r->filter = NGX_HTTP_FILTER_NEED_IN_MEMORY;
#endif
/* run translation phase */
- for (i = 0; ngx_http_modules[i]; i++) {
- if (ngx_http_modules[i]->translate_handler) {
- rc = ngx_http_modules[i]->translate_handler(r);
- if (rc == NGX_OK)
- break;
-
- if (rc >= NGX_HTTP_SPECIAL_RESPONSE)
- return ngx_http_special_response(r, rc);
+ for (i = 0; ngx_modules[i]; i++) {
+ if (ngx_modules[i]->type != NGX_HTTP_MODULE_TYPE) {
+ continue;
+ }
+
+ module = (ngx_http_module_t *) ngx_modules[i]->ctx;
+ if (module->translate_handler == NULL) {
+ continue;
+ }
+
+ rc = module->translate_handler(r);
+ if (rc == NGX_OK) {
+ break;
+ }
+
+ if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
+ return ngx_http_special_response(r, rc);
}
}
rc = r->handler(r);
- if (rc >= NGX_HTTP_SPECIAL_RESPONSE)
+ if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
return ngx_http_special_response(r, rc);
+ }
return rc;
}
@@ -122,18 +146,20 @@ static int ngx_http_core_translate_handler(ngx_http_request_t *r)
"ngx_http_core_translate_handler: "
ngx_file_type_n " %s failed", r->file.name.data);
- if (err == ERROR_FILE_NOT_FOUND)
+ if (err == ERROR_FILE_NOT_FOUND) {
return NGX_HTTP_NOT_FOUND;
- else if (err == ERROR_PATH_NOT_FOUND)
+ } else if (err == ERROR_PATH_NOT_FOUND) {
return NGX_HTTP_NOT_FOUND;
- else
+ } else {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
}
#else
- if (r->file.fd == NGX_INVALID_FILE)
+ if (r->file.fd == NGX_INVALID_FILE) {
r->file.fd = ngx_open_file(r->file.name.data, NGX_FILE_RDONLY);
+ }
if (r->file.fd == NGX_INVALID_FILE) {
err = ngx_errno;
@@ -141,10 +167,11 @@ static int ngx_http_core_translate_handler(ngx_http_request_t *r)
"ngx_http_core_handler: "
ngx_open_file_n " %s failed", r->file.name.data);
- if (err == NGX_ENOENT)
+ if (err == NGX_ENOENT) {
return NGX_HTTP_NOT_FOUND;
- else
+ } else {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
}
if (!r->file.info_valid) {
@@ -153,10 +180,11 @@ static int ngx_http_core_translate_handler(ngx_http_request_t *r)
"ngx_http_core_handler: "
ngx_stat_fd_n " %s failed", r->file.name.data);
- if (ngx_close_file(r->file.fd) == NGX_FILE_ERROR)
+ if (ngx_close_file(r->file.fd) == NGX_FILE_ERROR) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, ngx_errno,
"ngx_http_core_handler: "
ngx_close_file_n " %s failed", r->file.name.data);
+ }
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
@@ -169,10 +197,11 @@ static int ngx_http_core_translate_handler(ngx_http_request_t *r)
ngx_log_debug(r->connection->log, "HTTP DIR: '%s'" _ r->file.name.data);
#if !(WIN9X)
- if (ngx_close_file(r->file.fd) == NGX_FILE_ERROR)
+ if (ngx_close_file(r->file.fd) == NGX_FILE_ERROR) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, ngx_errno,
"ngx_http_core_handler: "
ngx_close_file_n " %s failed", r->file.name.data);
+ }
#endif
/* BROKEN: need to include server name */