diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2011-09-15 19:21:19 +0000 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2011-09-15 19:21:19 +0000 |
commit | f84c69a3014dd2c4479e4c07e487f8aaa22d336f (patch) | |
tree | a0ff6d55a28afe7b4c2116b09ab2be071d77a829 | |
parent | 4686f30a0c2f3746d022e6a5855847d4738d264f (diff) | |
download | nginx-f84c69a3014dd2c4479e4c07e487f8aaa22d336f.tar.gz nginx-f84c69a3014dd2c4479e4c07e487f8aaa22d336f.zip |
Upstream: Connection header processing.
-rw-r--r-- | src/http/ngx_http_upstream.c | 21 | ||||
-rw-r--r-- | src/http/ngx_http_upstream.h | 1 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index 3f0259aeb..d3d433b24 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -91,6 +91,8 @@ static ngx_int_t ngx_http_upstream_process_buffering(ngx_http_request_t *r, ngx_table_elt_t *h, ngx_uint_t offset); static ngx_int_t ngx_http_upstream_process_charset(ngx_http_request_t *r, ngx_table_elt_t *h, ngx_uint_t offset); +static ngx_int_t ngx_http_upstream_process_connection(ngx_http_request_t *r, + ngx_table_elt_t *h, ngx_uint_t offset); static ngx_int_t ngx_http_upstream_process_transfer_encoding(ngx_http_request_t *r, ngx_table_elt_t *h, ngx_uint_t offset); @@ -218,7 +220,7 @@ ngx_http_upstream_header_t ngx_http_upstream_headers_in[] = { offsetof(ngx_http_headers_out_t, accept_ranges), 1 }, { ngx_string("Connection"), - ngx_http_upstream_ignore_header_line, 0, + ngx_http_upstream_process_connection, 0, ngx_http_upstream_ignore_header_line, 0, 0 }, { ngx_string("Keep-Alive"), @@ -3372,6 +3374,23 @@ ngx_http_upstream_process_charset(ngx_http_request_t *r, ngx_table_elt_t *h, static ngx_int_t +ngx_http_upstream_process_connection(ngx_http_request_t *r, ngx_table_elt_t *h, + ngx_uint_t offset) +{ + r->upstream->headers_in.connection = h; + + if (ngx_strlcasestrn(h->value.data, h->value.data + h->value.len, + (u_char *) "close", 5 - 1) + != NULL) + { + r->upstream->headers_in.connection_close = 1; + } + + return NGX_OK; +} + + +static ngx_int_t ngx_http_upstream_process_transfer_encoding(ngx_http_request_t *r, ngx_table_elt_t *h, ngx_uint_t offset) { diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h index 4bb79575c..bcdd64b16 100644 --- a/src/http/ngx_http_upstream.h +++ b/src/http/ngx_http_upstream.h @@ -227,6 +227,7 @@ typedef struct { ngx_array_t cache_control; + unsigned connection_close:1; unsigned chunked:1; } ngx_http_upstream_headers_in_t; |