Mercurial > hg > nginx-quic
comparison src/http/ngx_http_variables.c @ 7504:c19ca381b2e6
Variables support in limit_rate and limit_rate_after (ticket #293).
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Wed, 24 Apr 2019 16:38:54 +0300 |
parents | 81d49f85afed |
children | 06b01840bd42 |
comparison
equal
deleted
inserted
replaced
7503:b82162b8496a | 7504:c19ca381b2e6 |
---|---|
20 static void ngx_http_variable_request_set(ngx_http_request_t *r, | 20 static void ngx_http_variable_request_set(ngx_http_request_t *r, |
21 ngx_http_variable_value_t *v, uintptr_t data); | 21 ngx_http_variable_value_t *v, uintptr_t data); |
22 #endif | 22 #endif |
23 static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r, | 23 static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r, |
24 ngx_http_variable_value_t *v, uintptr_t data); | 24 ngx_http_variable_value_t *v, uintptr_t data); |
25 static void ngx_http_variable_request_set_size(ngx_http_request_t *r, | |
26 ngx_http_variable_value_t *v, uintptr_t data); | |
27 static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r, | 25 static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r, |
28 ngx_http_variable_value_t *v, uintptr_t data); | 26 ngx_http_variable_value_t *v, uintptr_t data); |
29 | 27 |
30 static ngx_int_t ngx_http_variable_cookies(ngx_http_request_t *r, | 28 static ngx_int_t ngx_http_variable_cookies(ngx_http_request_t *r, |
31 ngx_http_variable_value_t *v, uintptr_t data); | 29 ngx_http_variable_value_t *v, uintptr_t data); |
121 static ngx_int_t ngx_http_variable_sent_connection(ngx_http_request_t *r, | 119 static ngx_int_t ngx_http_variable_sent_connection(ngx_http_request_t *r, |
122 ngx_http_variable_value_t *v, uintptr_t data); | 120 ngx_http_variable_value_t *v, uintptr_t data); |
123 static ngx_int_t ngx_http_variable_sent_keep_alive(ngx_http_request_t *r, | 121 static ngx_int_t ngx_http_variable_sent_keep_alive(ngx_http_request_t *r, |
124 ngx_http_variable_value_t *v, uintptr_t data); | 122 ngx_http_variable_value_t *v, uintptr_t data); |
125 static ngx_int_t ngx_http_variable_sent_transfer_encoding(ngx_http_request_t *r, | 123 static ngx_int_t ngx_http_variable_sent_transfer_encoding(ngx_http_request_t *r, |
124 ngx_http_variable_value_t *v, uintptr_t data); | |
125 static void ngx_http_variable_set_limit_rate(ngx_http_request_t *r, | |
126 ngx_http_variable_value_t *v, uintptr_t data); | 126 ngx_http_variable_value_t *v, uintptr_t data); |
127 | 127 |
128 static ngx_int_t ngx_http_variable_connection(ngx_http_request_t *r, | 128 static ngx_int_t ngx_http_variable_connection(ngx_http_request_t *r, |
129 ngx_http_variable_value_t *v, uintptr_t data); | 129 ngx_http_variable_value_t *v, uintptr_t data); |
130 static ngx_int_t ngx_http_variable_connection_requests(ngx_http_request_t *r, | 130 static ngx_int_t ngx_http_variable_connection_requests(ngx_http_request_t *r, |
319 offsetof(ngx_http_request_t, headers_out.cache_control), 0, 0 }, | 319 offsetof(ngx_http_request_t, headers_out.cache_control), 0, 0 }, |
320 | 320 |
321 { ngx_string("sent_http_link"), NULL, ngx_http_variable_headers, | 321 { ngx_string("sent_http_link"), NULL, ngx_http_variable_headers, |
322 offsetof(ngx_http_request_t, headers_out.link), 0, 0 }, | 322 offsetof(ngx_http_request_t, headers_out.link), 0, 0 }, |
323 | 323 |
324 { ngx_string("limit_rate"), ngx_http_variable_request_set_size, | 324 { ngx_string("limit_rate"), ngx_http_variable_set_limit_rate, |
325 ngx_http_variable_request_get_size, | 325 ngx_http_variable_request_get_size, |
326 offsetof(ngx_http_request_t, limit_rate), | 326 offsetof(ngx_http_request_t, limit_rate), |
327 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 }, | 327 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 }, |
328 | 328 |
329 { ngx_string("connection"), NULL, | 329 { ngx_string("connection"), NULL, |
786 | 786 |
787 return NGX_OK; | 787 return NGX_OK; |
788 } | 788 } |
789 | 789 |
790 | 790 |
791 static void | |
792 ngx_http_variable_request_set_size(ngx_http_request_t *r, | |
793 ngx_http_variable_value_t *v, uintptr_t data) | |
794 { | |
795 ssize_t s, *sp; | |
796 ngx_str_t val; | |
797 | |
798 val.len = v->len; | |
799 val.data = v->data; | |
800 | |
801 s = ngx_parse_size(&val); | |
802 | |
803 if (s == NGX_ERROR) { | |
804 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, | |
805 "invalid size \"%V\"", &val); | |
806 return; | |
807 } | |
808 | |
809 sp = (ssize_t *) ((char *) r + data); | |
810 | |
811 *sp = s; | |
812 | |
813 return; | |
814 } | |
815 | |
816 | |
817 static ngx_int_t | 791 static ngx_int_t |
818 ngx_http_variable_header(ngx_http_request_t *r, ngx_http_variable_value_t *v, | 792 ngx_http_variable_header(ngx_http_request_t *r, ngx_http_variable_value_t *v, |
819 uintptr_t data) | 793 uintptr_t data) |
820 { | 794 { |
821 ngx_table_elt_t *h; | 795 ngx_table_elt_t *h; |
1988 } else { | 1962 } else { |
1989 v->not_found = 1; | 1963 v->not_found = 1; |
1990 } | 1964 } |
1991 | 1965 |
1992 return NGX_OK; | 1966 return NGX_OK; |
1967 } | |
1968 | |
1969 | |
1970 static void | |
1971 ngx_http_variable_set_limit_rate(ngx_http_request_t *r, | |
1972 ngx_http_variable_value_t *v, uintptr_t data) | |
1973 { | |
1974 ssize_t s; | |
1975 ngx_str_t val; | |
1976 | |
1977 val.len = v->len; | |
1978 val.data = v->data; | |
1979 | |
1980 s = ngx_parse_size(&val); | |
1981 | |
1982 if (s == NGX_ERROR) { | |
1983 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, | |
1984 "invalid $limit_rate \"%V\"", &val); | |
1985 return; | |
1986 } | |
1987 | |
1988 r->limit_rate = s; | |
1989 r->limit_rate_set = 1; | |
1993 } | 1990 } |
1994 | 1991 |
1995 | 1992 |
1996 static ngx_int_t | 1993 static ngx_int_t |
1997 ngx_http_variable_request_completion(ngx_http_request_t *r, | 1994 ngx_http_variable_request_completion(ngx_http_request_t *r, |