Fawkes API  Fawkes Development Version
error_reply.cpp
1 
2 /***************************************************************************
3  * error_reply.h - Web request reply for an error page
4  *
5  * Created: Fri Oct 24 19:57:19 2008
6  * Copyright 2006-2009 Tim Niemueller [www.niemueller.de]
7  *
8  ****************************************************************************/
9 
10 /* This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Library General Public License for more details.
19  *
20  * Read the full text in the LICENSE.GPL file in the doc directory.
21  */
22 
23 #include <webview/error_reply.h>
24 
25 #include <core/exceptions/software.h>
26 #include <cstdio>
27 #include <cstdlib>
28 
29 namespace fawkes {
30 #if 0 /* just to make Emacs auto-indent happy */
31 }
32 #endif
33 
34 /** @class WebErrorPageReply <webview/error_reply.h>
35  * Static error page reply.
36  * Shows a simple error page based on the given code.
37  * @author Tim Niemueller
38  */
39 
40 /** Constructor.
41  * @param code error code, must be a 4xx or 5xx HTTP code
42  * @param format format for additional error message, use format as
43  * known from sprintf.
44  */
46  const char *format, ...)
47  : WebPageReply(code)
48 {
49  if ( ((int)code < 400) || ((int)code > 599) ) {
50  throw fawkes::OutOfBoundsException("Error code invalid", code, 400, 599);
51  }
52 
53  switch (code) {
54  case HTTP_BAD_REQUEST:
55  _title = "400 BAD_REQUEST";
56  _body = "<h1>400 BAD_REQUEST</h1>";
57  break;
58 
59  case HTTP_UNAUTHORIZED:
60  _title = "401 UNAUTHORIZED";
61  _body = "<h1>401 UNAUTHORIZED</h1>";
62  break;
63 
65  _title = "402 PAYMENT_REQUIRED";
66  _body = "<h1>402 PAYMENT_REQUIRED</h1>";
67  break;
68 
69  case HTTP_FORBIDDEN:
70  _title = "403 FORBIDDEN";
71  _body = "<h1>403 FORBIDDEN</h1>";
72  break;
73 
74  case HTTP_NOT_FOUND:
75  _title = "404 NOT_FOUND";
76  _body = "<h1>404 NOT_FOUND</h1>"; break;
77 
79  _title = "405 METHOD_NOT_ALLOWED";
80  _body = "<h1>405 METHOD_NOT_ALLOWED</h1>";
81  break;
82 
84  _title = "406 METHOD_NOT_ACCEPTABLE";
85  _body = "<h1>406 METHOD_NOT_ACCEPTABLE</h1>";
86  break;
87 
89  _title = "407 PROXY_AUTHENTICATION_REQUIRED";
90  _body = "<h1>407 PROXY_AUTHENTICATION_REQUIRED</h1>";
91  break;
92 
94  _title = "408 REQUEST_TIMEOUT";
95  _body = "<h1>408 REQUEST_TIMEOUT</h1>";
96  break;
97 
98  case HTTP_CONFLICT:
99  _title = "409 CONFLICT";
100  _body = "<h1>409 CONFLICT</h1>";
101  break;
102 
103  case HTTP_GONE:
104  _title = "410 GONE";
105  _body = "<h1>410 GONE</h1>";
106  break;
107 
109  _title = "411 LENGTH_REQUIRED";
110  _body = "<h1>411 LENGTH_REQUIRED</h1>";
111  break;
112 
114  _title = "412 PRECONDITION_FAILED";
115  _body = "<h1>412 PRECONDITION_FAILED</h1>";
116  break;
117 
119  _title = "413 REQUEST_ENTITY_TOO_LARGE";
120  _body = "<h1>413 REQUEST_ENTITY_TOO_LARGE</h1>";
121  break;
122 
124  _title = "414 REQUEST_URI_TOO_LONG";
125  _body = "<h1>414 REQUEST_URI_TOO_LONG</h1>";
126  break;
127 
129  _title = "415 UNSUPPORTED_MEDIA_TYPE";
130  _body = "<h1>415 UNSUPPORTED_MEDIA_TYPE</h1>";
131  break;
132 
134  _title = "416 REQUESTED_RANGE_NOT_SATISFIABLE";
135  _body = "<h1>416 REQUESTED_RANGE_NOT_SATISFIABLE</h1>";
136  break;
137 
139  _title = "417 EXPECTATION_FAILED";
140  _body = "<h1>417 EXPECTATION_FAILED</h1>";
141  break;
142 
144  _title = "422 UNPROCESSABLE_ENTITY";
145  _body = "<h1>422 UNPROCESSABLE_ENTITY</h1>";
146  break;
147 
148  case HTTP_LOCKED:
149  _title = "423 LOCKED";
150  _body = "<h1>423 LOCKED</h1>";
151  break;
152 
154  _title = "424 FAILED_DEPENDENCY";
155  _body = "<h1>424 FAILED_DEPENDENCY</h1>";
156  break;
157 
159  _title = "425 UNORDERED_COLLECTION";
160  _body = "<h1>425 UNORDERED_COLLECTION</h1>";
161  break;
162 
164  _title = "426 UPGRADE_REQUIRED";
165  _body = "<h1>426 UPGRADE_REQUIRED</h1>";
166  break;
167 
168  case HTTP_RETRY_WITH:
169  _title = "449 RETRY_WITH";
170  _body = "<h1>449 RETRY_WITH</h1>";
171  break;
172 
173 
175  _title = "500 INTERNAL_SERVER_ERROR";
176  _body = "<h1>500 INTERNAL_SERVER_ERROR</h1>";
177  break;
178 
180  _title = "501 NOT_IMPLEMENTED";
181  _body = "<h1>501 NOT_IMPLEMENTED</h1>";
182  break;
183 
184  case HTTP_BAD_GATEWAY:
185  _title = "502 BAD_GATEWAY";
186  _body = "<h1>502 BAD_GATEWAY</h1>";
187  break;
188 
190  _title = "503 SERVICE_UNAVAILABLE";
191  _body = "<h1>503 SERVICE_UNAVAILABLE</h1>";
192  break;
193 
195  _title = "504 GATEWAY_TIMEOUT";
196  _body = "<h1>504 GATEWAY_TIMEOUT</h1>";
197  break;
198 
200  _title = "505 HTTP_VERSION_NOT_SUPPORTED";
201  _body = "<h1>505 HTTP_VERSION_NOT_SUPPORTED</h1>";
202  break;
203 
205  _title = "506 VARIANT_ALSO_NEGOTIATES";
206  _body = "<h1>506 VARIANT_ALSO_NEGOTIATES</h1>";
207  break;
208 
210  _title = "507 INSUFFICIENT_STORAGE";
211  _body = "<h1>507 INSUFFICIENT_STORAGE</h1>";
212  break;
213 
215  _title = "509 BANDWIDTH_LIMIT_EXCEEDED";
216  _body = "<h1>509 BANDWIDTH_LIMIT_EXCEEDED</h1>";
217  break;
218 
219  case HTTP_NOT_EXTENDED:
220  _title = "510 NOT_EXTENDED";
221  _body = "<h1>510 NOT_EXTENDED</h1>";
222  break;
223 
224  default:
225  _title = "Unknown Error";
226  _body = "<h1>Unknown Error</h1>";
227  break;
228  }
229 
230  if (format) {
231  va_list args;
232  va_start(args, format);
233  char *tmp;
234  if (vasprintf(&tmp, format, args) != -1) {
235  _body += std::string("<br />\n<b>") + tmp + "</b>\n";
236  free(tmp);
237  }
238  }
239 }
240 
241 } // end namespace fawkes
std::string _title
Title of the page.
Definition: page_reply.h:60
Fawkes library namespace.
WebErrorPageReply(Code error_code, const char *format=NULL,...)
Constructor.
Definition: error_reply.cpp:45
std::string _body
Body of the reply.
Definition: reply.h:147
BANDWIDTH_LIMIT_EXCEEDED.
Definition: reply.h:96
HTTP_VERSION_NOT_SUPPORTED.
Definition: reply.h:93
REQUEST_ENTITY_TOO_LARGE.
Definition: reply.h:76
Basic page reply.
Definition: page_reply.h:36
Code
HTTP response code.
Definition: reply.h:40
Index out of bounds.
Definition: software.h:88
PROXY_AUTHENTICATION_REQUIRED.
Definition: reply.h:70
REQUESTED_RANGE_NOT_SATISFIABLE.
Definition: reply.h:79