diff options
author | Dmitry Volyntsev <xeioex@nginx.com> | 2019-05-28 15:57:35 +0300 |
---|---|---|
committer | Dmitry Volyntsev <xeioex@nginx.com> | 2019-05-28 15:57:35 +0300 |
commit | 9c147ab7d1d2bb93797aebf70d2cad4322eaefa0 (patch) | |
tree | ced087939db38fad86976c041c14cd9b32a3f7b5 /nginx/ngx_http_js_module.c | |
parent | 1301519e99819a25cfb5e75b7641dee81d546146 (diff) | |
download | njs-9c147ab7d1d2bb93797aebf70d2cad4322eaefa0.tar.gz njs-9c147ab7d1d2bb93797aebf70d2cad4322eaefa0.zip |
HTTP: improved getting of special response headers.
Diffstat (limited to 'nginx/ngx_http_js_module.c')
-rw-r--r-- | nginx/ngx_http_js_module.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/nginx/ngx_http_js_module.c b/nginx/ngx_http_js_module.c index dca47b80..a224ffd9 100644 --- a/nginx/ngx_http_js_module.c +++ b/nginx/ngx_http_js_module.c @@ -922,13 +922,44 @@ static njs_ret_t ngx_http_js_ext_get_header_out(njs_vm_t *vm, njs_value_t *value, void *obj, uintptr_t data) { + u_char *p, *start; nxt_str_t *v; + ngx_str_t *hdr; ngx_table_elt_t *h; ngx_http_request_t *r; + u_char content_len[NGX_OFF_T_LEN]; r = (ngx_http_request_t *) obj; v = (nxt_str_t *) data; + if (v->length == nxt_length("Content-Type") + && ngx_strncasecmp(v->start, (u_char *) "Content-Type", + v->length) == 0) + { + hdr = &r->headers_out.content_type; + return njs_vm_value_string_set(vm, value, hdr->data, hdr->len); + } + + if (v->length == nxt_length("Content-Length") + && ngx_strncasecmp(v->start, (u_char *) "Content-Length", + v->length) == 0) + { + if (r->headers_out.content_length == NULL + && r->headers_out.content_length_n >= 0) + { + p = ngx_sprintf(content_len, "%O", r->headers_out.content_length_n); + + start = njs_vm_value_string_alloc(vm, value, p - content_len); + if (start == NULL) { + return NJS_ERROR; + } + + ngx_memcpy(start, content_len, p - content_len); + + return NJS_OK; + } + } + h = ngx_http_js_get_header(&r->headers_out.headers.part, v->start, v->length); if (h == NULL) { |