author | Michael Krelin <hacker@klever.net> | 2007-03-17 00:15:49 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2007-03-17 00:15:49 (UTC) |
commit | 29f2fd81e0f4e62c54371b90469d64ec5e47bd8a (patch) (unidiff) | |
tree | 6c94ade0bd8a3ca92afead27939b586713e5e789 | |
parent | 88e7e2ac30d181e30a7c4fa36d0029990136efb6 (diff) | |
download | sitecing-master.zip sitecing-master.tar.gz sitecing-master.tar.bz2 |
-rw-r--r-- | include/sitecing/exception.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/sitecing/exception.h b/include/sitecing/exception.h index 857a8e6..ccc7edd 100644 --- a/include/sitecing/exception.h +++ b/include/sitecing/exception.h | |||
@@ -1,396 +1,399 @@ | |||
1 | #ifndef __SITECING_EXCEPTION_H | 1 | #ifndef __SITECING_EXCEPTION_H |
2 | #define __SITECING_EXCEPTION_H | 2 | #define __SITECING_EXCEPTION_H |
3 | 3 | ||
4 | #include <string> | ||
5 | |||
4 | /** | 6 | /** |
5 | * @file | 7 | * @file |
6 | * @brief The site-C-ing specific exceptions. | 8 | * @brief The site-C-ing specific exceptions. |
7 | */ | 9 | */ |
8 | 10 | ||
9 | /** | 11 | /** |
10 | * @brief The main site-C-ing namespace. | 12 | * @brief The main site-C-ing namespace. |
11 | */ | 13 | */ |
12 | namespace sitecing { | 14 | namespace sitecing { |
15 | using std::string; | ||
13 | 16 | ||
14 | // TODO: status specifics | 17 | // TODO: status specifics |
15 | 18 | ||
16 | /** | 19 | /** |
17 | * The http status to return. | 20 | * The http status to return. |
18 | */ | 21 | */ |
19 | class http_status { | 22 | class http_status { |
20 | public: | 23 | public: |
21 | /** | 24 | /** |
22 | * The status string. | 25 | * The status string. |
23 | */ | 26 | */ |
24 | string status; | 27 | string status; |
25 | /** | 28 | /** |
26 | * The message to follow the status string. | 29 | * The message to follow the status string. |
27 | */ | 30 | */ |
28 | string message; | 31 | string message; |
29 | 32 | ||
30 | /** | 33 | /** |
31 | * @param s HTTP status. | 34 | * @param s HTTP status. |
32 | * @param m HTTP status message. | 35 | * @param m HTTP status message. |
33 | */ | 36 | */ |
34 | http_status(const string& s,const string& m) | 37 | http_status(const string& s,const string& m) |
35 | : status(s), message(m) { } | 38 | : status(s), message(m) { } |
36 | virtual ~http_status() throw() { } | 39 | virtual ~http_status() throw() { } |
37 | }; | 40 | }; |
38 | 41 | ||
39 | // per RFC 2616 | 42 | // per RFC 2616 |
40 | 43 | ||
41 | /** | 44 | /** |
42 | * Informational. | 45 | * Informational. |
43 | */ | 46 | */ |
44 | class http_status_1xx : public http_status { | 47 | class http_status_1xx : public http_status { |
45 | public: | 48 | public: |
46 | /** | 49 | /** |
47 | * @param s HTTP status | 50 | * @param s HTTP status |
48 | * @param m HTTP status message | 51 | * @param m HTTP status message |
49 | */ | 52 | */ |
50 | explicit http_status_1xx(const string &s,const string& m) | 53 | explicit http_status_1xx(const string &s,const string& m) |
51 | : http_status(s,m) { } | 54 | : http_status(s,m) { } |
52 | }; | 55 | }; |
53 | /** | 56 | /** |
54 | * Continue. | 57 | * Continue. |
55 | */ | 58 | */ |
56 | class http_status_100 : public http_status_1xx { | 59 | class http_status_100 : public http_status_1xx { |
57 | public: | 60 | public: |
58 | /** | 61 | /** |
59 | * @param m HTTP status message | 62 | * @param m HTTP status message |
60 | */ | 63 | */ |
61 | explicit http_status_100(const string& m) | 64 | explicit http_status_100(const string& m) |
62 | : http_status_1xx("100",m) { } | 65 | : http_status_1xx("100",m) { } |
63 | explicit http_status_100() | 66 | explicit http_status_100() |
64 | : http_status_1xx("100","Continue") { } | 67 | : http_status_1xx("100","Continue") { } |
65 | }; | 68 | }; |
66 | /** | 69 | /** |
67 | * Switching protocols. | 70 | * Switching protocols. |
68 | */ | 71 | */ |
69 | class http_status_101 : public http_status_1xx { | 72 | class http_status_101 : public http_status_1xx { |
70 | public: | 73 | public: |
71 | /** | 74 | /** |
72 | * @param m HTTP status message | 75 | * @param m HTTP status message |
73 | */ | 76 | */ |
74 | explicit http_status_101(const string& m) | 77 | explicit http_status_101(const string& m) |
75 | : http_status_1xx("101",m) { } | 78 | : http_status_1xx("101",m) { } |
76 | explicit http_status_101() | 79 | explicit http_status_101() |
77 | : http_status_1xx("101","Switching protocols") { } | 80 | : http_status_1xx("101","Switching protocols") { } |
78 | }; | 81 | }; |
79 | 82 | ||
80 | /** | 83 | /** |
81 | * Successful. | 84 | * Successful. |
82 | */ | 85 | */ |
83 | class http_status_2xx : public http_status { | 86 | class http_status_2xx : public http_status { |
84 | public: | 87 | public: |
85 | /** | 88 | /** |
86 | * @param s HTTP status message | 89 | * @param s HTTP status message |
87 | * @param m HTTP status message | 90 | * @param m HTTP status message |
88 | */ | 91 | */ |
89 | explicit http_status_2xx(const string& s,const string& m) | 92 | explicit http_status_2xx(const string& s,const string& m) |
90 | : http_status(s,m) { } | 93 | : http_status(s,m) { } |
91 | }; | 94 | }; |
92 | /** | 95 | /** |
93 | * OK. | 96 | * OK. |
94 | */ | 97 | */ |
95 | class http_status_200 : public http_status_2xx { | 98 | class http_status_200 : public http_status_2xx { |
96 | public: | 99 | public: |
97 | /** | 100 | /** |
98 | * @param m HTTP status message | 101 | * @param m HTTP status message |
99 | */ | 102 | */ |
100 | explicit http_status_200(const string& m) | 103 | explicit http_status_200(const string& m) |
101 | : http_status_2xx("200",m) { } | 104 | : http_status_2xx("200",m) { } |
102 | explicit http_status_200() | 105 | explicit http_status_200() |
103 | : http_status_2xx("200","OK") { } | 106 | : http_status_2xx("200","OK") { } |
104 | }; | 107 | }; |
105 | /** | 108 | /** |
106 | * Created. | 109 | * Created. |
107 | */ | 110 | */ |
108 | class http_status_201 : public http_status_2xx { | 111 | class http_status_201 : public http_status_2xx { |
109 | public: | 112 | public: |
110 | /** | 113 | /** |
111 | * @param m HTTP status message | 114 | * @param m HTTP status message |
112 | */ | 115 | */ |
113 | explicit http_status_201(const string& m) | 116 | explicit http_status_201(const string& m) |
114 | : http_status_2xx("201",m) { } | 117 | : http_status_2xx("201",m) { } |
115 | explicit http_status_201() | 118 | explicit http_status_201() |
116 | : http_status_2xx("201","Created") { } | 119 | : http_status_2xx("201","Created") { } |
117 | }; | 120 | }; |
118 | /** | 121 | /** |
119 | * Accepted. | 122 | * Accepted. |
120 | */ | 123 | */ |
121 | class http_status_202 : public http_status_2xx { | 124 | class http_status_202 : public http_status_2xx { |
122 | public: | 125 | public: |
123 | /** | 126 | /** |
124 | * @param m HTTP status message | 127 | * @param m HTTP status message |
125 | */ | 128 | */ |
126 | explicit http_status_202(const string& m) | 129 | explicit http_status_202(const string& m) |
127 | : http_status_2xx("202",m) { } | 130 | : http_status_2xx("202",m) { } |
128 | explicit http_status_202() | 131 | explicit http_status_202() |
129 | : http_status_2xx("202","Accepted") { } | 132 | : http_status_2xx("202","Accepted") { } |
130 | }; | 133 | }; |
131 | /** | 134 | /** |
132 | * Non-authoritative infortmation. | 135 | * Non-authoritative infortmation. |
133 | */ | 136 | */ |
134 | class http_status_203 : public http_status_2xx { | 137 | class http_status_203 : public http_status_2xx { |
135 | public: | 138 | public: |
136 | /** | 139 | /** |
137 | * @param m HTTP status message | 140 | * @param m HTTP status message |
138 | */ | 141 | */ |
139 | explicit http_status_203(const string& m) | 142 | explicit http_status_203(const string& m) |
140 | : http_status_2xx("203",m) { } | 143 | : http_status_2xx("203",m) { } |
141 | explicit http_status_203() | 144 | explicit http_status_203() |
142 | : http_status_2xx("203","Non-authoritative information") { } | 145 | : http_status_2xx("203","Non-authoritative information") { } |
143 | }; | 146 | }; |
144 | /** | 147 | /** |
145 | * No content. | 148 | * No content. |
146 | */ | 149 | */ |
147 | class http_status_204 : public http_status_2xx { | 150 | class http_status_204 : public http_status_2xx { |
148 | public: | 151 | public: |
149 | /** | 152 | /** |
150 | * @param m HTTP status message | 153 | * @param m HTTP status message |
151 | */ | 154 | */ |
152 | explicit http_status_204(const string& m) | 155 | explicit http_status_204(const string& m) |
153 | : http_status_2xx("204",m) { } | 156 | : http_status_2xx("204",m) { } |
154 | explicit http_status_204() | 157 | explicit http_status_204() |
155 | : http_status_2xx("204","No content") { } | 158 | : http_status_2xx("204","No content") { } |
156 | }; | 159 | }; |
157 | /** | 160 | /** |
158 | * Reset content. | 161 | * Reset content. |
159 | */ | 162 | */ |
160 | class http_status_205 : public http_status_2xx { | 163 | class http_status_205 : public http_status_2xx { |
161 | public: | 164 | public: |
162 | /** | 165 | /** |
163 | * @param m HTTP status message | 166 | * @param m HTTP status message |
164 | */ | 167 | */ |
165 | explicit http_status_205(const string& m) | 168 | explicit http_status_205(const string& m) |
166 | : http_status_2xx("205",m) { } | 169 | : http_status_2xx("205",m) { } |
167 | explicit http_status_205() | 170 | explicit http_status_205() |
168 | : http_status_2xx("205","Reset content") { } | 171 | : http_status_2xx("205","Reset content") { } |
169 | }; | 172 | }; |
170 | /** | 173 | /** |
171 | * Partial content. | 174 | * Partial content. |
172 | */ | 175 | */ |
173 | class http_status_206 : public http_status_2xx { | 176 | class http_status_206 : public http_status_2xx { |
174 | public: | 177 | public: |
175 | /** | 178 | /** |
176 | * @param m HTTP status message | 179 | * @param m HTTP status message |
177 | */ | 180 | */ |
178 | explicit http_status_206(const string& m) | 181 | explicit http_status_206(const string& m) |
179 | : http_status_2xx("206",m) { } | 182 | : http_status_2xx("206",m) { } |
180 | explicit http_status_206() | 183 | explicit http_status_206() |
181 | : http_status_2xx("206","Partial content") { } | 184 | : http_status_2xx("206","Partial content") { } |
182 | }; | 185 | }; |
183 | 186 | ||
184 | /** | 187 | /** |
185 | * Redirection. | 188 | * Redirection. |
186 | */ | 189 | */ |
187 | class http_status_3xx : public http_status { | 190 | class http_status_3xx : public http_status { |
188 | public: | 191 | public: |
189 | /** | 192 | /** |
190 | * @param s HTTP status | 193 | * @param s HTTP status |
191 | * @param m HTTP status message | 194 | * @param m HTTP status message |
192 | */ | 195 | */ |
193 | explicit http_status_3xx(const string& s,const string& m) | 196 | explicit http_status_3xx(const string& s,const string& m) |
194 | : http_status(s,m) { } | 197 | : http_status(s,m) { } |
195 | }; | 198 | }; |
196 | /** | 199 | /** |
197 | * Multiple choices. | 200 | * Multiple choices. |
198 | */ | 201 | */ |
199 | class http_status_300 : public http_status_3xx { | 202 | class http_status_300 : public http_status_3xx { |
200 | public: | 203 | public: |
201 | /** | 204 | /** |
202 | * @param m HTTP status message | 205 | * @param m HTTP status message |
203 | */ | 206 | */ |
204 | explicit http_status_300(const string& m) | 207 | explicit http_status_300(const string& m) |
205 | : http_status_3xx("300",m) { } | 208 | : http_status_3xx("300",m) { } |
206 | explicit http_status_300() | 209 | explicit http_status_300() |
207 | : http_status_3xx("300","Multiple choices") { } | 210 | : http_status_3xx("300","Multiple choices") { } |
208 | }; | 211 | }; |
209 | /** | 212 | /** |
210 | * Moved permanently. | 213 | * Moved permanently. |
211 | */ | 214 | */ |
212 | class http_status_301 : public http_status_3xx { | 215 | class http_status_301 : public http_status_3xx { |
213 | public: | 216 | public: |
214 | /** | 217 | /** |
215 | * @param m HTTP status message | 218 | * @param m HTTP status message |
216 | */ | 219 | */ |
217 | explicit http_status_301(const string& m) | 220 | explicit http_status_301(const string& m) |
218 | : http_status_3xx("301",m) { } | 221 | : http_status_3xx("301",m) { } |
219 | explicit http_status_301() | 222 | explicit http_status_301() |
220 | : http_status_3xx("301","Moved permanently") { } | 223 | : http_status_3xx("301","Moved permanently") { } |
221 | }; | 224 | }; |
222 | /** | 225 | /** |
223 | * Found. | 226 | * Found. |
224 | */ | 227 | */ |
225 | class http_status_302 : public http_status_3xx { | 228 | class http_status_302 : public http_status_3xx { |
226 | public: | 229 | public: |
227 | /** | 230 | /** |
228 | * @param m HTTP status message | 231 | * @param m HTTP status message |
229 | */ | 232 | */ |
230 | explicit http_status_302(const string& m) | 233 | explicit http_status_302(const string& m) |
231 | : http_status_3xx("302",m) { } | 234 | : http_status_3xx("302",m) { } |
232 | explicit http_status_302() | 235 | explicit http_status_302() |
233 | : http_status_3xx("302","Found") { } | 236 | : http_status_3xx("302","Found") { } |
234 | }; | 237 | }; |
235 | /** | 238 | /** |
236 | * See other. | 239 | * See other. |
237 | */ | 240 | */ |
238 | class http_status_303 : public http_status_3xx { | 241 | class http_status_303 : public http_status_3xx { |
239 | public: | 242 | public: |
240 | /** | 243 | /** |
241 | * @param m HTTP status message | 244 | * @param m HTTP status message |
242 | */ | 245 | */ |
243 | explicit http_status_303(const string& m) | 246 | explicit http_status_303(const string& m) |
244 | : http_status_3xx("303",m) { } | 247 | : http_status_3xx("303",m) { } |
245 | explicit http_status_303() | 248 | explicit http_status_303() |
246 | : http_status_3xx("303","See other") { } | 249 | : http_status_3xx("303","See other") { } |
247 | }; | 250 | }; |
248 | /** | 251 | /** |
249 | * Not modified. | 252 | * Not modified. |
250 | */ | 253 | */ |
251 | class http_status_304 : public http_status_3xx { | 254 | class http_status_304 : public http_status_3xx { |
252 | public: | 255 | public: |
253 | /** | 256 | /** |
254 | * @param m HTTP status message | 257 | * @param m HTTP status message |
255 | */ | 258 | */ |
256 | explicit http_status_304(const string& m) | 259 | explicit http_status_304(const string& m) |
257 | : http_status_3xx("304",m) { } | 260 | : http_status_3xx("304",m) { } |
258 | explicit http_status_304() | 261 | explicit http_status_304() |
259 | : http_status_3xx("304","Not modified") { } | 262 | : http_status_3xx("304","Not modified") { } |
260 | }; | 263 | }; |
261 | /** | 264 | /** |
262 | * Use proxy. | 265 | * Use proxy. |
263 | */ | 266 | */ |
264 | class http_status_305 : public http_status_3xx { | 267 | class http_status_305 : public http_status_3xx { |
265 | public: | 268 | public: |
266 | /** | 269 | /** |
267 | * @param m HTTP status message | 270 | * @param m HTTP status message |
268 | */ | 271 | */ |
269 | explicit http_status_305(const string& m) | 272 | explicit http_status_305(const string& m) |
270 | : http_status_3xx("305",m) { } | 273 | : http_status_3xx("305",m) { } |
271 | explicit http_status_305() | 274 | explicit http_status_305() |
272 | : http_status_3xx("305","Use proxy") { } | 275 | : http_status_3xx("305","Use proxy") { } |
273 | }; | 276 | }; |
274 | // 306 is unused and reserved | 277 | // 306 is unused and reserved |
275 | /** | 278 | /** |
276 | * Temporary redirect. | 279 | * Temporary redirect. |
277 | */ | 280 | */ |
278 | class http_status_307 : public http_status_3xx { | 281 | class http_status_307 : public http_status_3xx { |
279 | public: | 282 | public: |
280 | /** | 283 | /** |
281 | * @param m HTTP status message | 284 | * @param m HTTP status message |
282 | */ | 285 | */ |
283 | explicit http_status_307(const string& m) | 286 | explicit http_status_307(const string& m) |
284 | : http_status_3xx("307",m) { } | 287 | : http_status_3xx("307",m) { } |
285 | explicit http_status_307() | 288 | explicit http_status_307() |
286 | : http_status_3xx("307","Temporary redirect") { } | 289 | : http_status_3xx("307","Temporary redirect") { } |
287 | }; | 290 | }; |
288 | 291 | ||
289 | /** | 292 | /** |
290 | * Error. | 293 | * Error. |
291 | */ | 294 | */ |
292 | class http_status_4xx : public http_status { | 295 | class http_status_4xx : public http_status { |
293 | public: | 296 | public: |
294 | /** | 297 | /** |
295 | * @param s HTTP status | 298 | * @param s HTTP status |
296 | * @param m HTTP status message | 299 | * @param m HTTP status message |
297 | */ | 300 | */ |
298 | explicit http_status_4xx(const string& s,const string& m) | 301 | explicit http_status_4xx(const string& s,const string& m) |
299 | : http_status(s,m) { } | 302 | : http_status(s,m) { } |
300 | }; | 303 | }; |
301 | /** | 304 | /** |
302 | * Bad request. | 305 | * Bad request. |
303 | */ | 306 | */ |
304 | class http_status_400 : public http_status_4xx { | 307 | class http_status_400 : public http_status_4xx { |
305 | public: | 308 | public: |
306 | /** | 309 | /** |
307 | * @param m HTTP status message | 310 | * @param m HTTP status message |
308 | */ | 311 | */ |
309 | explicit http_status_400(const string& m) | 312 | explicit http_status_400(const string& m) |
310 | : http_status_4xx("400",m) { } | 313 | : http_status_4xx("400",m) { } |
311 | explicit http_status_400() | 314 | explicit http_status_400() |
312 | : http_status_4xx("400","Bad request") { } | 315 | : http_status_4xx("400","Bad request") { } |
313 | }; | 316 | }; |
314 | /** | 317 | /** |
315 | * Unauthorized. | 318 | * Unauthorized. |
316 | */ | 319 | */ |
317 | class http_status_401 : public http_status_4xx { | 320 | class http_status_401 : public http_status_4xx { |
318 | public: | 321 | public: |
319 | /** | 322 | /** |
320 | * @param m HTTP status message | 323 | * @param m HTTP status message |
321 | */ | 324 | */ |
322 | explicit http_status_401(const string& m) | 325 | explicit http_status_401(const string& m) |
323 | : http_status_4xx("401",m) { } | 326 | : http_status_4xx("401",m) { } |
324 | explicit http_status_401() | 327 | explicit http_status_401() |
325 | : http_status_4xx("401","Unauthorized") { } | 328 | : http_status_4xx("401","Unauthorized") { } |
326 | }; | 329 | }; |
327 | /** | 330 | /** |
328 | * Payment required. | 331 | * Payment required. |
329 | */ | 332 | */ |
330 | class http_status_402 : public http_status_4xx { | 333 | class http_status_402 : public http_status_4xx { |
331 | public: | 334 | public: |
332 | /** | 335 | /** |
333 | * @param m HTTP status message | 336 | * @param m HTTP status message |
334 | */ | 337 | */ |
335 | explicit http_status_402(const string& m) | 338 | explicit http_status_402(const string& m) |
336 | : http_status_4xx("402",m) { } | 339 | : http_status_4xx("402",m) { } |
337 | explicit http_status_402() | 340 | explicit http_status_402() |
338 | : http_status_4xx("402","Payment required") { } | 341 | : http_status_4xx("402","Payment required") { } |
339 | }; | 342 | }; |
340 | /** | 343 | /** |
341 | * Forbidden. | 344 | * Forbidden. |
342 | */ | 345 | */ |
343 | class http_status_403 : public http_status_4xx { | 346 | class http_status_403 : public http_status_4xx { |
344 | public: | 347 | public: |
345 | /** | 348 | /** |
346 | * @param m HTTP status message | 349 | * @param m HTTP status message |
347 | */ | 350 | */ |
348 | explicit http_status_403(const string& m) | 351 | explicit http_status_403(const string& m) |
349 | : http_status_4xx("403",m) { } | 352 | : http_status_4xx("403",m) { } |
350 | explicit http_status_403() | 353 | explicit http_status_403() |
351 | : http_status_4xx("403","Forbidden") { } | 354 | : http_status_4xx("403","Forbidden") { } |
352 | }; | 355 | }; |
353 | /** | 356 | /** |
354 | * Not found. | 357 | * Not found. |
355 | */ | 358 | */ |
356 | class http_status_404 : public http_status_4xx { | 359 | class http_status_404 : public http_status_4xx { |
357 | public: | 360 | public: |
358 | /** | 361 | /** |
359 | * @param m HTTP status message | 362 | * @param m HTTP status message |
360 | */ | 363 | */ |
361 | explicit http_status_404(const string& m) | 364 | explicit http_status_404(const string& m) |
362 | : http_status_4xx("404",m) { } | 365 | : http_status_4xx("404",m) { } |
363 | explicit http_status_404() | 366 | explicit http_status_404() |
364 | : http_status_4xx("404","Not found") { } | 367 | : http_status_4xx("404","Not found") { } |
365 | }; | 368 | }; |
366 | /** | 369 | /** |
367 | * Method not allowed. | 370 | * Method not allowed. |
368 | */ | 371 | */ |
369 | class http_status_405 : public http_status_4xx { | 372 | class http_status_405 : public http_status_4xx { |
370 | public: | 373 | public: |
371 | /** | 374 | /** |
372 | * @param m HTTP status message | 375 | * @param m HTTP status message |
373 | */ | 376 | */ |
374 | explicit http_status_405(const string& m) | 377 | explicit http_status_405(const string& m) |
375 | : http_status_4xx("405",m) { } | 378 | : http_status_4xx("405",m) { } |
376 | explicit http_status_405() | 379 | explicit http_status_405() |
377 | : http_status_4xx("405","Method not allowed") { } | 380 | : http_status_4xx("405","Method not allowed") { } |
378 | }; | 381 | }; |
379 | /** | 382 | /** |
380 | * Not acceptable. | 383 | * Not acceptable. |
381 | */ | 384 | */ |
382 | class http_status_406 : public http_status_4xx { | 385 | class http_status_406 : public http_status_4xx { |
383 | public: | 386 | public: |
384 | /** | 387 | /** |
385 | * @param m HTTP status message | 388 | * @param m HTTP status message |
386 | */ | 389 | */ |
387 | explicit http_status_406(const string& m) | 390 | explicit http_status_406(const string& m) |
388 | : http_status_4xx("406",m) { } | 391 | : http_status_4xx("406",m) { } |
389 | explicit http_status_406() | 392 | explicit http_status_406() |
390 | : http_status_4xx("406","Not acceptable") { } | 393 | : http_status_4xx("406","Not acceptable") { } |
391 | }; | 394 | }; |
392 | /** | 395 | /** |
393 | * Proxy authentication required. | 396 | * Proxy authentication required. |
394 | */ | 397 | */ |
395 | class http_status_407 : public http_status_4xx { | 398 | class http_status_407 : public http_status_4xx { |
396 | public: | 399 | public: |