# HG changeset patch # User Maxim Dounin # Date 1365008407 -14400 # Node ID 7e39a357ddd2921381bed55c8758f643589fc115 # Parent 4bcd35e7a0f0ab7e5e65bda9756cb28b61e252dd Added $limit_rate_after variable (ticket #293). The variable is fully identical to $limit_rate one, and allows to change a value set by limit_rate_after directive. diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -1524,6 +1524,10 @@ ngx_http_update_location_config(ngx_http r->limit_rate = clcf->limit_rate; } + if (r->limit_rate_after == 0) { + r->limit_rate_after = clcf->limit_rate_after; + } + if (clcf->handler) { r->content_handler = clcf->handler; } diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h --- a/src/http/ngx_http_request.h +++ b/src/http/ngx_http_request.h @@ -420,6 +420,7 @@ struct ngx_http_request_s { #endif size_t limit_rate; + size_t limit_rate_after; /* used to learn the Apache compatible response length without a header */ size_t header_size; diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c --- a/src/http/ngx_http_variables.c +++ b/src/http/ngx_http_variables.c @@ -298,6 +298,11 @@ static ngx_http_variable_t ngx_http_cor offsetof(ngx_http_request_t, limit_rate), NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 }, + { ngx_string("limit_rate_after"), ngx_http_variable_request_set_size, + ngx_http_variable_request_get_size, + offsetof(ngx_http_request_t, limit_rate_after), + NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 }, + { ngx_string("connection"), NULL, ngx_http_variable_connection, 0, 0, 0 }, diff --git a/src/http/ngx_http_write_filter_module.c b/src/http/ngx_http_write_filter_module.c --- a/src/http/ngx_http_write_filter_module.c +++ b/src/http/ngx_http_write_filter_module.c @@ -208,7 +208,7 @@ ngx_http_write_filter(ngx_http_request_t if (r->limit_rate) { limit = (off_t) r->limit_rate * (ngx_time() - r->start_sec + 1) - - (c->sent - clcf->limit_rate_after); + - (c->sent - r->limit_rate_after); if (limit <= 0) { c->write->delayed = 1; @@ -249,14 +249,14 @@ ngx_http_write_filter(ngx_http_request_t nsent = c->sent; - if (clcf->limit_rate_after) { + if (r->limit_rate_after) { - sent -= clcf->limit_rate_after; + sent -= r->limit_rate_after; if (sent < 0) { sent = 0; } - nsent -= clcf->limit_rate_after; + nsent -= r->limit_rate_after; if (nsent < 0) { nsent = 0; }