Mercurial > hg > nginx
diff src/http/ngx_http_copy_filter.c @ 334:af451db3fe99
nginx-0.0.3-2004-05-12-09:37:55 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 12 May 2004 05:37:55 +0000 |
parents | src/http/ngx_http_output_filter.c@e0f3f238db09 |
children | 6bdf858bff8c |
line wrap: on
line diff
copy from src/http/ngx_http_output_filter.c copy to src/http/ngx_http_copy_filter.c --- a/src/http/ngx_http_output_filter.c +++ b/src/http/ngx_http_copy_filter.c @@ -6,28 +6,29 @@ typedef struct { ngx_bufs_t bufs; -} ngx_http_output_filter_conf_t; +} ngx_http_copy_filter_conf_t; -static void *ngx_http_output_filter_create_conf(ngx_conf_t *cf); -static char *ngx_http_output_filter_merge_conf(ngx_conf_t *cf, - void *parent, void *child); +static void *ngx_http_copy_filter_create_conf(ngx_conf_t *cf); +static char *ngx_http_copy_filter_merge_conf(ngx_conf_t *cf, + void *parent, void *child); +static ngx_int_t ngx_http_copy_filter_init(ngx_cycle_t *cycle); -static ngx_command_t ngx_http_output_filter_commands[] = { +static ngx_command_t ngx_http_copy_filter_commands[] = { {ngx_string("output_buffers"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2, ngx_conf_set_bufs_slot, NGX_HTTP_LOC_CONF_OFFSET, - offsetof(ngx_http_output_filter_conf_t, bufs), + offsetof(ngx_http_copy_filter_conf_t, bufs), NULL}, ngx_null_command }; -static ngx_http_module_t ngx_http_output_filter_module_ctx = { +static ngx_http_module_t ngx_http_copy_filter_module_ctx = { NULL, /* pre conf */ NULL, /* create main configuration */ @@ -36,40 +37,41 @@ static ngx_http_module_t ngx_http_outpu NULL, /* create server configuration */ NULL, /* merge server configuration */ - ngx_http_output_filter_create_conf, /* create location configuration */ - ngx_http_output_filter_merge_conf /* merge location configuration */ + ngx_http_copy_filter_create_conf, /* create location configuration */ + ngx_http_copy_filter_merge_conf /* merge location configuration */ }; -ngx_module_t ngx_http_output_filter_module = { +ngx_module_t ngx_http_copy_filter_module = { NGX_MODULE, - &ngx_http_output_filter_module_ctx, /* module context */ - ngx_http_output_filter_commands, /* module directives */ + &ngx_http_copy_filter_module_ctx, /* module context */ + ngx_http_copy_filter_commands, /* module directives */ NGX_HTTP_MODULE, /* module type */ - NULL, /* init module */ - NULL /* init child */ + ngx_http_copy_filter_init, /* init module */ + NULL /* init process */ }; +static ngx_http_output_body_filter_pt ngx_http_next_filter; -ngx_int_t ngx_http_output_filter(ngx_http_request_t *r, ngx_chain_t *in) + +ngx_int_t ngx_http_copy_filter(ngx_http_request_t *r, ngx_chain_t *in) { - ngx_int_t rc; - ngx_output_chain_ctx_t *ctx; - ngx_http_output_filter_conf_t *conf; + ngx_output_chain_ctx_t *ctx; + ngx_http_copy_filter_conf_t *conf; if (r->connection->write->error) { return NGX_ERROR; } ctx = ngx_http_get_module_ctx(r->main ? r->main : r, - ngx_http_output_filter_module); + ngx_http_copy_filter_module); if (ctx == NULL) { conf = ngx_http_get_module_loc_conf(r->main ? r->main : r, - ngx_http_output_filter_module); + ngx_http_copy_filter_module); - ngx_http_create_ctx(r, ctx, ngx_http_output_filter_module, + ngx_http_create_ctx(r, ctx, ngx_http_copy_filter_module, sizeof(ngx_output_chain_ctx_t), NGX_ERROR); ctx->sendfile = r->sendfile; @@ -78,33 +80,23 @@ ngx_int_t ngx_http_output_filter(ngx_htt ctx->pool = r->pool; ctx->bufs = conf->bufs; - ctx->tag = (ngx_hunk_tag_t) &ngx_http_output_filter_module; + ctx->tag = (ngx_hunk_tag_t) &ngx_http_copy_filter_module; - ctx->output_filter = (ngx_output_chain_filter_pt) - ngx_http_top_body_filter; + ctx->output_filter = (ngx_output_chain_filter_pt) ngx_http_next_filter; ctx->filter_ctx = r; } - rc = ngx_output_chain(ctx, in); - - if (rc == NGX_ERROR) { - - /* NGX_ERROR could be returned by any filter */ - - r->connection->write->error = 1; - } - - return rc; + return ngx_output_chain(ctx, in); } -static void *ngx_http_output_filter_create_conf(ngx_conf_t *cf) +static void *ngx_http_copy_filter_create_conf(ngx_conf_t *cf) { - ngx_http_output_filter_conf_t *conf; + ngx_http_copy_filter_conf_t *conf; ngx_test_null(conf, - ngx_palloc(cf->pool, sizeof(ngx_http_output_filter_conf_t)), + ngx_palloc(cf->pool, sizeof(ngx_http_copy_filter_conf_t)), NULL); conf->bufs.num = 0; @@ -113,13 +105,23 @@ static void *ngx_http_output_filter_crea } -static char *ngx_http_output_filter_merge_conf(ngx_conf_t *cf, - void *parent, void *child) +static char *ngx_http_copy_filter_merge_conf(ngx_conf_t *cf, + void *parent, void *child) { - ngx_http_output_filter_conf_t *prev = parent; - ngx_http_output_filter_conf_t *conf = child; + ngx_http_copy_filter_conf_t *prev = parent; + ngx_http_copy_filter_conf_t *conf = child; ngx_conf_merge_bufs_value(conf->bufs, prev->bufs, 1, 32768); return NULL; } + + +static ngx_int_t ngx_http_copy_filter_init(ngx_cycle_t *cycle) +{ + ngx_http_next_filter = ngx_http_top_body_filter; + ngx_http_top_body_filter = ngx_http_copy_filter; + + return NGX_OK; +} +