Mercurial > hg > nginx
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