Fawkes API Fawkes Development Version

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-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
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends