Mercurial > hg > nginx-quic
comparison 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 |
comparison
equal
deleted
inserted
replaced
0:4eff17414a43 | 1:d220029ac7f3 |
---|---|
1 | |
2 | |
3 typedef struct { | |
4 int len; | |
5 char *line; | |
6 } line; | |
7 | |
8 | |
9 static line http_codes[] = { | |
10 { 6, "200 OK" } | |
11 }; | |
12 | |
13 | |
14 | |
15 | |
16 int ngx_http_header_filter(ngx_http_request_t *r) | |
17 { | |
18 int status; | |
19 ngx_hunk_t *h; | |
20 | |
21 ngx_test_null(h, ngx_get_hunk(r->pool, 1024, 0, 64), NGX_HTTP_FILTER_ERROR); | |
22 | |
23 status = r->headers_out->status - GX_HTTP_OK; | |
24 | |
25 ngx_memcpy(h->pos.mem, "HTTP/1.0 ", 9); | |
26 h->pos.mem += 9; | |
27 ngx_memcpy(h->pos.mem, http_codes[status].line, http_codes[status].len); | |
28 h->pos.mem += http_codes[status].len; | |
29 *(h->pos.mem++) = CR; *(h->pos.mem++) = LF; | |
30 | |
31 memcpy(h->pos.mem, "Date: ", 6); | |
32 h->pos.mem += 6; | |
33 h->pos.mem += ngx_http_get_time(h->pos.mem, time()); | |
34 *(h->pos.mem++) = CR; *(h->pos.mem++) = LF; | |
35 | |
36 /* 2^64 is 20 characters */ | |
37 if (r->headers_out->content_length) | |
38 h->pos.mem += ngx_snprintf(h->pos.mem, 49, "Content-Length: %d" CRLF, | |
39 r->headers_out->content_length); | |
40 | |
41 /* check */ | |
42 | |
43 memcpy(h->pos.mem, "Server: ", 8); | |
44 h->pos.mem += 8; | |
45 if (r->headers_out->server) { | |
46 h->pos.mem = ngx_cpystrn(h->pos.mem, r->headers_out->server, | |
47 h->last.mem - h->pos.mem); | |
48 check space | |
49 } else { | |
50 ngx_memcpy(h->pos.mem, NGINX_VER, sizeof(NGINX_VER)); | |
51 h->pos.mem += sizeof(NGINX_VER); | |
52 } | |
53 *(h->pos.mem++) = CR; *(h->pos.mem++) = LF; | |
54 | |
55 } |