Fawkes API
Fawkes Development Version
|
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-2009 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 <webview/error_reply.h> 00024 00025 #include <core/exceptions/software.h> 00026 00027 namespace fawkes { 00028 #if 0 /* just to make Emacs auto-indent happy */ 00029 } 00030 #endif 00031 00032 /** @class WebErrorPageReply <webview/error_reply.h> 00033 * Static error page reply. 00034 * Shows a simple error page based on the given code. 00035 * @author Tim Niemueller 00036 */ 00037 00038 /** Constructor. 00039 * @param code error code, must be a 4xx or 5xx HTTP code 00040 * @param msg additional error message. 00041 */ 00042 WebErrorPageReply::WebErrorPageReply(response_code_t code, std::string msg) 00043 : WebPageReply(code) 00044 { 00045 if ( (code < 400) || (code > 599) ) { 00046 throw fawkes::OutOfBoundsException("Error code invalid", code, 400, 599); 00047 } 00048 00049 switch (code) { 00050 case HTTP_BAD_REQUEST: 00051 _title = "400 BAD_REQUEST"; 00052 _body = "<h1>400 BAD_REQUEST</h1>"; 00053 break; 00054 00055 case HTTP_UNAUTHORIZED: 00056 _title = "401 UNAUTHORIZED"; 00057 _body = "<h1>401 UNAUTHORIZED</h1>"; 00058 break; 00059 00060 case HTTP_PAYMENT_REQUIRED: 00061 _title = "402 PAYMENT_REQUIRED"; 00062 _body = "<h1>402 PAYMENT_REQUIRED</h1>"; 00063 break; 00064 00065 case HTTP_FORBIDDEN: 00066 _title = "403 FORBIDDEN"; 00067 _body = "<h1>403 FORBIDDEN</h1>"; 00068 break; 00069 00070 case HTTP_NOT_FOUND: 00071 _title = "404 NOT_FOUND"; 00072 _body = "<h1>404 NOT_FOUND</h1>"; break; 00073 00074 case HTTP_METHOD_NOT_ALLOWED: 00075 _title = "405 METHOD_NOT_ALLOWED"; 00076 _body = "<h1>405 METHOD_NOT_ALLOWED</h1>"; 00077 break; 00078 00079 case HTTP_METHOD_NOT_ACCEPTABLE: 00080 _title = "406 METHOD_NOT_ACCEPTABLE"; 00081 _body = "<h1>406 METHOD_NOT_ACCEPTABLE</h1>"; 00082 break; 00083 00084 case HTTP_PROXY_AUTHENTICATION_REQUIRED: 00085 _title = "407 PROXY_AUTHENTICATION_REQUIRED"; 00086 _body = "<h1>407 PROXY_AUTHENTICATION_REQUIRED</h1>"; 00087 break; 00088 00089 case HTTP_REQUEST_TIMEOUT: 00090 _title = "408 REQUEST_TIMEOUT"; 00091 _body = "<h1>408 REQUEST_TIMEOUT</h1>"; 00092 break; 00093 00094 case HTTP_CONFLICT: 00095 _title = "409 CONFLICT"; 00096 _body = "<h1>409 CONFLICT</h1>"; 00097 break; 00098 00099 case HTTP_GONE: 00100 _title = "410 GONE"; 00101 _body = "<h1>410 GONE</h1>"; 00102 break; 00103 00104 case HTTP_LENGTH_REQUIRED: 00105 _title = "411 LENGTH_REQUIRED"; 00106 _body = "<h1>411 LENGTH_REQUIRED</h1>"; 00107 break; 00108 00109 case HTTP_PRECONDITION_FAILED: 00110 _title = "412 PRECONDITION_FAILED"; 00111 _body = "<h1>412 PRECONDITION_FAILED</h1>"; 00112 break; 00113 00114 case HTTP_REQUEST_ENTITY_TOO_LARGE: 00115 _title = "413 REQUEST_ENTITY_TOO_LARGE"; 00116 _body = "<h1>413 REQUEST_ENTITY_TOO_LARGE</h1>"; 00117 break; 00118 00119 case HTTP_REQUEST_URI_TOO_LONG: 00120 _title = "414 REQUEST_URI_TOO_LONG"; 00121 _body = "<h1>414 REQUEST_URI_TOO_LONG</h1>"; 00122 break; 00123 00124 case HTTP_UNSUPPORTED_MEDIA_TYPE: 00125 _title = "415 UNSUPPORTED_MEDIA_TYPE"; 00126 _body = "<h1>415 UNSUPPORTED_MEDIA_TYPE</h1>"; 00127 break; 00128 00129 case HTTP_REQUESTED_RANGE_NOT_SATISFIABLE: 00130 _title = "416 REQUESTED_RANGE_NOT_SATISFIABLE"; 00131 _body = "<h1>416 REQUESTED_RANGE_NOT_SATISFIABLE</h1>"; 00132 break; 00133 00134 case HTTP_EXPECTATION_FAILED: 00135 _title = "417 EXPECTATION_FAILED"; 00136 _body = "<h1>417 EXPECTATION_FAILED</h1>"; 00137 break; 00138 00139 case HTTP_UNPROCESSABLE_ENTITY: 00140 _title = "422 UNPROCESSABLE_ENTITY"; 00141 _body = "<h1>422 UNPROCESSABLE_ENTITY</h1>"; 00142 break; 00143 00144 case HTTP_LOCKED: 00145 _title = "423 LOCKED"; 00146 _body = "<h1>423 LOCKED</h1>"; 00147 break; 00148 00149 case HTTP_FAILED_DEPENDENCY: 00150 _title = "424 FAILED_DEPENDENCY"; 00151 _body = "<h1>424 FAILED_DEPENDENCY</h1>"; 00152 break; 00153 00154 case HTTP_UNORDERED_COLLECTION: 00155 _title = "425 UNORDERED_COLLECTION"; 00156 _body = "<h1>425 UNORDERED_COLLECTION</h1>"; 00157 break; 00158 00159 case HTTP_UPGRADE_REQUIRED: 00160 _title = "426 UPGRADE_REQUIRED"; 00161 _body = "<h1>426 UPGRADE_REQUIRED</h1>"; 00162 break; 00163 00164 case HTTP_RETRY_WITH: 00165 _title = "449 RETRY_WITH"; 00166 _body = "<h1>449 RETRY_WITH</h1>"; 00167 break; 00168 00169 00170 case HTTP_INTERNAL_SERVER_ERROR: 00171 _title = "500 INTERNAL_SERVER_ERROR"; 00172 _body = "<h1>500 INTERNAL_SERVER_ERROR</h1>"; 00173 break; 00174 00175 case HTTP_NOT_IMPLEMENTED: 00176 _title = "501 NOT_IMPLEMENTED"; 00177 _body = "<h1>501 NOT_IMPLEMENTED</h1>"; 00178 break; 00179 00180 case HTTP_BAD_GATEWAY: 00181 _title = "502 BAD_GATEWAY"; 00182 _body = "<h1>502 BAD_GATEWAY</h1>"; 00183 break; 00184 00185 case HTTP_SERVICE_UNAVAILABLE: 00186 _title = "503 SERVICE_UNAVAILABLE"; 00187 _body = "<h1>503 SERVICE_UNAVAILABLE</h1>"; 00188 break; 00189 00190 case HTTP_GATEWAY_TIMEOUT: 00191 _title = "504 GATEWAY_TIMEOUT"; 00192 _body = "<h1>504 GATEWAY_TIMEOUT</h1>"; 00193 break; 00194 00195 case HTTP_HTTP_VERSION_NOT_SUPPORTED: 00196 _title = "505 HTTP_VERSION_NOT_SUPPORTED"; 00197 _body = "<h1>505 HTTP_VERSION_NOT_SUPPORTED</h1>"; 00198 break; 00199 00200 case HTTP_VARIANT_ALSO_NEGOTIATES: 00201 _title = "506 VARIANT_ALSO_NEGOTIATES"; 00202 _body = "<h1>506 VARIANT_ALSO_NEGOTIATES</h1>"; 00203 break; 00204 00205 case HTTP_INSUFFICIENT_STORAGE: 00206 _title = "507 INSUFFICIENT_STORAGE"; 00207 _body = "<h1>507 INSUFFICIENT_STORAGE</h1>"; 00208 break; 00209 00210 case HTTP_BANDWIDTH_LIMIT_EXCEEDED: 00211 _title = "509 BANDWIDTH_LIMIT_EXCEEDED"; 00212 _body = "<h1>509 BANDWIDTH_LIMIT_EXCEEDED</h1>"; 00213 break; 00214 00215 case HTTP_NOT_EXTENDED: 00216 _title = "510 NOT_EXTENDED"; 00217 _body = "<h1>510 NOT_EXTENDED</h1>"; 00218 break; 00219 00220 default: 00221 _title = "Unknown Error"; 00222 _body = "<h1>Unknown Error</h1>"; 00223 break; 00224 } 00225 00226 _body += "<br />\n<b>" + msg + "</b>\n"; 00227 } 00228 00229 } // end namespace fawkes