diff src/http/ngx_http_output_filter.c @ 40:d5d4f3bba6f0

nginx-0.0.1-2002-12-26-10:24:21 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 26 Dec 2002 07:24:21 +0000
parents b2e039840718
children 59e7c7f30d49
line wrap: on
line diff
--- a/src/http/ngx_http_output_filter.c
+++ b/src/http/ngx_http_output_filter.c
@@ -10,51 +10,48 @@
 #include <ngx_http_output_filter.h>
 
 
-int ngx_http_output_filter(ngx_http_request_t *r, ngx_hunk_t *hunk);
+static int ngx_http_output_filter(ngx_http_request_t *r, ngx_hunk_t *hunk);
 static int ngx_http_output_filter_copy_hunk(ngx_hunk_t *dst, ngx_hunk_t *src);
-#if 0
-static int ngx_http_output_filter_init(
-            int (**next_filter)(ngx_http_request_t *r, ngx_chain_t *ch));
-#endif
 static void *ngx_http_output_filter_create_conf(ngx_pool_t *pool);
 
 
-static ngx_command_t ngx_http_output_filter_commands[] = {
+static ngx_command_t  ngx_http_output_filter_commands[] = {
 
-    {"output_buffer", ngx_conf_set_size_slot,
+    {ngx_string("output_buffer"),
+     ngx_conf_set_size_slot,
      offsetof(ngx_http_output_filter_conf_t, hunk_size),
-     NGX_HTTP_LOC_CONF, NGX_CONF_TAKE1,
-     "set output filter buffer size"},
+     NGX_HTTP_LOC_CONF,
+     NGX_CONF_TAKE1},
 
-    {NULL}
-
+    {ngx_string(""), NULL, 0, 0, 0}
 };
 
 
-ngx_http_module_t  ngx_http_output_filter_module = {
+static ngx_http_module_t  ngx_http_output_filter_module_ctx = {
     NGX_HTTP_MODULE,
 
     NULL,                                  /* create server config */
     ngx_http_output_filter_create_conf,    /* create location config */
-    ngx_http_output_filter_commands,       /* module directives */
 
-    NULL,                                  /* init module */
     NULL,                                  /* translate handler */
 
     NULL,                                  /* output header filter */
     NULL,                                  /* next output header filter */
-    ngx_http_output_filter,                /* output body filter */
+    (ngx_http_output_body_filter_p) ngx_http_output_filter,
+                                           /* output body filter */
     NULL                                   /* next output body filter */
 };
 
 
-#if 0
-static int (*ngx_http_output_next_filter)(ngx_http_request_t *r,
-                                          ngx_chain_t *ch);
-#endif
+ngx_module_t  ngx_http_output_filter_module = {
+    &ngx_http_output_filter_module_ctx,    /* module context */
+    ngx_http_output_filter_commands,       /* module directives */
+    NGX_HTTP_MODULE_TYPE,                  /* module type */
+    NULL                                   /* init module */
+};
 
 
-int ngx_http_output_filter(ngx_http_request_t *r, ngx_hunk_t *hunk)
+static int ngx_http_output_filter(ngx_http_request_t *r, ngx_hunk_t *hunk)
 {
     int      rc, once;
     size_t   size;
@@ -64,21 +61,18 @@ int ngx_http_output_filter(ngx_http_requ
     ngx_http_output_filter_conf_t *conf;
 
     ctx = (ngx_http_output_filter_ctx_t *)
-                            ngx_get_module_ctx(r->main ? r->main : r,
-                                                ngx_http_output_filter_module);
+                    ngx_http_get_module_ctx(r->main ? r->main : r,
+                                            ngx_http_output_filter_module_ctx);
 
     if (ctx == NULL) {
         ngx_http_create_ctx(r, ctx,
-                            ngx_http_output_filter_module,
+                            ngx_http_output_filter_module_ctx,
                             sizeof(ngx_http_output_filter_ctx_t));
-
-#if 0
-        ctx->next_filter = ngx_http_output_next_filter;
-#endif
     }
 
-    if (hunk && (hunk->type & NGX_HUNK_LAST))
+    if (hunk && (hunk->type & NGX_HUNK_LAST)) {
         ctx->last = 1;
+    }
 
     for (once = 1; once || ctx->in; once = 0) {
 
@@ -87,19 +81,17 @@ int ngx_http_output_filter(ngx_http_requ
 
             /* add hunk to input chain */
             if (once && hunk) {
-                for (ce = ctx->in; ce->next; ce = ce->next)
+                for (ce = ctx->in; ce->next; ce = ce->next) {
                     /* void */ ;
+                }
 
                 ngx_add_hunk_to_chain(ce->next, hunk, r->pool, NGX_ERROR);
             }
 
             /* our hunk is still busy */
             if (ctx->hunk->pos.mem < ctx->hunk->last.mem) {
-                rc = ngx_http_output_filter_module.
+                rc = ngx_http_output_filter_module_ctx.
                                               next_output_body_filter(r, NULL);
-#if 0
-                rc = ctx->next_filter(r, NULL);
-#endif
 
             /* our hunk is free */
             } else {
@@ -107,11 +99,13 @@ int ngx_http_output_filter(ngx_http_requ
 
                 rc = ngx_http_output_filter_copy_hunk(ctx->hunk, ctx->in->hunk);
 #if (NGX_FILE_AIO_READ)
-                if (rc == NGX_AGAIN)
+                if (rc == NGX_AGAIN) {
                     return rc;
+                }
 #endif
-                if (rc == NGX_ERROR)
+                if (rc == NGX_ERROR) {
                     return rc;
+                }
 
                 /* whole hunk is copied so we send to next filter chain part
                    up to next hunk that need to be copied */
@@ -119,12 +113,15 @@ int ngx_http_output_filter(ngx_http_requ
                     ctx->out.next = ctx->in->next;
 
                     for (ce = ctx->in->next; ce; ce = ce->next) {
-                        if (ce->hunk->type & NGX_HUNK_FILE)
+                        if (ce->hunk->type & NGX_HUNK_FILE) {
                             break;
+                        }
 
                         if ((ce->hunk->type & (NGX_HUNK_MEMORY|NGX_HUNK_MMAP))
                             && (r->filter & NGX_HTTP_FILTER_NEED_TEMP))
+                        {
                             break;
+                        }
                     }
 
                     ctx->out.next = ce;
@@ -133,33 +130,29 @@ int ngx_http_output_filter(ngx_http_requ
                     ctx->out.next = NULL;
                 }
 
-                rc = ngx_http_output_filter_module.
+                rc = ngx_http_output_filter_module_ctx.
                                          next_output_body_filter(r, &ctx->out);
-#if 0
-                rc = ctx->next_filter(r, &ctx->out);
-#endif;
             }
 
             /* delete completed hunks from input chain */
             for (ce = ctx->in; ce; ce = ce->next) {
-                 if (ce->hunk->pos.file == ce->hunk->last.file)
+                 if (ce->hunk->pos.file == ce->hunk->last.file) {
                      ctx->in = ce->next;
+                 }
             }
 
-            if (rc == NGX_OK && ctx->hunk)
+            if (rc == NGX_OK && ctx->hunk) {
                 ctx->hunk->pos.mem = ctx->hunk->last.mem = ctx->hunk->start;
-            else
+            } else {
                 return rc;
+            }
 
         /* input chain is empty */
         } else {
 
             if (hunk == NULL) {
-                rc = ngx_http_output_filter_module.
+                rc = ngx_http_output_filter_module_ctx.
                                               next_output_body_filter(r, NULL);
-#if 0
-                rc = ctx->next_filter(r, NULL);
-#endif;
 
             } else {
 
@@ -175,11 +168,8 @@ int ngx_http_output_filter(ngx_http_requ
                         ngx_add_hunk_to_chain(ctx->in, hunk, r->pool,
                                               NGX_ERROR);
 
-                        rc = ngx_http_output_filter_module.
+                        rc = ngx_http_output_filter_module_ctx.
                                               next_output_body_filter(r, NULL);
-#if 0
-                        rc = ctx->next_filter(r, NULL);
-#endif
 
                     } else {
                         if (ctx->hunk == NULL) {
@@ -187,12 +177,14 @@ int ngx_http_output_filter(ngx_http_requ
                             if (hunk->type & NGX_HUNK_LAST) {
 
                                 conf = (ngx_http_output_filter_conf_t *)
-                                 ngx_get_module_loc_conf(r->main ? r->main : r,
-                                                ngx_http_output_filter_module);
+                                        ngx_http_get_module_loc_conf(
+                                            r->main ? r->main : r,
+                                            ngx_http_output_filter_module_ctx);
 
                                 size = hunk->last.mem - hunk->pos.mem;
-                                if (size > conf->hunk_size)
+                                if (size > conf->hunk_size) {
                                     size = conf->hunk_size;
+                                }
 
                             } else {
                                 size = conf->hunk_size;
@@ -215,21 +207,20 @@ int ngx_http_output_filter(ngx_http_requ
                                 return rc;
                             }
 #endif
-                            if (rc == NGX_ERROR)
+                            if (rc == NGX_ERROR) {
                                 return rc;
+                            }
 
-                            if (hunk->pos.mem < hunk->last.mem)
+                            if (hunk->pos.mem < hunk->last.mem) {
                                 ngx_add_hunk_to_chain(ctx->in, hunk, r->pool,
                                                       NGX_ERROR);
+                            }
 
                             ctx->out.hunk = ctx->hunk;
                             ctx->out.next = NULL;
 
-                            rc = ngx_http_output_filter_module.
+                            rc = ngx_http_output_filter_module_ctx.
                                          next_output_body_filter(r, &ctx->out);
-#if 0
-                            rc = ctx->next_filter(r, &ctx->out);
-#endif
                         }
                     }
 
@@ -237,11 +228,8 @@ int ngx_http_output_filter(ngx_http_requ
                     ctx->out.hunk = hunk;
                     ctx->out.next = NULL;
 
-                    rc = ngx_http_output_filter_module.
+                    rc = ngx_http_output_filter_module_ctx.
                                          next_output_body_filter(r, &ctx->out);
-#if 0
-                    rc = ctx->next_filter(r, &ctx->out);
-#endif
                 }
             }
         }
@@ -250,13 +238,15 @@ int ngx_http_output_filter(ngx_http_requ
             ctx->hunk->pos.mem = ctx->hunk->last.mem = ctx->hunk->start;
     }
 
-    if (rc == NGX_OK && ctx->last)
+    if (rc == NGX_OK && ctx->last) {
         return NGX_OK;
+    }
 
     if (rc == NGX_OK) {
-        if (ctx->hunk)
+        if (ctx->hunk) {
             ctx->hunk->pos.mem = ctx->hunk->last.mem = ctx->hunk->start;
-#if level_event
+        }
+#if (!NGX_ONESHOT_EVENT)
         ngx_del_event(r->connection->write, NGX_WRITE_EVENT);
 #endif
     }
@@ -271,8 +261,9 @@ static int ngx_http_output_filter_copy_h
     ssize_t  n;
 
     size = src->last.mem - src->pos.mem;
-    if (size > dst->end - dst->pos.mem)
+    if (size > dst->end - dst->pos.mem) {
         size = dst->end - dst->pos.mem;
+    }
 
     if (src->type & NGX_HUNK_FILE) {
         n = ngx_read_file(src->file, dst->pos.mem, size, src->pos.file);
@@ -301,10 +292,9 @@ static int ngx_http_output_filter_copy_h
         dst->last.mem += size;
     }
 
-#if 1
-    if (src->type & NGX_HUNK_LAST) 
+    if (src->type & NGX_HUNK_LAST) {
         dst->type |= NGX_HUNK_LAST;
-#endif
+    }
 
     return NGX_OK;
 }
@@ -322,14 +312,3 @@ static void *ngx_http_output_filter_crea
 
     return conf;
 }
-
-#if 0
-static int ngx_http_output_filter_init(
-            int (**next_filter)(ngx_http_request_t *r, ngx_chain_t *ch))
-{
-    ngx_http_output_next_filter = *next_filter;
-    *next_filter = NULL;
-
-    return NGX_OK;
-}
-#endif