Mercurial > hg > nginx-quic
comparison src/http/ngx_http_special_response.c @ 26:53cb81681040
nginx-0.0.1-2002-12-15-09:25:09 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 15 Dec 2002 06:25:09 +0000 |
parents | 77c7629a2627 |
children | f1ee46c036a4 |
comparison
equal
deleted
inserted
replaced
25:a8b156554dfe | 26:53cb81681040 |
---|---|
1 | |
2 #include <nginx.h> | |
3 | |
4 #include <ngx_config.h> | |
5 #include <ngx_core.h> | |
6 #include <ngx_string.h> | |
7 #include <ngx_http.h> | |
8 | |
9 static char error_tail[] = | |
10 "<hr><center>" NGINX_VER "</center>" CRLF | |
11 "</body>" CRLF | |
12 "</html>" CRLF | |
13 ; | |
14 | |
15 static char error_400_page[] = | |
16 "<html>" CRLF | |
17 "<head><title>400 Bad Request</title></head>" CRLF | |
18 "<body bgcolor=\"white\">" CRLF | |
19 "<center><h1>400 Bad Request</h1></center>" CRLF | |
20 ; | |
21 | |
22 static char error_404_page[] = | |
23 "<html>" CRLF | |
24 "<head><title>404 Not Found</title></head>" CRLF | |
25 "<body bgcolor=\"white\">" CRLF | |
26 "<center><h1>404 Not Found</h1></center>" CRLF | |
27 ; | |
1 | 28 |
2 | 29 |
3 #include <ngx_config.h> | 30 static ngx_str_t error_pages[] = { |
4 #if 0 | 31 { 0, NULL}, /* 301 */ |
5 #include <ngx_core.h> | 32 { 0, NULL}, /* 302 */ |
6 #endif | 33 { 0, NULL}, /* 303 */ |
7 #include <ngx_http.h> | 34 { 0, NULL}, /* 304 */ |
8 | 35 |
36 { sizeof(error_400_page) - 1, error_400_page }, | |
37 { 0, NULL}, /* 401 */ | |
38 { 0, NULL}, /* 402 */ | |
39 { 0, NULL}, /* 403 */ | |
40 { sizeof(error_404_page) - 1, error_404_page }, | |
41 | |
42 { 0, NULL} /* 500 */ | |
43 }; | |
9 | 44 |
10 int ngx_http_special_response(ngx_http_request_t *r, int error) | 45 int ngx_http_special_response(ngx_http_request_t *r, int error) |
11 { | 46 { |
12 switch (error) { | 47 int rc, err, len; |
48 ngx_hunk_t *message, *tail; | |
13 | 49 |
14 default: | 50 len = 0; |
15 r->headers_out.status = error; | |
16 return ngx_http_header_filter(r); | |
17 | 51 |
18 } | 52 r->headers_out.status = error; |
19 | 53 |
20 return ngx_http_error(r, error); | 54 if (error < NGX_HTTP_BAD_REQUEST) |
55 err = error - NGX_HTTP_MOVED_PERMANENTLY; | |
56 | |
57 else if (error < NGX_HTTP_INTERNAL_SERVER_ERROR) | |
58 err = error - NGX_HTTP_BAD_REQUEST + 4; | |
59 | |
60 else | |
61 err = NGX_HTTP_INTERNAL_SERVER_ERROR + 4 + 5; | |
62 | |
63 if (error_pages[err].len == 0) | |
64 r->headers_out.content_length = -1; | |
65 else | |
66 r->headers_out.content_length = error_pages[err].len | |
67 + len + sizeof(error_tail); | |
68 | |
69 ngx_http_send_header(r); | |
70 | |
71 if (error_pages[err].len == 0) | |
72 return NGX_OK; | |
73 | |
74 ngx_test_null(message, ngx_pcalloc(r->pool, sizeof(ngx_hunk_t)), | |
75 NGX_HTTP_INTERNAL_SERVER_ERROR); | |
76 | |
77 message->type = NGX_HUNK_MEMORY; | |
78 message->pos.mem = error_pages[err].data; | |
79 message->last.mem = error_pages[err].data + error_pages[err].len; | |
80 | |
81 rc = ngx_http_output_filter(r, message); | |
82 | |
83 ngx_test_null(tail, ngx_pcalloc(r->pool, sizeof(ngx_hunk_t)), | |
84 NGX_HTTP_INTERNAL_SERVER_ERROR); | |
85 | |
86 tail->type = NGX_HUNK_MEMORY|NGX_HUNK_LAST; | |
87 tail->pos.mem = error_tail; | |
88 tail->last.mem = error_tail + sizeof(error_tail); | |
89 | |
90 rc = ngx_http_output_filter(r, tail); | |
21 } | 91 } |