Mercurial > hg > nginx-quic
comparison src/http/ngx_http_special_response.c @ 59:e8cdc2989cee
nginx-0.0.1-2003-02-06-20:21:13 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 06 Feb 2003 17:21:13 +0000 |
parents | d81326c3b21b |
children | 5a7d1aaa1618 |
comparison
equal
deleted
inserted
replaced
58:6b13b1cadabe | 59:e8cdc2989cee |
---|---|
3 | 3 |
4 #include <ngx_config.h> | 4 #include <ngx_config.h> |
5 #include <ngx_core.h> | 5 #include <ngx_core.h> |
6 #include <ngx_string.h> | 6 #include <ngx_string.h> |
7 #include <ngx_http.h> | 7 #include <ngx_http.h> |
8 #include <ngx_http_output_filter.h> | |
9 | |
8 | 10 |
9 static char error_tail[] = | 11 static char error_tail[] = |
10 "<hr><center>" NGINX_VER "</center>" CRLF | 12 "<hr><center>" NGINX_VER "</center>" CRLF |
11 "</body>" CRLF | 13 "</body>" CRLF |
12 "</html>" CRLF | 14 "</html>" CRLF |
13 ; | 15 ; |
16 | |
14 | 17 |
15 static char error_400_page[] = | 18 static char error_400_page[] = |
16 "<html>" CRLF | 19 "<html>" CRLF |
17 "<head><title>400 Bad Request</title></head>" CRLF | 20 "<head><title>400 Bad Request</title></head>" CRLF |
18 "<body bgcolor=\"white\">" CRLF | 21 "<body bgcolor=\"white\">" CRLF |
19 "<center><h1>400 Bad Request</h1></center>" CRLF | 22 "<center><h1>400 Bad Request</h1></center>" CRLF |
20 ; | 23 ; |
21 | 24 |
25 | |
22 static char error_403_page[] = | 26 static char error_403_page[] = |
23 "<html>" CRLF | 27 "<html>" CRLF |
24 "<head><title>403 Forbidden</title></head>" CRLF | 28 "<head><title>403 Forbidden</title></head>" CRLF |
25 "<body bgcolor=\"white\">" CRLF | 29 "<body bgcolor=\"white\">" CRLF |
26 "<center><h1>403 Forbidden</h1></center>" CRLF | 30 "<center><h1>403 Forbidden</h1></center>" CRLF |
27 ; | 31 ; |
28 | 32 |
33 | |
29 static char error_404_page[] = | 34 static char error_404_page[] = |
30 "<html>" CRLF | 35 "<html>" CRLF |
31 "<head><title>404 Not Found</title></head>" CRLF | 36 "<head><title>404 Not Found</title></head>" CRLF |
32 "<body bgcolor=\"white\">" CRLF | 37 "<body bgcolor=\"white\">" CRLF |
33 "<center><h1>404 Not Found</h1></center>" CRLF | 38 "<center><h1>404 Not Found</h1></center>" CRLF |
34 ; | 39 ; |
40 | |
35 | 41 |
36 static char error_500_page[] = | 42 static char error_500_page[] = |
37 "<html>" CRLF | 43 "<html>" CRLF |
38 "<head><title>500 Internal Server Error</title></head>" CRLF | 44 "<head><title>500 Internal Server Error</title></head>" CRLF |
39 "<body bgcolor=\"white\">" CRLF | 45 "<body bgcolor=\"white\">" CRLF |
54 { sizeof(error_404_page) - 1, error_404_page }, | 60 { sizeof(error_404_page) - 1, error_404_page }, |
55 | 61 |
56 { sizeof(error_500_page) - 1, error_500_page } | 62 { sizeof(error_500_page) - 1, error_500_page } |
57 }; | 63 }; |
58 | 64 |
65 | |
59 int ngx_http_special_response(ngx_http_request_t *r, int error) | 66 int ngx_http_special_response(ngx_http_request_t *r, int error) |
60 { | 67 { |
61 int rc, err, len; | 68 int err, len; |
62 ngx_hunk_t *message, *tail; | 69 ngx_hunk_t *message, *tail; |
63 | 70 |
64 len = 0; | 71 len = 0; |
65 | 72 |
66 r->headers_out.status = error; | 73 r->headers_out.status = error; |
78 r->headers_out.content_length = -1; | 85 r->headers_out.content_length = -1; |
79 else | 86 else |
80 r->headers_out.content_length = error_pages[err].len | 87 r->headers_out.content_length = error_pages[err].len |
81 + len + sizeof(error_tail); | 88 + len + sizeof(error_tail); |
82 | 89 |
83 ngx_http_send_header(r); | 90 if (ngx_http_send_header(r) == NGX_ERROR) { |
91 return NGX_ERROR; | |
92 } | |
84 | 93 |
85 if (error_pages[err].len == 0) | 94 if (error_pages[err].len == 0) { |
86 return NGX_OK; | 95 return NGX_OK; |
96 } | |
87 | 97 |
88 ngx_test_null(message, ngx_pcalloc(r->pool, sizeof(ngx_hunk_t)), | 98 ngx_test_null(message, ngx_pcalloc(r->pool, sizeof(ngx_hunk_t)), NGX_ERROR); |
89 NGX_HTTP_INTERNAL_SERVER_ERROR); | |
90 | 99 |
91 message->type = NGX_HUNK_MEMORY; | 100 message->type = NGX_HUNK_MEMORY; |
92 message->pos.mem = error_pages[err].data; | 101 message->pos.mem = error_pages[err].data; |
93 message->last.mem = error_pages[err].data + error_pages[err].len; | 102 message->last.mem = error_pages[err].data + error_pages[err].len; |
94 | 103 |
95 rc = ngx_http_output_filter(r, message); | 104 if (ngx_http_output_filter(r, message) == NGX_ERROR) { |
105 return NGX_ERROR; | |
106 } | |
96 | 107 |
97 ngx_test_null(tail, ngx_pcalloc(r->pool, sizeof(ngx_hunk_t)), | 108 ngx_test_null(tail, ngx_pcalloc(r->pool, sizeof(ngx_hunk_t)), NGX_ERROR); |
98 NGX_HTTP_INTERNAL_SERVER_ERROR); | |
99 | 109 |
100 tail->type = NGX_HUNK_MEMORY|NGX_HUNK_LAST; | 110 tail->type = NGX_HUNK_MEMORY|NGX_HUNK_LAST; |
101 tail->pos.mem = error_tail; | 111 tail->pos.mem = error_tail; |
102 tail->last.mem = error_tail + sizeof(error_tail); | 112 tail->last.mem = error_tail + sizeof(error_tail); |
103 | 113 |
104 rc = ngx_http_output_filter(r, tail); | 114 return ngx_http_output_filter(r, tail); |
105 } | 115 } |