# HG changeset patch # User Igor Sysoev # Date 1040974067 0 # Node ID cd035a94e0b6ccd713e72ad1880f5d3770dcb326 # Parent 59e7c7f30d495300db66d9832bdeab19814b30f4 nginx-0.0.1-2002-12-27-10:27:47 import diff --git a/src/core/ngx_config_file.h b/src/core/ngx_config_file.h --- a/src/core/ngx_config_file.h +++ b/src/core/ngx_config_file.h @@ -26,6 +26,8 @@ #define NGX_CONF_FILE_DONE 2 +#define NGX_CONF_ERROR (char *) -1 + typedef struct ngx_conf_s ngx_conf_t; diff --git a/src/core/ngx_hunk.c b/src/core/ngx_hunk.c --- a/src/core/ngx_hunk.c +++ b/src/core/ngx_hunk.c @@ -1,4 +1,5 @@ +#include #include diff --git a/src/core/ngx_modules.c b/src/core/ngx_modules.c --- a/src/core/ngx_modules.c +++ b/src/core/ngx_modules.c @@ -1,3 +1,5 @@ + +#include #include diff --git a/src/http/modules/ngx_http_index_handler.c b/src/http/modules/ngx_http_index_handler.c --- a/src/http/modules/ngx_http_index_handler.c +++ b/src/http/modules/ngx_http_index_handler.c @@ -33,7 +33,9 @@ ngx_http_module_t ngx_http_index_module NGX_HTTP_MODULE, NULL, /* create server config */ + NULL, /* init server config */ ngx_http_index_create_conf, /* create location config */ + ngx_http_index_merge_conf, /* merge location config */ NULL, /* translate handler */ diff --git a/src/http/ngx_http.h b/src/http/ngx_http.h --- a/src/http/ngx_http.h +++ b/src/http/ngx_http.h @@ -191,7 +191,9 @@ typedef struct { int index; void *(*create_srv_conf)(ngx_pool_t *p); + void *(*init_srv_conf)(ngx_pool_t *p, void *conf); void *(*create_loc_conf)(ngx_pool_t *p); + void *(*merge_loc_conf)(ngx_pool_t *p, void *prev, void *conf); int (*translate_handler)(ngx_http_request_t *r); diff --git a/src/http/ngx_http_config.c b/src/http/ngx_http_config.c --- a/src/http/ngx_http_config.c +++ b/src/http/ngx_http_config.c @@ -16,10 +16,11 @@ void **ngx_loc_conf; /**/ -static int ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, char *dummy); +static char *ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, char *dummy); +static char *ngx_server_block(ngx_conf_t *cf, ngx_command_t *cmd, char *dummy); -void *null_loc_conf; +void **null_loc_conf; static ngx_command_t ngx_http_commands[] = { @@ -34,11 +35,32 @@ static ngx_command_t ngx_http_commands[ }; -static ngx_http_module_t ngx_http_module_ctx = { +ngx_module_t ngx_http_module = { + NULL, /* module context */ + ngx_http_commands, /* module directives */ + 0, /* module type */ + NULL /* init module */ +}; + +static ngx_command_t ngx_http_core_commands[] = { + + {ngx_string("server"), + NGX_CONF_BLOCK|NGX_CONF_NOARGS, + ngx_server_block, + NGX_HTTP_MODULE_TYPE, + 0}, + + {ngx_string(""), 0, NULL, 0, 0} +}; + + +static ngx_http_module_t ngx_http_core_module_ctx = { NGX_HTTP_MODULE, NULL, /* create server config */ + NULL, /* init server config */ NULL, /* create location config */ + NULL, /* merge location config */ NULL, /* translate handler */ @@ -49,17 +71,17 @@ static ngx_http_module_t ngx_http_modul }; -ngx_module_t ngx_http_module = { - &ngx_http_module_ctx, /* module context */ - ngx_http_commands, /* module directives */ - 0, /* module type */ +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 */ }; -static int ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, char *dummy) +static char *ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, char *dummy) { - int i, j; + int i; ngx_http_module_t *module; ngx_http_conf_ctx_t *ctx; @@ -69,30 +91,28 @@ static int ngx_http_block(ngx_conf_t *cf } module = (ngx_http_module_t *) ngx_modules[i]->ctx; - module->index = i; + module->index = ngx_http_max_module++; } - ngx_http_max_module = i; - ngx_test_null(null_loc_conf, ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module), - NGX_ERROR); + NGX_CONF_ERROR); ctx->srv_conf = NULL; ctx->loc_conf = null_loc_conf; + ctx->locations = NULL; - for (i = 0, j = 0; ngx_modules[i]; i++) { + 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; - module->index = i; + if (module->create_loc_conf) { - ngx_test_null(null_loc_conf, + ngx_test_null(null_loc_conf[module->index], module->create_loc_conf(cf->pool), - NGX_ERROR); - j++; + NGX_CONF_ERROR); } } @@ -102,77 +122,96 @@ static int ngx_http_block(ngx_conf_t *cf } -#if 0 -int ngx_server_block(ngx_conf_t *cf) +static char *ngx_server_block(ngx_conf_t *cf, ngx_command_t *cmd, char *dummy) { - ngx_http_conf_ctx_t *ctx, *prev; + int i, j; + char *rv; + void ***loc_conf; /* YES! 3 stars */ + ngx_http_module_t *module; + ngx_http_conf_ctx_t *ctx, *prev; ngx_test_null(ctx, ngx_pcalloc(cf->pool, sizeof(ngx_http_conf_ctx_t)), - NGX_ERROR); + NGX_CONF_ERROR); /* server config */ ngx_test_null(ctx->srv_conf, - ngx_pcalloc(cf->pool, sizeof(void *) * ngx_max_module), - NGX_ERROR); + ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module), + NGX_CONF_ERROR); /* server location config */ ngx_test_null(ctx->loc_conf, - ngx_pcalloc(cf->pool, sizeof(void *) * ngx_max_module), - NGX_ERROR); + ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module), + NGX_CONF_ERROR); + 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; - for (i = 0; modules[i]; i++) { - if (modules[i]->create_srv_conf) - ngx_test_null(ctx->srv_conf[i], - modules[i]->create_srv_conf(cf->pool), - NGX_ERROR); + if (module->create_srv_conf) { + ngx_test_null(ctx->srv_conf[module->index], + module->create_srv_conf(cf->pool), + NGX_CONF_ERROR); + } - if (modules[i]->create_loc_conf) - ngx_test_null(ctx->loc_conf[i], - modules[i]->create_loc_conf(cf->pool), - NGX_ERROR); + if (module->create_loc_conf) { + ngx_test_null(ctx->loc_conf[module->index], + module->create_loc_conf(cf->pool), + NGX_CONF_ERROR); + } } prev = cf->ctx; cf->ctx = ctx; - rc = ngx_conf_parse(cf); + rv = ngx_conf_parse(cf, NULL); cf->ctx = prev; - if (loc == NGX_ERROR) - return NGX_ERROR; + if (rv != NULL) + return rv; - for (i = 0; modules[i]; i++) { -#if 0 - if (modules[i]->merge_srv_conf) - if (modules[i]->merge_srv_conf(cf->pool, - prev->srv_conf, ctx->srv_conf) - == NGX_ERROR) - return NGX_ERROR; -#endif + 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 (modules[i]->init_srv_conf) - if (modules[i]->init_srv_conf(cf->pool, ctx->srv_conf) == NGX_ERROR) - return NGX_ERROR; + if (module->init_srv_conf) { + if (module->init_srv_conf(cf->pool, + ctx->srv_conf[module->index]) + == NGX_CONF_ERROR) { + return NGX_CONF_ERROR; + } + } - if (modules[i]->merge_loc_conf) - if (modules[i]->merge_loc_conf(cf->pool, - prev->loc_conf, ctx->loc_conf) - == NGX_ERROR) - return NGX_ERROR; + if (module->merge_loc_conf) { + if (module->merge_loc_conf(cf->pool, + prev->loc_conf[module->index], + ctx->loc_conf[module->index]) + == NGX_CONF_ERROR) { + return NGX_CONF_ERROR; + } - for (array) { - if (modules[i]->merge_loc_conf(cf->pool, - ctx->loc_conf, loc->loc_conf) - == NGX_ERROR) - return NGX_ERROR; + loc_conf = (void ***)ctx->locations->elts; + for (j = 0; j < ctx->locations->nelts; j++) { + if (module->merge_loc_conf(cf->pool, + ctx->loc_conf[module->index], + loc_conf[j][module->index]) + == NGX_CONF_ERROR) { + return NGX_CONF_ERROR; + } } } } - return NGX_OK; + return NULL; } + +#if 0 int ngx_location_block(ngx_conf_t *cf) { ngx_http_conf_ctx_t *ctx, *prev; diff --git a/src/http/ngx_http_config.h b/src/http/ngx_http_config.h --- a/src/http/ngx_http_config.h +++ b/src/http/ngx_http_config.h @@ -7,8 +7,9 @@ typedef struct { - void **srv_conf; - void **loc_conf; + void **srv_conf; + void **loc_conf; + ngx_array_t *locations; } ngx_http_conf_ctx_t; diff --git a/src/http/ngx_http_core.c b/src/http/ngx_http_core.c --- a/src/http/ngx_http_core.c +++ b/src/http/ngx_http_core.c @@ -21,7 +21,7 @@ int (*ngx_http_top_header_filter) (ngx_h int ngx_http_max_module; - +#if 0 static ngx_command_t ngx_http_core_commands[] = { {ngx_string("send_timeout"), @@ -32,13 +32,15 @@ static ngx_command_t ngx_http_core_comma {ngx_string(""), 0, NULL, 0, 0} }; - +#endif ngx_http_module_t ngx_http_core_module_ctx = { NGX_HTTP_MODULE, ngx_http_core_create_srv_conf, /* create server config */ + NULL, /* init server config */ ngx_http_core_create_loc_conf, /* create location config */ + NULL, /* merge location config */ ngx_http_core_translate_handler, /* translate handler */ @@ -48,14 +50,14 @@ ngx_http_module_t ngx_http_core_module_ NULL, /* next output body filter */ }; - +#if 0 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 */ }; - +#endif int ngx_http_handler(ngx_http_request_t *r) { @@ -265,14 +267,10 @@ int ngx_http_close_request(ngx_http_requ r->connection->log, "file already closed"); if (r->file.fd != NGX_INVALID_FILE) { -/* STUB WIN32 */ -#if (WIN32) - if (ngx_close_file(r->file.fd) == 0) -#else - if (ngx_close_file(r->file.fd) == -1) -#endif + if (ngx_close_file(r->file.fd) == NGX_FILE_ERROR) { ngx_log_error(NGX_LOG_ERR, r->connection->log, ngx_errno, ngx_close_file_n " failed"); + } } /* @@ -307,59 +305,6 @@ int ngx_http_internal_redirect(ngx_http_ } -#if 0 - - - {"http", ngx_http_enter_container, 0, - NGX_GLOBAL_CONF, NGX_CONF_CONTAINER}, - - {"server", ngx_http_enter_server_container, 0, - NGX_HTTP_CONF, NGX_CONF_CONTAINER], - - {"location", ngx_http_enter_location_container, 0, - NGX_HTTP_SRV_CONF, NGX_CONF_CONTAINER|NGX_CONF_TAKE1} - - -int ngx_http_enter_container() -{ - create_srv_conf(null_srv_conf) - create_loc_conf(null_loc_conf) -} - -int ngx_http_exit_container() -{ - nothing ? -} - - -int ngx_http_enter_server_container() -{ - create_srv_conf() - create_loc_conf(NULL) -} - -int ngx_http_exit_server_container() -{ - merge_srv_conf(srv_conf, null_srv_conf) - merge_loc_conf(loc_conf, null_loc_conf) - - iterate check_loc_conf_is_set and merge_loc_conf() -} - -int ngx_http_enter_location_container() -{ - create_loc_conf(loc) - - push to array -} - -int ngx_http_exit_location_container() -{ -} - -#endif - - static void *ngx_http_core_create_srv_conf(ngx_pool_t *pool) { ngx_http_core_srv_conf_t *conf; @@ -386,16 +331,3 @@ static void *ngx_http_core_create_loc_co return conf; } - -#if 0 -static void *ngx_http_core_create_conf(ngx_pool_t *pool) -{ - - ngx_test_null(conf, ngx_palloc(pool, sizeof(ngx_http_core_conf_t)), NULL); - - ngx_test_null(conf->srv, ngx_http_core_create_srv_conf_t(pool), NULL); - ngx_test_null(conf->loc, ngx_http_core_create_loc_conf_t(pool), NULL); - conf->parent = - conf->next = NULL; -} -#endif diff --git a/src/http/ngx_http_header_filter.c b/src/http/ngx_http_header_filter.c --- a/src/http/ngx_http_header_filter.c +++ b/src/http/ngx_http_header_filter.c @@ -18,7 +18,9 @@ ngx_http_module_t ngx_http_header_filte NGX_HTTP_MODULE, NULL, /* create server config */ + NULL, /* init server config */ NULL, /* create location config */ + NULL, /* merge location config */ NULL, /* translate handler */ diff --git a/src/http/ngx_http_output_filter.c b/src/http/ngx_http_output_filter.c --- a/src/http/ngx_http_output_filter.c +++ b/src/http/ngx_http_output_filter.c @@ -30,7 +30,9 @@ static ngx_http_module_t ngx_http_outpu NGX_HTTP_MODULE, NULL, /* create server config */ + NULL, /* init server config */ ngx_http_output_filter_create_conf, /* create location config */ + NULL, /* merge location config */ NULL, /* translate handler */ diff --git a/src/http/ngx_http_write_filter.c b/src/http/ngx_http_write_filter.c --- a/src/http/ngx_http_write_filter.c +++ b/src/http/ngx_http_write_filter.c @@ -27,7 +27,9 @@ ngx_http_module_t ngx_http_write_filter NGX_HTTP_MODULE, NULL, /* create server config */ + NULL, /* init server config */ ngx_http_write_filter_create_conf, /* create location config */ + NULL, /* merge location config */ NULL, /* translate handler */ diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c --- a/src/os/win32/ngx_files.c +++ b/src/os/win32/ngx_files.c @@ -1,3 +1,5 @@ + +#include #include #include diff --git a/src/os/win32/ngx_sendv.c b/src/os/win32/ngx_sendv.c --- a/src/os/win32/ngx_sendv.c +++ b/src/os/win32/ngx_sendv.c @@ -1,3 +1,5 @@ + +#include #include #include diff --git a/src/os/win32/ngx_stat.c b/src/os/win32/ngx_stat.c --- a/src/os/win32/ngx_stat.c +++ b/src/os/win32/ngx_stat.c @@ -1,5 +1,5 @@ -#include +#include #include