Latest update - 7505

This commit is contained in:
2019-04-25 08:30:35 +09:00
parent 7564cabbbe
commit dd71767aff
12 changed files with 215 additions and 56 deletions
+13 -11
View File
@@ -493,7 +493,7 @@ static ngx_command_t ngx_http_core_commands[] = {
{ ngx_string("limit_rate"), { ngx_string("limit_rate"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|NGX_CONF_TAKE1, |NGX_CONF_TAKE1,
ngx_conf_set_size_slot, ngx_http_set_complex_value_size_slot,
NGX_HTTP_LOC_CONF_OFFSET, NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_core_loc_conf_t, limit_rate), offsetof(ngx_http_core_loc_conf_t, limit_rate),
NULL }, NULL },
@@ -501,7 +501,7 @@ static ngx_command_t ngx_http_core_commands[] = {
{ ngx_string("limit_rate_after"), { ngx_string("limit_rate_after"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|NGX_CONF_TAKE1, |NGX_CONF_TAKE1,
ngx_conf_set_size_slot, ngx_http_set_complex_value_size_slot,
NGX_HTTP_LOC_CONF_OFFSET, NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_core_loc_conf_t, limit_rate_after), offsetof(ngx_http_core_loc_conf_t, limit_rate_after),
NULL }, NULL },
@@ -1295,10 +1295,6 @@ ngx_http_update_location_config(ngx_http_request_t *r)
r->connection->tcp_nopush = NGX_TCP_NOPUSH_DISABLED; r->connection->tcp_nopush = NGX_TCP_NOPUSH_DISABLED;
} }
if (r->limit_rate == 0) {
r->limit_rate = clcf->limit_rate;
}
if (clcf->handler) { if (clcf->handler) {
r->content_handler = clcf->handler; r->content_handler = clcf->handler;
} }
@@ -3401,6 +3397,8 @@ ngx_http_core_create_loc_conf(ngx_conf_t *cf)
* clcf->exact_match = 0; * clcf->exact_match = 0;
* clcf->auto_redirect = 0; * clcf->auto_redirect = 0;
* clcf->alias = 0; * clcf->alias = 0;
* clcf->limit_rate = NULL;
* clcf->limit_rate_after = NULL;
* clcf->gzip_proxied = 0; * clcf->gzip_proxied = 0;
* clcf->keepalive_disable = 0; * clcf->keepalive_disable = 0;
*/ */
@@ -3433,8 +3431,6 @@ ngx_http_core_create_loc_conf(ngx_conf_t *cf)
clcf->send_timeout = NGX_CONF_UNSET_MSEC; clcf->send_timeout = NGX_CONF_UNSET_MSEC;
clcf->send_lowat = NGX_CONF_UNSET_SIZE; clcf->send_lowat = NGX_CONF_UNSET_SIZE;
clcf->postpone_output = NGX_CONF_UNSET_SIZE; clcf->postpone_output = NGX_CONF_UNSET_SIZE;
clcf->limit_rate = NGX_CONF_UNSET_SIZE;
clcf->limit_rate_after = NGX_CONF_UNSET_SIZE;
clcf->keepalive_timeout = NGX_CONF_UNSET_MSEC; clcf->keepalive_timeout = NGX_CONF_UNSET_MSEC;
clcf->keepalive_header = NGX_CONF_UNSET; clcf->keepalive_header = NGX_CONF_UNSET;
clcf->keepalive_requests = NGX_CONF_UNSET_UINT; clcf->keepalive_requests = NGX_CONF_UNSET_UINT;
@@ -3665,9 +3661,15 @@ ngx_http_core_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_conf_merge_size_value(conf->send_lowat, prev->send_lowat, 0); ngx_conf_merge_size_value(conf->send_lowat, prev->send_lowat, 0);
ngx_conf_merge_size_value(conf->postpone_output, prev->postpone_output, ngx_conf_merge_size_value(conf->postpone_output, prev->postpone_output,
1460); 1460);
ngx_conf_merge_size_value(conf->limit_rate, prev->limit_rate, 0);
ngx_conf_merge_size_value(conf->limit_rate_after, prev->limit_rate_after, if (conf->limit_rate == NULL) {
0); conf->limit_rate = prev->limit_rate;
}
if (conf->limit_rate_after == NULL) {
conf->limit_rate_after = prev->limit_rate_after;
}
ngx_conf_merge_msec_value(conf->keepalive_timeout, ngx_conf_merge_msec_value(conf->keepalive_timeout,
prev->keepalive_timeout, 75000); prev->keepalive_timeout, 75000);
ngx_conf_merge_sec_value(conf->keepalive_header, ngx_conf_merge_sec_value(conf->keepalive_header,
+3 -2
View File
@@ -349,13 +349,14 @@ struct ngx_http_core_loc_conf_s {
size_t client_body_buffer_size; /* client_body_buffer_size */ size_t client_body_buffer_size; /* client_body_buffer_size */
size_t send_lowat; /* send_lowat */ size_t send_lowat; /* send_lowat */
size_t postpone_output; /* postpone_output */ size_t postpone_output; /* postpone_output */
size_t limit_rate; /* limit_rate */
size_t limit_rate_after; /* limit_rate_after */
size_t sendfile_max_chunk; /* sendfile_max_chunk */ size_t sendfile_max_chunk; /* sendfile_max_chunk */
size_t read_ahead; /* read_ahead */ size_t read_ahead; /* read_ahead */
size_t subrequest_output_buffer_size; size_t subrequest_output_buffer_size;
/* subrequest_output_buffer_size */ /* subrequest_output_buffer_size */
ngx_http_complex_value_t *limit_rate; /* limit_rate */
ngx_http_complex_value_t *limit_rate_after; /* limit_rate_after */
ngx_msec_t client_body_timeout; /* client_body_timeout */ ngx_msec_t client_body_timeout; /* client_body_timeout */
ngx_msec_t send_timeout; /* send_timeout */ ngx_msec_t send_timeout; /* send_timeout */
ngx_msec_t keepalive_timeout; /* keepalive_timeout */ ngx_msec_t keepalive_timeout; /* keepalive_timeout */
+3
View File
@@ -515,6 +515,9 @@ struct ngx_http_request_s {
unsigned limit_conn_set:1; unsigned limit_conn_set:1;
unsigned limit_req_set:1; unsigned limit_req_set:1;
unsigned limit_rate_set:1;
unsigned limit_rate_after_set:1;
#if 0 #if 0
unsigned cacheable:1; unsigned cacheable:1;
#endif #endif
+61
View File
@@ -104,6 +104,37 @@ ngx_http_complex_value(ngx_http_request_t *r, ngx_http_complex_value_t *val,
} }
size_t
ngx_http_complex_value_size(ngx_http_request_t *r,
ngx_http_complex_value_t *val, size_t default_value)
{
size_t size;
ngx_str_t value;
if (val == NULL) {
return default_value;
}
if (val->lengths == NULL) {
return val->u.size;
}
if (ngx_http_complex_value(r, val, &value) != NGX_OK) {
return default_value;
}
size = ngx_parse_size(&value);
if (size == (size_t) NGX_ERROR) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"invalid size \"%V\"", &value);
return default_value;
}
return size;
}
ngx_int_t ngx_int_t
ngx_http_compile_complex_value(ngx_http_compile_complex_value_t *ccv) ngx_http_compile_complex_value(ngx_http_compile_complex_value_t *ccv)
{ {
@@ -244,6 +275,36 @@ ngx_http_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
} }
char *
ngx_http_set_complex_value_size_slot(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf)
{
char *p = conf;
char *rv;
ngx_http_complex_value_t *cv;
rv = ngx_http_set_complex_value_slot(cf, cmd, conf);
if (rv != NGX_CONF_OK) {
return rv;
}
cv = *(ngx_http_complex_value_t **) (p + cmd->offset);
if (cv->lengths) {
return NGX_CONF_OK;
}
cv->u.size = ngx_parse_size(&cv->value);
if (cv->u.size == (size_t) NGX_ERROR) {
return "invalid value";
}
return NGX_CONF_OK;
}
ngx_int_t ngx_int_t
ngx_http_test_predicates(ngx_http_request_t *r, ngx_array_t *predicates) ngx_http_test_predicates(ngx_http_request_t *r, ngx_array_t *predicates)
{ {
+8
View File
@@ -68,6 +68,10 @@ typedef struct {
ngx_uint_t *flushes; ngx_uint_t *flushes;
void *lengths; void *lengths;
void *values; void *values;
union {
size_t size;
} u;
} ngx_http_complex_value_t; } ngx_http_complex_value_t;
@@ -207,9 +211,13 @@ void ngx_http_script_flush_complex_value(ngx_http_request_t *r,
ngx_http_complex_value_t *val); ngx_http_complex_value_t *val);
ngx_int_t ngx_http_complex_value(ngx_http_request_t *r, ngx_int_t ngx_http_complex_value(ngx_http_request_t *r,
ngx_http_complex_value_t *val, ngx_str_t *value); ngx_http_complex_value_t *val, ngx_str_t *value);
size_t ngx_http_complex_value_size(ngx_http_request_t *r,
ngx_http_complex_value_t *val, size_t default_value);
ngx_int_t ngx_http_compile_complex_value(ngx_http_compile_complex_value_t *ccv); ngx_int_t ngx_http_compile_complex_value(ngx_http_compile_complex_value_t *ccv);
char *ngx_http_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *ngx_http_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf); void *conf);
char *ngx_http_set_complex_value_size_slot(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
ngx_int_t ngx_http_test_predicates(ngx_http_request_t *r, ngx_int_t ngx_http_test_predicates(ngx_http_request_t *r,
+2
View File
@@ -2979,6 +2979,7 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
ngx_http_upstream_process_non_buffered_downstream; ngx_http_upstream_process_non_buffered_downstream;
r->limit_rate = 0; r->limit_rate = 0;
r->limit_rate_set = 1;
if (u->input_filter_init(u->input_filter_ctx) == NGX_ERROR) { if (u->input_filter_init(u->input_filter_ctx) == NGX_ERROR) {
ngx_http_upstream_finalize_request(r, u, NGX_ERROR); ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
@@ -4806,6 +4807,7 @@ ngx_http_upstream_process_limit_rate(ngx_http_request_t *r, ngx_table_elt_t *h,
if (n != NGX_ERROR) { if (n != NGX_ERROR) {
r->limit_rate = (size_t) n; r->limit_rate = (size_t) n;
r->limit_rate_set = 1;
} }
return NGX_OK; return NGX_OK;
+26 -29
View File
@@ -22,8 +22,6 @@ static void ngx_http_variable_request_set(ngx_http_request_t *r,
#endif #endif
static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r, static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data); ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r, static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data); ngx_http_variable_value_t *v, uintptr_t data);
@@ -124,6 +122,8 @@ static ngx_int_t ngx_http_variable_sent_keep_alive(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data); ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_sent_transfer_encoding(ngx_http_request_t *r, static ngx_int_t ngx_http_variable_sent_transfer_encoding(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data); ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_set_limit_rate(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_connection(ngx_http_request_t *r, static ngx_int_t ngx_http_variable_connection(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data); ngx_http_variable_value_t *v, uintptr_t data);
@@ -321,7 +321,7 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
{ ngx_string("sent_http_link"), NULL, ngx_http_variable_headers, { ngx_string("sent_http_link"), NULL, ngx_http_variable_headers,
offsetof(ngx_http_request_t, headers_out.link), 0, 0 }, offsetof(ngx_http_request_t, headers_out.link), 0, 0 },
{ ngx_string("limit_rate"), ngx_http_variable_request_set_size, { ngx_string("limit_rate"), ngx_http_variable_set_limit_rate,
ngx_http_variable_request_get_size, ngx_http_variable_request_get_size,
offsetof(ngx_http_request_t, limit_rate), offsetof(ngx_http_request_t, limit_rate),
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 }, NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
@@ -788,32 +788,6 @@ ngx_http_variable_request_get_size(ngx_http_request_t *r,
} }
static void
ngx_http_variable_request_set_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
ssize_t s, *sp;
ngx_str_t val;
val.len = v->len;
val.data = v->data;
s = ngx_parse_size(&val);
if (s == NGX_ERROR) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"invalid size \"%V\"", &val);
return;
}
sp = (ssize_t *) ((char *) r + data);
*sp = s;
return;
}
static ngx_int_t static ngx_int_t
ngx_http_variable_header(ngx_http_request_t *r, ngx_http_variable_value_t *v, ngx_http_variable_header(ngx_http_request_t *r, ngx_http_variable_value_t *v,
uintptr_t data) uintptr_t data)
@@ -1993,6 +1967,29 @@ ngx_http_variable_sent_transfer_encoding(ngx_http_request_t *r,
} }
static void
ngx_http_variable_set_limit_rate(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
ssize_t s;
ngx_str_t val;
val.len = v->len;
val.data = v->data;
s = ngx_parse_size(&val);
if (s == NGX_ERROR) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"invalid $limit_rate \"%V\"", &val);
return;
}
r->limit_rate = s;
r->limit_rate_set = 1;
}
static ngx_int_t static ngx_int_t
ngx_http_variable_request_completion(ngx_http_request_t *r, ngx_http_variable_request_completion(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data) ngx_http_variable_value_t *v, uintptr_t data)
+10 -2
View File
@@ -250,9 +250,17 @@ ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
return NGX_ERROR; return NGX_ERROR;
} }
if (!r->limit_rate_set) {
r->limit_rate = ngx_http_complex_value_size(r, clcf->limit_rate, 0);
r->limit_rate_set = 1;
}
if (r->limit_rate) { if (r->limit_rate) {
if (r->limit_rate_after == 0) {
r->limit_rate_after = clcf->limit_rate_after; if (!r->limit_rate_after_set) {
r->limit_rate_after = ngx_http_complex_value_size(r,
clcf->limit_rate_after, 0);
r->limit_rate_after_set = 1;
} }
limit = (off_t) r->limit_rate * (ngx_time() - r->start_sec + 1) limit = (off_t) r->limit_rate * (ngx_time() - r->start_sec + 1)
+17 -12
View File
@@ -24,8 +24,8 @@ typedef struct {
ngx_msec_t timeout; ngx_msec_t timeout;
ngx_msec_t next_upstream_timeout; ngx_msec_t next_upstream_timeout;
size_t buffer_size; size_t buffer_size;
size_t upload_rate; ngx_stream_complex_value_t *upload_rate;
size_t download_rate; ngx_stream_complex_value_t *download_rate;
ngx_uint_t requests; ngx_uint_t requests;
ngx_uint_t responses; ngx_uint_t responses;
ngx_uint_t next_upstream_tries; ngx_uint_t next_upstream_tries;
@@ -184,14 +184,14 @@ static ngx_command_t ngx_stream_proxy_commands[] = {
{ ngx_string("proxy_upload_rate"), { ngx_string("proxy_upload_rate"),
NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1, NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
ngx_conf_set_size_slot, ngx_stream_set_complex_value_size_slot,
NGX_STREAM_SRV_CONF_OFFSET, NGX_STREAM_SRV_CONF_OFFSET,
offsetof(ngx_stream_proxy_srv_conf_t, upload_rate), offsetof(ngx_stream_proxy_srv_conf_t, upload_rate),
NULL }, NULL },
{ ngx_string("proxy_download_rate"), { ngx_string("proxy_download_rate"),
NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1, NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_TAKE1,
ngx_conf_set_size_slot, ngx_stream_set_complex_value_size_slot,
NGX_STREAM_SRV_CONF_OFFSET, NGX_STREAM_SRV_CONF_OFFSET,
offsetof(ngx_stream_proxy_srv_conf_t, download_rate), offsetof(ngx_stream_proxy_srv_conf_t, download_rate),
NULL }, NULL },
@@ -895,6 +895,9 @@ ngx_stream_proxy_init_upstream(ngx_stream_session_t *s)
u->proxy_protocol = 0; u->proxy_protocol = 0;
} }
u->upload_rate = ngx_stream_complex_value_size(s, pscf->upload_rate, 0);
u->download_rate = ngx_stream_complex_value_size(s, pscf->download_rate, 0);
u->connected = 1; u->connected = 1;
pc->read->handler = ngx_stream_proxy_upstream_handler; pc->read->handler = ngx_stream_proxy_upstream_handler;
@@ -1532,7 +1535,7 @@ ngx_stream_proxy_process(ngx_stream_session_t *s, ngx_uint_t from_upstream,
src = pc; src = pc;
dst = c; dst = c;
b = &u->upstream_buf; b = &u->upstream_buf;
limit_rate = pscf->download_rate; limit_rate = u->download_rate;
received = &u->received; received = &u->received;
packets = &u->responses; packets = &u->responses;
out = &u->downstream_out; out = &u->downstream_out;
@@ -1544,7 +1547,7 @@ ngx_stream_proxy_process(ngx_stream_session_t *s, ngx_uint_t from_upstream,
src = c; src = c;
dst = pc; dst = pc;
b = &u->downstream_buf; b = &u->downstream_buf;
limit_rate = pscf->upload_rate; limit_rate = u->upload_rate;
received = &s->received; received = &s->received;
packets = &u->requests; packets = &u->requests;
out = &u->upstream_out; out = &u->upstream_out;
@@ -1955,6 +1958,8 @@ ngx_stream_proxy_create_srv_conf(ngx_conf_t *cf)
* conf->ssl_certificate = { 0, NULL }; * conf->ssl_certificate = { 0, NULL };
* conf->ssl_certificate_key = { 0, NULL }; * conf->ssl_certificate_key = { 0, NULL };
* *
* conf->upload_rate = NULL;
* conf->download_rate = NULL;
* conf->ssl = NULL; * conf->ssl = NULL;
* conf->upstream = NULL; * conf->upstream = NULL;
* conf->upstream_value = NULL; * conf->upstream_value = NULL;
@@ -1964,8 +1969,6 @@ ngx_stream_proxy_create_srv_conf(ngx_conf_t *cf)
conf->timeout = NGX_CONF_UNSET_MSEC; conf->timeout = NGX_CONF_UNSET_MSEC;
conf->next_upstream_timeout = NGX_CONF_UNSET_MSEC; conf->next_upstream_timeout = NGX_CONF_UNSET_MSEC;
conf->buffer_size = NGX_CONF_UNSET_SIZE; conf->buffer_size = NGX_CONF_UNSET_SIZE;
conf->upload_rate = NGX_CONF_UNSET_SIZE;
conf->download_rate = NGX_CONF_UNSET_SIZE;
conf->requests = NGX_CONF_UNSET_UINT; conf->requests = NGX_CONF_UNSET_UINT;
conf->responses = NGX_CONF_UNSET_UINT; conf->responses = NGX_CONF_UNSET_UINT;
conf->next_upstream_tries = NGX_CONF_UNSET_UINT; conf->next_upstream_tries = NGX_CONF_UNSET_UINT;
@@ -2005,11 +2008,13 @@ ngx_stream_proxy_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_conf_merge_size_value(conf->buffer_size, ngx_conf_merge_size_value(conf->buffer_size,
prev->buffer_size, 16384); prev->buffer_size, 16384);
ngx_conf_merge_size_value(conf->upload_rate, if (conf->upload_rate == NULL) {
prev->upload_rate, 0); conf->upload_rate = prev->upload_rate;
}
ngx_conf_merge_size_value(conf->download_rate, if (conf->download_rate == NULL) {
prev->download_rate, 0); conf->download_rate = prev->download_rate;
}
ngx_conf_merge_uint_value(conf->requests, ngx_conf_merge_uint_value(conf->requests,
prev->requests, 0); prev->requests, 0);
+61
View File
@@ -105,6 +105,37 @@ ngx_stream_complex_value(ngx_stream_session_t *s,
} }
size_t
ngx_stream_complex_value_size(ngx_stream_session_t *s,
ngx_stream_complex_value_t *val, size_t default_value)
{
size_t size;
ngx_str_t value;
if (val == NULL) {
return default_value;
}
if (val->lengths == NULL) {
return val->u.size;
}
if (ngx_stream_complex_value(s, val, &value) != NGX_OK) {
return default_value;
}
size = ngx_parse_size(&value);
if (size == (size_t) NGX_ERROR) {
ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
"invalid size \"%V\"", &value);
return default_value;
}
return size;
}
ngx_int_t ngx_int_t
ngx_stream_compile_complex_value(ngx_stream_compile_complex_value_t *ccv) ngx_stream_compile_complex_value(ngx_stream_compile_complex_value_t *ccv)
{ {
@@ -246,6 +277,36 @@ ngx_stream_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd,
} }
char *
ngx_stream_set_complex_value_size_slot(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf)
{
char *p = conf;
char *rv;
ngx_stream_complex_value_t *cv;
rv = ngx_stream_set_complex_value_slot(cf, cmd, conf);
if (rv != NGX_CONF_OK) {
return rv;
}
cv = *(ngx_stream_complex_value_t **) (p + cmd->offset);
if (cv->lengths) {
return NGX_CONF_OK;
}
cv->u.size = ngx_parse_size(&cv->value);
if (cv->u.size == (size_t) NGX_ERROR) {
return "invalid value";
}
return NGX_CONF_OK;
}
ngx_uint_t ngx_uint_t
ngx_stream_script_variables_count(ngx_str_t *value) ngx_stream_script_variables_count(ngx_str_t *value)
{ {
+8
View File
@@ -56,6 +56,10 @@ typedef struct {
ngx_uint_t *flushes; ngx_uint_t *flushes;
void *lengths; void *lengths;
void *values; void *values;
union {
size_t size;
} u;
} ngx_stream_complex_value_t; } ngx_stream_complex_value_t;
@@ -102,10 +106,14 @@ void ngx_stream_script_flush_complex_value(ngx_stream_session_t *s,
ngx_stream_complex_value_t *val); ngx_stream_complex_value_t *val);
ngx_int_t ngx_stream_complex_value(ngx_stream_session_t *s, ngx_int_t ngx_stream_complex_value(ngx_stream_session_t *s,
ngx_stream_complex_value_t *val, ngx_str_t *value); ngx_stream_complex_value_t *val, ngx_str_t *value);
size_t ngx_stream_complex_value_size(ngx_stream_session_t *s,
ngx_stream_complex_value_t *val, size_t default_value);
ngx_int_t ngx_stream_compile_complex_value( ngx_int_t ngx_stream_compile_complex_value(
ngx_stream_compile_complex_value_t *ccv); ngx_stream_compile_complex_value_t *ccv);
char *ngx_stream_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd, char *ngx_stream_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf); void *conf);
char *ngx_stream_set_complex_value_size_slot(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
ngx_uint_t ngx_stream_script_variables_count(ngx_str_t *value); ngx_uint_t ngx_stream_script_variables_count(ngx_str_t *value);
+3
View File
@@ -132,6 +132,9 @@ typedef struct {
ngx_uint_t responses; ngx_uint_t responses;
ngx_msec_t start_time; ngx_msec_t start_time;
size_t upload_rate;
size_t download_rate;
ngx_str_t ssl_name; ngx_str_t ssl_name;
ngx_stream_upstream_srv_conf_t *upstream; ngx_stream_upstream_srv_conf_t *upstream;