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
*/
45
WebErrorPageReply::WebErrorPageReply
(
Code
code,
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
64
case
HTTP_PAYMENT_REQUIRED
:
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
78
case
HTTP_METHOD_NOT_ALLOWED
:
79
_title
=
"405 METHOD_NOT_ALLOWED"
;
80
_body
=
"<h1>405 METHOD_NOT_ALLOWED</h1>"
;
81
break
;
82
83
case
HTTP_METHOD_NOT_ACCEPTABLE
:
84
_title
=
"406 METHOD_NOT_ACCEPTABLE"
;
85
_body
=
"<h1>406 METHOD_NOT_ACCEPTABLE</h1>"
;
86
break
;
87
88
case
HTTP_PROXY_AUTHENTICATION_REQUIRED
:
89
_title
=
"407 PROXY_AUTHENTICATION_REQUIRED"
;
90
_body
=
"<h1>407 PROXY_AUTHENTICATION_REQUIRED</h1>"
;
91
break
;
92
93
case
HTTP_REQUEST_TIMEOUT
:
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
108
case
HTTP_LENGTH_REQUIRED
:
109
_title
=
"411 LENGTH_REQUIRED"
;
110
_body
=
"<h1>411 LENGTH_REQUIRED</h1>"
;
111
break
;
112
113
case
HTTP_PRECONDITION_FAILED
:
114
_title
=
"412 PRECONDITION_FAILED"
;
115
_body
=
"<h1>412 PRECONDITION_FAILED</h1>"
;
116
break
;
117
118
case
HTTP_REQUEST_ENTITY_TOO_LARGE
:
119
_title
=
"413 REQUEST_ENTITY_TOO_LARGE"
;
120
_body
=
"<h1>413 REQUEST_ENTITY_TOO_LARGE</h1>"
;
121
break
;
122
123
case
HTTP_REQUEST_URI_TOO_LONG
:
124
_title
=
"414 REQUEST_URI_TOO_LONG"
;
125
_body
=
"<h1>414 REQUEST_URI_TOO_LONG</h1>"
;
126
break
;
127
128
case
HTTP_UNSUPPORTED_MEDIA_TYPE
:
129
_title
=
"415 UNSUPPORTED_MEDIA_TYPE"
;
130
_body
=
"<h1>415 UNSUPPORTED_MEDIA_TYPE</h1>"
;
131
break
;
132
133
case
HTTP_REQUESTED_RANGE_NOT_SATISFIABLE
:
134
_title
=
"416 REQUESTED_RANGE_NOT_SATISFIABLE"
;
135
_body
=
"<h1>416 REQUESTED_RANGE_NOT_SATISFIABLE</h1>"
;
136
break
;
137
138
case
HTTP_EXPECTATION_FAILED
:
139
_title
=
"417 EXPECTATION_FAILED"
;
140
_body
=
"<h1>417 EXPECTATION_FAILED</h1>"
;
141
break
;
142
143
case
HTTP_UNPROCESSABLE_ENTITY
:
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
153
case
HTTP_FAILED_DEPENDENCY
:
154
_title
=
"424 FAILED_DEPENDENCY"
;
155
_body
=
"<h1>424 FAILED_DEPENDENCY</h1>"
;
156
break
;
157
158
case
HTTP_UNORDERED_COLLECTION
:
159
_title
=
"425 UNORDERED_COLLECTION"
;
160
_body
=
"<h1>425 UNORDERED_COLLECTION</h1>"
;
161
break
;
162
163
case
HTTP_UPGRADE_REQUIRED
:
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
174
case
HTTP_INTERNAL_SERVER_ERROR
:
175
_title
=
"500 INTERNAL_SERVER_ERROR"
;
176
_body
=
"<h1>500 INTERNAL_SERVER_ERROR</h1>"
;
177
break
;
178
179
case
HTTP_NOT_IMPLEMENTED
:
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
189
case
HTTP_SERVICE_UNAVAILABLE
:
190
_title
=
"503 SERVICE_UNAVAILABLE"
;
191
_body
=
"<h1>503 SERVICE_UNAVAILABLE</h1>"
;
192
break
;
193
194
case
HTTP_GATEWAY_TIMEOUT
:
195
_title
=
"504 GATEWAY_TIMEOUT"
;
196
_body
=
"<h1>504 GATEWAY_TIMEOUT</h1>"
;
197
break
;
198
199
case
HTTP_HTTP_VERSION_NOT_SUPPORTED
:
200
_title
=
"505 HTTP_VERSION_NOT_SUPPORTED"
;
201
_body
=
"<h1>505 HTTP_VERSION_NOT_SUPPORTED</h1>"
;
202
break
;
203
204
case
HTTP_VARIANT_ALSO_NEGOTIATES
:
205
_title
=
"506 VARIANT_ALSO_NEGOTIATES"
;
206
_body
=
"<h1>506 VARIANT_ALSO_NEGOTIATES</h1>"
;
207
break
;
208
209
case
HTTP_INSUFFICIENT_STORAGE
:
210
_title
=
"507 INSUFFICIENT_STORAGE"
;
211
_body
=
"<h1>507 INSUFFICIENT_STORAGE</h1>"
;
212
break
;
213
214
case
HTTP_BANDWIDTH_LIMIT_EXCEEDED
:
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
fawkes::WebReply::HTTP_UNAUTHORIZED
UNAUTHORIZED.
Definition:
reply.h:64
fawkes::WebPageReply::_title
std::string _title
Title of the page.
Definition:
page_reply.h:60
fawkes::WebReply::HTTP_METHOD_NOT_ALLOWED
METHOD_NOT_ALLOWED.
Definition:
reply.h:68
fawkes::WebReply::HTTP_REQUEST_URI_TOO_LONG
REQUEST_URI_TOO_LONG.
Definition:
reply.h:77
fawkes::WebReply::HTTP_NOT_FOUND
NOT_FOUND.
Definition:
reply.h:67
fawkes
Fawkes library namespace.
fawkes::WebReply::HTTP_EXPECTATION_FAILED
EXPECTATION_FAILED.
Definition:
reply.h:80
fawkes::WebReply::HTTP_BAD_GATEWAY
BAD_GATEWAY.
Definition:
reply.h:90
fawkes::WebErrorPageReply::WebErrorPageReply
WebErrorPageReply(Code error_code, const char *format=NULL,...)
Constructor.
Definition:
error_reply.cpp:45
fawkes::WebReply::HTTP_REQUEST_TIMEOUT
REQUEST_TIMEOUT.
Definition:
reply.h:71
fawkes::StaticWebReply::_body
std::string _body
Body of the reply.
Definition:
reply.h:147
fawkes::WebReply::HTTP_UNORDERED_COLLECTION
UNORDERED_COLLECTION.
Definition:
reply.h:84
fawkes::WebReply::HTTP_PAYMENT_REQUIRED
PAYMENT_REQUIRED.
Definition:
reply.h:65
fawkes::WebReply::HTTP_BANDWIDTH_LIMIT_EXCEEDED
BANDWIDTH_LIMIT_EXCEEDED.
Definition:
reply.h:96
fawkes::WebReply::HTTP_CONFLICT
CONFLICT.
Definition:
reply.h:72
fawkes::WebReply::HTTP_METHOD_NOT_ACCEPTABLE
METHOD_NOT_ACCEPTABLE.
Definition:
reply.h:69
fawkes::WebReply::HTTP_HTTP_VERSION_NOT_SUPPORTED
HTTP_VERSION_NOT_SUPPORTED.
Definition:
reply.h:93
fawkes::WebReply::HTTP_SERVICE_UNAVAILABLE
SERVICE_UNAVAILABLE.
Definition:
reply.h:91
fawkes::WebReply::HTTP_UNSUPPORTED_MEDIA_TYPE
UNSUPPORTED_MEDIA_TYPE.
Definition:
reply.h:78
fawkes::WebReply::HTTP_INTERNAL_SERVER_ERROR
INTERNAL_SERVER_ERROR.
Definition:
reply.h:88
fawkes::WebReply::HTTP_BAD_REQUEST
BAD_REQUEST.
Definition:
reply.h:63
fawkes::WebReply::HTTP_UPGRADE_REQUIRED
UPGRADE_REQUIRED.
Definition:
reply.h:85
fawkes::WebReply::HTTP_FAILED_DEPENDENCY
FAILED_DEPENDENCY.
Definition:
reply.h:83
fawkes::WebReply::HTTP_INSUFFICIENT_STORAGE
INSUFFICIENT_STORAGE.
Definition:
reply.h:95
fawkes::WebReply::HTTP_REQUEST_ENTITY_TOO_LARGE
REQUEST_ENTITY_TOO_LARGE.
Definition:
reply.h:76
fawkes::WebReply::HTTP_NOT_IMPLEMENTED
NOT_IMPLEMENTED.
Definition:
reply.h:89
fawkes::WebReply::HTTP_PRECONDITION_FAILED
PRECONDITION_FAILED.
Definition:
reply.h:75
fawkes::WebReply::HTTP_LOCKED
LOCKED.
Definition:
reply.h:82
fawkes::WebReply::HTTP_LENGTH_REQUIRED
LENGTH_REQUIRED.
Definition:
reply.h:74
fawkes::WebReply::HTTP_NOT_EXTENDED
NOT_EXTENDED.
Definition:
reply.h:97
fawkes::WebPageReply
Basic page reply.
Definition:
page_reply.h:36
fawkes::WebReply::HTTP_VARIANT_ALSO_NEGOTIATES
VARIANT_ALSO_NEGOTIATES.
Definition:
reply.h:94
fawkes::WebReply::HTTP_UNPROCESSABLE_ENTITY
UNPROCESSABLE_ENTITY.
Definition:
reply.h:81
fawkes::WebReply::HTTP_RETRY_WITH
RETRY_WITH.
Definition:
reply.h:86
fawkes::WebReply::Code
Code
HTTP response code.
Definition:
reply.h:40
fawkes::OutOfBoundsException
Index out of bounds.
Definition:
software.h:88
fawkes::WebReply::HTTP_FORBIDDEN
FORBIDDEN.
Definition:
reply.h:66
fawkes::WebReply::HTTP_GONE
GONE.
Definition:
reply.h:73
fawkes::WebReply::HTTP_PROXY_AUTHENTICATION_REQUIRED
PROXY_AUTHENTICATION_REQUIRED.
Definition:
reply.h:70
fawkes::WebReply::HTTP_REQUESTED_RANGE_NOT_SATISFIABLE
REQUESTED_RANGE_NOT_SATISFIABLE.
Definition:
reply.h:79
fawkes::WebReply::HTTP_GATEWAY_TIMEOUT
GATEWAY_TIMEOUT.
Definition:
reply.h:92
src
libs
webview
error_reply.cpp
Generated by
1.8.13