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 }