Mercurial > hg > nginx
diff src/http/modules/ngx_http_header_filter.c @ 1:d220029ac7f3
nginx-0.0.1-2002-08-15-21:20:26 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 15 Aug 2002 17:20:26 +0000 |
parents | |
children | ffffe1499bce |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/src/http/modules/ngx_http_header_filter.c @@ -0,0 +1,55 @@ + + +typedef struct { + int len; + char *line; +} line; + + +static line http_codes[] = { + { 6, "200 OK" } +}; + + + + +int ngx_http_header_filter(ngx_http_request_t *r) +{ + int status; + ngx_hunk_t *h; + + ngx_test_null(h, ngx_get_hunk(r->pool, 1024, 0, 64), NGX_HTTP_FILTER_ERROR); + + status = r->headers_out->status - GX_HTTP_OK; + + ngx_memcpy(h->pos.mem, "HTTP/1.0 ", 9); + h->pos.mem += 9; + ngx_memcpy(h->pos.mem, http_codes[status].line, http_codes[status].len); + h->pos.mem += http_codes[status].len; + *(h->pos.mem++) = CR; *(h->pos.mem++) = LF; + + memcpy(h->pos.mem, "Date: ", 6); + h->pos.mem += 6; + h->pos.mem += ngx_http_get_time(h->pos.mem, time()); + *(h->pos.mem++) = CR; *(h->pos.mem++) = LF; + + /* 2^64 is 20 characters */ + if (r->headers_out->content_length) + h->pos.mem += ngx_snprintf(h->pos.mem, 49, "Content-Length: %d" CRLF, + r->headers_out->content_length); + + /* check */ + + memcpy(h->pos.mem, "Server: ", 8); + h->pos.mem += 8; + if (r->headers_out->server) { + h->pos.mem = ngx_cpystrn(h->pos.mem, r->headers_out->server, + h->last.mem - h->pos.mem); + check space + } else { + ngx_memcpy(h->pos.mem, NGINX_VER, sizeof(NGINX_VER)); + h->pos.mem += sizeof(NGINX_VER); + } + *(h->pos.mem++) = CR; *(h->pos.mem++) = LF; + +}