Mercurial > hg > nginx
diff src/http/ngx_http_config.c @ 42:cd035a94e0b6
nginx-0.0.1-2002-12-27-10:27:47 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 27 Dec 2002 07:27:47 +0000 |
parents | 59e7c7f30d49 |
children | 53cd05892261 |
line wrap: on
line diff
--- 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;