# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# 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;
             }
