changeset 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
files src/core/ngx_config_file.h src/core/ngx_hunk.c src/core/ngx_modules.c src/http/modules/ngx_http_index_handler.c src/http/ngx_http.h src/http/ngx_http_config.c src/http/ngx_http_config.h src/http/ngx_http_core.c src/http/ngx_http_header_filter.c src/http/ngx_http_output_filter.c src/http/ngx_http_write_filter.c src/os/win32/ngx_files.c src/os/win32/ngx_sendv.c src/os/win32/ngx_stat.c
diffstat 14 files changed, 130 insertions(+), 139 deletions(-) [+]
line wrap: on
line diff
--- 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;
 
 
--- a/src/core/ngx_hunk.c
+++ b/src/core/ngx_hunk.c
@@ -1,4 +1,5 @@
 
+#include <ngx_config.h>
 #include <ngx_hunk.h>
 
 
--- a/src/core/ngx_modules.c
+++ b/src/core/ngx_modules.c
@@ -1,3 +1,5 @@
+
+#include <ngx_config.h>
 
 #include <ngx_config_file.h>
 
--- 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 */
 
--- 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);
 
--- 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;
--- 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;
 
 
--- 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
--- 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 */
 
--- 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 */
 
--- 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 */
 
--- a/src/os/win32/ngx_files.c
+++ b/src/os/win32/ngx_files.c
@@ -1,3 +1,5 @@
+
+#include <ngx_config.h>
 
 #include <ngx_core.h>
 #include <ngx_types.h>
--- a/src/os/win32/ngx_sendv.c
+++ b/src/os/win32/ngx_sendv.c
@@ -1,3 +1,5 @@
+
+#include <ngx_config.h>
 
 #include <ngx_core.h>
 #include <ngx_types.h>
--- a/src/os/win32/ngx_stat.c
+++ b/src/os/win32/ngx_stat.c
@@ -1,5 +1,5 @@
 
-#include <windows.h>
+#include <ngx_config.h>
 
 #include <ngx_stat.h>