diff options
author | Igor Sysoev <igor@sysoev.ru> | 2008-08-04 11:29:09 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2008-08-04 11:29:09 +0000 |
commit | b5bc3f989ff0d70508705a10708c4f8b84913dc0 (patch) | |
tree | d355635e4b56da26bc350e23f0302c8ec65dbea1 /src/http/ngx_http_core_module.c | |
parent | 42511c05c76b8434aae7a33c26516f7368c3c479 (diff) | |
download | nginx-b5bc3f989ff0d70508705a10708c4f8b84913dc0.tar.gz nginx-b5bc3f989ff0d70508705a10708c4f8b84913dc0.zip |
test Content-Type via hash:
*) ngx_http_test_content_type()
*) ngx_http_types_slot()
*) ngx_http_merge_types()
Diffstat (limited to 'src/http/ngx_http_core_module.c')
-rw-r--r-- | src/http/ngx_http_core_module.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index 7ac92f691..776438ba0 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -1302,6 +1302,44 @@ ngx_http_core_send_continue(ngx_http_request_t *r) } +void * +ngx_http_test_content_type(ngx_http_request_t *r, ngx_hash_t *types_hash) +{ + u_char c, *p; + ngx_uint_t i, hash; + + if (r->headers_out.content_type.len == 0) { + return NULL; + } + + if (r->headers_out.content_type_lowcase == NULL) { + + p = ngx_pnalloc(r->pool, r->headers_out.content_type_len); + + if (p == NULL) { + return NULL; + } + + r->headers_out.content_type_lowcase = p; + + hash = 0; + + for (i = 0; i < r->headers_out.content_type_len; i++) { + c = ngx_tolower(r->headers_out.content_type.data[i]); + hash = ngx_hash(hash, c); + *p++ = c; + } + + r->headers_out.content_type_hash = hash; + } + + return ngx_hash_find(types_hash, + r->headers_out.content_type_hash, + r->headers_out.content_type_lowcase, + r->headers_out.content_type_len); +} + + ngx_int_t ngx_http_set_content_type(ngx_http_request_t *r) { |