error_reply.cpp

00001
00002 /***************************************************************************
00003  *  error_reply.h - Web request reply for an error page
00004  *
00005  *  Created: Fri Oct 24 19:57:19 2008
00006  *  Copyright  2006-2008  Tim Niemueller [www.niemueller.de]
00007  *
00008  ****************************************************************************/
00009
00010 /*  This program is free software; you can redistribute it and/or modify
00011  *  it under the terms of the GNU General Public License as published by
00012  *  the Free Software Foundation; either version 2 of the License, or
00013  *  (at your option) any later version.
00014  *
00015  *  This program is distributed in the hope that it will be useful,
00016  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018  *  GNU Library General Public License for more details.
00019  *
00020  *  Read the full text in the LICENSE.GPL file in the doc directory.
00021  */
00022
00023 #include "error_reply.h"
00024
00025 #include <core/exceptions/software.h>
00026 
00027 /** @class WebErrorPageReply "error_reply.h"
00028  * Static error page reply.
00029  * Shows a simple error page based on the given code.
00030  * @author Tim Niemueller
00031  */
00032 
00033 /** Constructor.
00034  * @param code error code, must be a 4xx or 5xx HTTP code
00035  * @param msg additional error message.
00036  */
00037 WebErrorPageReply::WebErrorPageReply(response_code_t code, std::string msg)
00038   : WebPageReply(code)
00039 {
00040   if ( (code < 400) || (code > 599) ) {
00041     throw fawkes::OutOfBoundsException("Error code invalid", code, 400, 599);
00042   }
00043
00044   switch (code) {
00045   case HTTP_BAD_REQUEST:
00046     _title = "400 BAD_REQUEST";
00047     _body  = "<h1>400 BAD_REQUEST</h1>";
00048     break;
00049
00050   case HTTP_UNAUTHORIZED:
00051     _title = "401 UNAUTHORIZED";
00052     _body  = "<h1>401 UNAUTHORIZED</h1>";
00053     break;
00054
00055   case HTTP_PAYMENT_REQUIRED:
00056     _title = "402 PAYMENT_REQUIRED";
00057     _body  = "<h1>402 PAYMENT_REQUIRED</h1>";
00058     break;
00059
00060   case HTTP_FORBIDDEN:
00061     _title = "403 FORBIDDEN";
00062     _body  = "<h1>403 FORBIDDEN</h1>";
00063     break;
00064
00065   case HTTP_NOT_FOUND:
00066     _title = "404 NOT_FOUND";
00067     _body  = "<h1>404 NOT_FOUND</h1>";    break;
00068
00069   case HTTP_METHOD_NOT_ALLOWED:
00070     _title = "405 METHOD_NOT_ALLOWED";
00071     _body  = "<h1>405 METHOD_NOT_ALLOWED</h1>";
00072     break;
00073
00074   case HTTP_METHOD_NOT_ACCEPTABLE:
00075     _title = "406 METHOD_NOT_ACCEPTABLE";
00076     _body  = "<h1>406 METHOD_NOT_ACCEPTABLE</h1>";
00077     break;
00078
00079   case HTTP_PROXY_AUTHENTICATION_REQUIRED:
00080     _title = "407 PROXY_AUTHENTICATION_REQUIRED";
00081     _body  = "<h1>407 PROXY_AUTHENTICATION_REQUIRED</h1>";
00082     break;
00083
00084   case HTTP_REQUEST_TIMEOUT:
00085     _title = "408 REQUEST_TIMEOUT";
00086     _body  = "<h1>408 REQUEST_TIMEOUT</h1>";
00087     break;
00088
00089   case HTTP_CONFLICT:
00090     _title = "409 CONFLICT";
00091     _body  = "<h1>409 CONFLICT</h1>";
00092     break;
00093
00094   case HTTP_GONE:
00095     _title = "410 GONE";
00096     _body  = "<h1>410 GONE</h1>";
00097     break;
00098
00099   case HTTP_LENGTH_REQUIRED:
00100     _title = "411 LENGTH_REQUIRED";
00101     _body  = "<h1>411 LENGTH_REQUIRED</h1>";
00102     break;
00103
00104   case HTTP_PRECONDITION_FAILED:
00105     _title = "412 PRECONDITION_FAILED";
00106     _body  = "<h1>412 PRECONDITION_FAILED</h1>";
00107     break;
00108
00109   case HTTP_REQUEST_ENTITY_TOO_LARGE:
00110     _title = "413 REQUEST_ENTITY_TOO_LARGE";
00111     _body  = "<h1>413 REQUEST_ENTITY_TOO_LARGE</h1>";
00112     break;
00113
00114   case HTTP_REQUEST_URI_TOO_LONG:
00115     _title = "414 REQUEST_URI_TOO_LONG";
00116     _body  = "<h1>414 REQUEST_URI_TOO_LONG</h1>";
00117     break;
00118
00119   case HTTP_UNSUPPORTED_MEDIA_TYPE:
00120     _title = "415 UNSUPPORTED_MEDIA_TYPE";
00121     _body  = "<h1>415 UNSUPPORTED_MEDIA_TYPE</h1>";
00122     break;
00123
00124   case HTTP_REQUESTED_RANGE_NOT_SATISFIABLE:
00125     _title = "416 REQUESTED_RANGE_NOT_SATISFIABLE";
00126     _body  = "<h1>416 REQUESTED_RANGE_NOT_SATISFIABLE</h1>";
00127     break;
00128
00129   case HTTP_EXPECTATION_FAILED:
00130     _title = "417 EXPECTATION_FAILED";
00131     _body  = "<h1>417 EXPECTATION_FAILED</h1>";
00132     break;
00133
00134   case HTTP_UNPROCESSABLE_ENTITY:
00135     _title = "422 UNPROCESSABLE_ENTITY";
00136     _body  = "<h1>422 UNPROCESSABLE_ENTITY</h1>";
00137     break;
00138
00139   case HTTP_LOCKED:
00140     _title = "423 LOCKED";
00141     _body  = "<h1>423 LOCKED</h1>";
00142     break;
00143
00144   case HTTP_FAILED_DEPENDENCY:
00145     _title = "424 FAILED_DEPENDENCY";
00146     _body  = "<h1>424 FAILED_DEPENDENCY</h1>";
00147     break;
00148
00149   case HTTP_UNORDERED_COLLECTION:
00150     _title = "425 UNORDERED_COLLECTION";
00151     _body  = "<h1>425 UNORDERED_COLLECTION</h1>";
00152     break;
00153
00154   case HTTP_UPGRADE_REQUIRED:
00155     _title = "426 UPGRADE_REQUIRED";
00156     _body  = "<h1>426 UPGRADE_REQUIRED</h1>";
00157     break;
00158
00159   case HTTP_RETRY_WITH:
00160     _title = "449 RETRY_WITH";
00161     _body  = "<h1>449 RETRY_WITH</h1>";
00162     break;
00163
00164
00165   case HTTP_INTERNAL_SERVER_ERROR:
00166     _title = "500 INTERNAL_SERVER_ERROR";
00167     _body  = "<h1>500 INTERNAL_SERVER_ERROR</h1>";
00168     break;
00169
00170   case HTTP_NOT_IMPLEMENTED:
00171     _title = "501 NOT_IMPLEMENTED";
00172     _body  = "<h1>501 NOT_IMPLEMENTED</h1>";
00173     break;
00174
00175   case HTTP_BAD_GATEWAY:
00176     _title = "502 BAD_GATEWAY";
00177     _body  = "<h1>502 BAD_GATEWAY</h1>";
00178     break;
00179
00180   case HTTP_SERVICE_UNAVAILABLE:
00181     _title = "503 SERVICE_UNAVAILABLE";
00182     _body  = "<h1>503 SERVICE_UNAVAILABLE</h1>";
00183     break;
00184
00185   case HTTP_GATEWAY_TIMEOUT:
00186     _title = "504 GATEWAY_TIMEOUT";
00187     _body  = "<h1>504 GATEWAY_TIMEOUT</h1>";
00188     break;
00189
00190   case HTTP_HTTP_VERSION_NOT_SUPPORTED:
00191     _title = "505 HTTP_VERSION_NOT_SUPPORTED";
00192     _body  = "<h1>505 HTTP_VERSION_NOT_SUPPORTED</h1>";
00193     break;
00194
00195   case HTTP_VARIANT_ALSO_NEGOTIATES:
00196     _title = "506 VARIANT_ALSO_NEGOTIATES";
00197     _body  = "<h1>506 VARIANT_ALSO_NEGOTIATES</h1>";
00198     break;
00199
00200   case HTTP_INSUFFICIENT_STORAGE:
00201     _title = "507 INSUFFICIENT_STORAGE";
00202     _body  = "<h1>507 INSUFFICIENT_STORAGE</h1>";
00203     break;
00204
00205   case HTTP_BANDWIDTH_LIMIT_EXCEEDED:
00206     _title = "509 BANDWIDTH_LIMIT_EXCEEDED";
00207     _body  = "<h1>509 BANDWIDTH_LIMIT_EXCEEDED</h1>";
00208     break;
00209
00210   case HTTP_NOT_EXTENDED:
00211     _title = "510 NOT_EXTENDED";
00212     _body  = "<h1>510 NOT_EXTENDED</h1>";
00213     break;
00214
00215   default:
00216     _title = "Unknown Error";
00217     _body  = "<h1>Unknown Error</h1>";
00218     break;
00219   }
00220
00221   _body += "<br />\n<b>" + msg + "</b>\n";
00222 }