mirror of https://github.com/kiwix/libkiwix.git
Dropped root from HTTPErrorResponse & friends
This commit is contained in:
parent
6e2be481fd
commit
7a85c92025
|
@ -587,7 +587,7 @@ std::unique_ptr<Response> InternalServer::handle_request(const RequestContext& r
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
if (! request.is_valid_url()) {
|
if (! request.is_valid_url()) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( request.get_url() == "" ) {
|
if ( request.get_url() == "" ) {
|
||||||
|
@ -643,11 +643,11 @@ std::unique_ptr<Response> InternalServer::handle_request(const RequestContext& r
|
||||||
return Response::build_redirect(contentUrl + query);
|
return Response::build_redirect(contentUrl + query);
|
||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
fprintf(stderr, "===== Unhandled error : %s\n", e.what());
|
fprintf(stderr, "===== Unhandled error : %s\n", e.what());
|
||||||
return HTTP500Response(m_root, request)
|
return HTTP500Response(request)
|
||||||
+ ParameterizedMessage("non-translated-text", {{"MSG", e.what()}});
|
+ ParameterizedMessage("non-translated-text", {{"MSG", e.what()}});
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
fprintf(stderr, "===== Unhandled unknown error\n");
|
fprintf(stderr, "===== Unhandled unknown error\n");
|
||||||
return HTTP500Response(m_root, request)
|
return HTTP500Response(request)
|
||||||
+ nonParameterizedMessage("unknown-error");
|
+ nonParameterizedMessage("unknown-error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -690,7 +690,7 @@ std::unique_ptr<Response> InternalServer::handle_suggest(const RequestContext& r
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( startsWith(request.get_url(), "/suggest/") ) {
|
if ( startsWith(request.get_url(), "/suggest/") ) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string bookName, bookId;
|
std::string bookName, bookId;
|
||||||
|
@ -704,7 +704,7 @@ std::unique_ptr<Response> InternalServer::handle_suggest(const RequestContext& r
|
||||||
}
|
}
|
||||||
|
|
||||||
if (archive == nullptr) {
|
if (archive == nullptr) {
|
||||||
return HTTP404Response(m_root, request)
|
return HTTP404Response(request)
|
||||||
+ noSuchBookErrorMsg(bookName);
|
+ noSuchBookErrorMsg(bookName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -809,10 +809,10 @@ std::unique_ptr<Response> InternalServer::handle_no_js(const RequestContext& req
|
||||||
const auto bookId = mp_nameMapper->getIdForName(urlParts[2]);
|
const auto bookId = mp_nameMapper->getIdForName(urlParts[2]);
|
||||||
content = getNoJSDownloadPageHTML(bookId, userLang);
|
content = getNoJSDownloadPageHTML(bookId, userLang);
|
||||||
} catch (const std::out_of_range&) {
|
} catch (const std::out_of_range&) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ContentResponse::build(content, "text/html; charset=utf-8");
|
return ContentResponse::build(content, "text/html; charset=utf-8");
|
||||||
|
@ -858,7 +858,7 @@ std::unique_ptr<Response> InternalServer::handle_skin(const RequestContext& requ
|
||||||
response->set_kind(accessType);
|
response->set_kind(accessType);
|
||||||
return std::move(response);
|
return std::move(response);
|
||||||
} catch (const ResourceNotFound& e) {
|
} catch (const ResourceNotFound& e) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -875,13 +875,13 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
|
||||||
get_default_data(),
|
get_default_data(),
|
||||||
"application/opensearchdescription+xml");
|
"application/opensearchdescription+xml");
|
||||||
}
|
}
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return handle_search_request(request);
|
return handle_search_request(request);
|
||||||
} catch (const Error& e) {
|
} catch (const Error& e) {
|
||||||
return HTTP400Response(m_root, request)
|
return HTTP400Response(request)
|
||||||
+ e.message();
|
+ e.message();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -923,7 +923,7 @@ std::unique_ptr<Response> InternalServer::handle_search_request(const RequestCon
|
||||||
// Searcher->search will throw a runtime error if there is no valid xapian database to do the search.
|
// Searcher->search will throw a runtime error if there is no valid xapian database to do the search.
|
||||||
// (in case of zim file not containing a index)
|
// (in case of zim file not containing a index)
|
||||||
const auto cssUrl = renderUrl(m_root, RESOURCE::templates::url_of_search_results_css);
|
const auto cssUrl = renderUrl(m_root, RESOURCE::templates::url_of_search_results_css);
|
||||||
HTTPErrorResponse response(m_root, request, MHD_HTTP_NOT_FOUND,
|
HTTPErrorResponse response(request, MHD_HTTP_NOT_FOUND,
|
||||||
"fulltext-search-unavailable",
|
"fulltext-search-unavailable",
|
||||||
"404-page-heading",
|
"404-page-heading",
|
||||||
cssUrl);
|
cssUrl);
|
||||||
|
@ -980,7 +980,7 @@ std::unique_ptr<Response> InternalServer::handle_random(const RequestContext& re
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( startsWith(request.get_url(), "/random/") ) {
|
if ( startsWith(request.get_url(), "/random/") ) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string bookName;
|
std::string bookName;
|
||||||
|
@ -994,7 +994,7 @@ std::unique_ptr<Response> InternalServer::handle_random(const RequestContext& re
|
||||||
}
|
}
|
||||||
|
|
||||||
if (archive == nullptr) {
|
if (archive == nullptr) {
|
||||||
return HTTP404Response(m_root, request)
|
return HTTP404Response(request)
|
||||||
+ noSuchBookErrorMsg(bookName);
|
+ noSuchBookErrorMsg(bookName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1002,7 +1002,7 @@ std::unique_ptr<Response> InternalServer::handle_random(const RequestContext& re
|
||||||
auto entry = archive->getRandomEntry();
|
auto entry = archive->getRandomEntry();
|
||||||
return build_redirect(bookName, getFinalItem(*archive, entry));
|
return build_redirect(bookName, getFinalItem(*archive, entry));
|
||||||
} catch(zim::EntryNotFound& e) {
|
} catch(zim::EntryNotFound& e) {
|
||||||
return HTTP404Response(m_root, request)
|
return HTTP404Response(request)
|
||||||
+ nonParameterizedMessage("random-article-failure");
|
+ nonParameterizedMessage("random-article-failure");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1015,7 +1015,7 @@ std::unique_ptr<Response> InternalServer::handle_captured_external(const Request
|
||||||
} catch (const std::out_of_range& e) {}
|
} catch (const std::out_of_range& e) {}
|
||||||
|
|
||||||
if (source.empty()) {
|
if (source.empty()) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto data = get_default_data();
|
auto data = get_default_data();
|
||||||
|
@ -1033,7 +1033,7 @@ std::unique_ptr<Response> InternalServer::handle_catch(const RequestContext& req
|
||||||
return handle_captured_external(request);
|
return handle_captured_external(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string>
|
std::vector<std::string>
|
||||||
|
@ -1117,7 +1117,7 @@ std::unique_ptr<Response> InternalServer::handle_content(const RequestContext& r
|
||||||
|
|
||||||
if (archive == nullptr) {
|
if (archive == nullptr) {
|
||||||
const std::string searchURL = m_root + "/search?pattern=" + kiwix::urlEncode(pattern);
|
const std::string searchURL = m_root + "/search?pattern=" + kiwix::urlEncode(pattern);
|
||||||
return UrlNotFoundResponse(m_root, request)
|
return UrlNotFoundResponse(request)
|
||||||
+ suggestSearchMsg(searchURL, kiwix::urlDecode(pattern));
|
+ suggestSearchMsg(searchURL, kiwix::urlDecode(pattern));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1164,7 +1164,7 @@ std::unique_ptr<Response> InternalServer::handle_content(const RequestContext& r
|
||||||
printf("Failed to find %s\n", urlStr.c_str());
|
printf("Failed to find %s\n", urlStr.c_str());
|
||||||
|
|
||||||
std::string searchURL = m_root + "/search?content=" + bookName + "&pattern=" + kiwix::urlEncode(pattern);
|
std::string searchURL = m_root + "/search?content=" + bookName + "&pattern=" + kiwix::urlEncode(pattern);
|
||||||
return UrlNotFoundResponse(m_root, request)
|
return UrlNotFoundResponse(request)
|
||||||
+ suggestSearchMsg(searchURL, kiwix::urlDecode(pattern));
|
+ suggestSearchMsg(searchURL, kiwix::urlDecode(pattern));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1182,11 +1182,11 @@ std::unique_ptr<Response> InternalServer::handle_raw(const RequestContext& reque
|
||||||
bookName = request.get_url_part(1);
|
bookName = request.get_url_part(1);
|
||||||
kind = request.get_url_part(2);
|
kind = request.get_url_part(2);
|
||||||
} catch (const std::out_of_range& e) {
|
} catch (const std::out_of_range& e) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kind != "meta" && kind!= "content") {
|
if (kind != "meta" && kind!= "content") {
|
||||||
return UrlNotFoundResponse(m_root, request)
|
return UrlNotFoundResponse(request)
|
||||||
+ invalidRawAccessMsg(kind);
|
+ invalidRawAccessMsg(kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1197,7 +1197,7 @@ std::unique_ptr<Response> InternalServer::handle_raw(const RequestContext& reque
|
||||||
} catch (const std::out_of_range& e) {}
|
} catch (const std::out_of_range& e) {}
|
||||||
|
|
||||||
if (archive == nullptr) {
|
if (archive == nullptr) {
|
||||||
return UrlNotFoundResponse(m_root, request)
|
return UrlNotFoundResponse(request)
|
||||||
+ noSuchBookErrorMsg(bookName);
|
+ noSuchBookErrorMsg(bookName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1231,7 +1231,7 @@ std::unique_ptr<Response> InternalServer::handle_raw(const RequestContext& reque
|
||||||
if (m_verbose.load()) {
|
if (m_verbose.load()) {
|
||||||
printf("Failed to find %s\n", itemPath.c_str());
|
printf("Failed to find %s\n", itemPath.c_str());
|
||||||
}
|
}
|
||||||
return UrlNotFoundResponse(m_root, request)
|
return UrlNotFoundResponse(request)
|
||||||
+ rawEntryNotFoundMsg(kind, itemPath);
|
+ rawEntryNotFoundMsg(kind, itemPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog(const RequestContext& r
|
||||||
host = request.get_header("Host");
|
host = request.get_header("Host");
|
||||||
url = request.get_url_part(1);
|
url = request.get_url_part(1);
|
||||||
} catch (const std::out_of_range&) {
|
} catch (const std::out_of_range&) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url == "v2") {
|
if (url == "v2") {
|
||||||
|
@ -71,7 +71,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog(const RequestContext& r
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url != "searchdescription.xml" && url != "root.xml" && url != "search") {
|
if (url != "searchdescription.xml" && url != "root.xml" && url != "search") {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url == "searchdescription.xml") {
|
if (url == "searchdescription.xml") {
|
||||||
|
@ -108,7 +108,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2(const RequestContext
|
||||||
try {
|
try {
|
||||||
url = request.get_url_part(2);
|
url = request.get_url_part(2);
|
||||||
} catch (const std::out_of_range&) {
|
} catch (const std::out_of_range&) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url == "root.xml") {
|
if (url == "root.xml") {
|
||||||
|
@ -134,7 +134,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2(const RequestContext
|
||||||
} else if (url == "illustration") {
|
} else if (url == "illustration") {
|
||||||
return handle_catalog_v2_illustration(request);
|
return handle_catalog_v2_illustration(request);
|
||||||
} else {
|
} else {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_complete_entry(const
|
||||||
try {
|
try {
|
||||||
mp_library->getBookById(entryId);
|
mp_library->getBookById(entryId);
|
||||||
} catch (const std::out_of_range&) {
|
} catch (const std::out_of_range&) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper.get());
|
OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper.get());
|
||||||
|
@ -221,7 +221,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_illustration(const R
|
||||||
illustration->mimeType
|
illustration->mimeType
|
||||||
);
|
);
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
return UrlNotFoundResponse(m_root, request);
|
return UrlNotFoundResponse(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -163,14 +163,12 @@ std::unique_ptr<ContentResponse> ContentResponseBlueprint::generateResponseObjec
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
HTTPErrorResponse::HTTPErrorResponse(const std::string& root,
|
HTTPErrorResponse::HTTPErrorResponse(const RequestContext& request,
|
||||||
const RequestContext& request,
|
|
||||||
int httpStatusCode,
|
int httpStatusCode,
|
||||||
const std::string& pageTitleMsgId,
|
const std::string& pageTitleMsgId,
|
||||||
const std::string& headingMsgId,
|
const std::string& headingMsgId,
|
||||||
const std::string& cssUrl)
|
const std::string& cssUrl)
|
||||||
: ContentResponseBlueprint(root,
|
: ContentResponseBlueprint(&request,
|
||||||
&request,
|
|
||||||
httpStatusCode,
|
httpStatusCode,
|
||||||
request.get_requested_format() == "html" ? "text/html; charset=utf-8" : "application/xml; charset=utf-8",
|
request.get_requested_format() == "html" ? "text/html; charset=utf-8" : "application/xml; charset=utf-8",
|
||||||
request.get_requested_format() == "html" ? RESOURCE::templates::error_html : RESOURCE::templates::error_xml)
|
request.get_requested_format() == "html" ? RESOURCE::templates::error_html : RESOURCE::templates::error_xml)
|
||||||
|
@ -184,19 +182,16 @@ HTTPErrorResponse::HTTPErrorResponse(const std::string& root,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
HTTP404Response::HTTP404Response(const std::string& root,
|
HTTP404Response::HTTP404Response(const RequestContext& request)
|
||||||
const RequestContext& request)
|
: HTTPErrorResponse(request,
|
||||||
: HTTPErrorResponse(root,
|
|
||||||
request,
|
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
"404-page-title",
|
"404-page-title",
|
||||||
"404-page-heading")
|
"404-page-heading")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
UrlNotFoundResponse::UrlNotFoundResponse(const std::string& root,
|
UrlNotFoundResponse::UrlNotFoundResponse(const RequestContext& request)
|
||||||
const RequestContext& request)
|
: HTTP404Response(request)
|
||||||
: HTTP404Response(root, request)
|
|
||||||
{
|
{
|
||||||
const std::string requestUrl = urlDecode(m_request.get_full_url(), false);
|
const std::string requestUrl = urlDecode(m_request.get_full_url(), false);
|
||||||
*this += ParameterizedMessage("url-not-found", {{"url", requestUrl}});
|
*this += ParameterizedMessage("url-not-found", {{"url", requestUrl}});
|
||||||
|
@ -216,10 +211,8 @@ HTTPErrorResponse& HTTPErrorResponse::operator+=(const ParameterizedMessage& det
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HTTP400Response::HTTP400Response(const std::string& root,
|
HTTP400Response::HTTP400Response(const RequestContext& request)
|
||||||
const RequestContext& request)
|
: HTTPErrorResponse(request,
|
||||||
: HTTPErrorResponse(root,
|
|
||||||
request,
|
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
"400-page-title",
|
"400-page-title",
|
||||||
"400-page-heading")
|
"400-page-heading")
|
||||||
|
@ -232,10 +225,8 @@ HTTP400Response::HTTP400Response(const std::string& root,
|
||||||
*this += ParameterizedMessage("invalid-request", {{"url", requestUrl}});
|
*this += ParameterizedMessage("invalid-request", {{"url", requestUrl}});
|
||||||
}
|
}
|
||||||
|
|
||||||
HTTP500Response::HTTP500Response(const std::string& root,
|
HTTP500Response::HTTP500Response(const RequestContext& request)
|
||||||
const RequestContext& request)
|
: HTTPErrorResponse(request,
|
||||||
: HTTPErrorResponse(root,
|
|
||||||
request,
|
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
"500-page-title",
|
"500-page-title",
|
||||||
"500-page-heading")
|
"500-page-heading")
|
||||||
|
|
|
@ -115,13 +115,11 @@ class ContentResponse : public Response {
|
||||||
class ContentResponseBlueprint
|
class ContentResponseBlueprint
|
||||||
{
|
{
|
||||||
public: // functions
|
public: // functions
|
||||||
ContentResponseBlueprint(const std::string& root,
|
ContentResponseBlueprint(const RequestContext* request,
|
||||||
const RequestContext* request,
|
|
||||||
int httpStatusCode,
|
int httpStatusCode,
|
||||||
const std::string& mimeType,
|
const std::string& mimeType,
|
||||||
const std::string& templateStr)
|
const std::string& templateStr)
|
||||||
: m_root(root)
|
: m_request(*request)
|
||||||
, m_request(*request)
|
|
||||||
, m_httpStatusCode(httpStatusCode)
|
, m_httpStatusCode(httpStatusCode)
|
||||||
, m_mimeType(mimeType)
|
, m_mimeType(mimeType)
|
||||||
, m_template(templateStr)
|
, m_template(templateStr)
|
||||||
|
@ -140,7 +138,6 @@ protected: // functions
|
||||||
virtual std::unique_ptr<ContentResponse> generateResponseObject() const;
|
virtual std::unique_ptr<ContentResponse> generateResponseObject() const;
|
||||||
|
|
||||||
public: //data
|
public: //data
|
||||||
const std::string m_root;
|
|
||||||
const RequestContext& m_request;
|
const RequestContext& m_request;
|
||||||
const int m_httpStatusCode;
|
const int m_httpStatusCode;
|
||||||
const std::string m_mimeType;
|
const std::string m_mimeType;
|
||||||
|
@ -150,8 +147,7 @@ public: //data
|
||||||
|
|
||||||
struct HTTPErrorResponse : ContentResponseBlueprint
|
struct HTTPErrorResponse : ContentResponseBlueprint
|
||||||
{
|
{
|
||||||
HTTPErrorResponse(const std::string& root,
|
HTTPErrorResponse(const RequestContext& request,
|
||||||
const RequestContext& request,
|
|
||||||
int httpStatusCode,
|
int httpStatusCode,
|
||||||
const std::string& pageTitleMsgId,
|
const std::string& pageTitleMsgId,
|
||||||
const std::string& headingMsgId,
|
const std::string& headingMsgId,
|
||||||
|
@ -163,26 +159,22 @@ struct HTTPErrorResponse : ContentResponseBlueprint
|
||||||
|
|
||||||
struct HTTP404Response : HTTPErrorResponse
|
struct HTTP404Response : HTTPErrorResponse
|
||||||
{
|
{
|
||||||
HTTP404Response(const std::string& root,
|
explicit HTTP404Response(const RequestContext& request);
|
||||||
const RequestContext& request);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UrlNotFoundResponse : HTTP404Response
|
struct UrlNotFoundResponse : HTTP404Response
|
||||||
{
|
{
|
||||||
UrlNotFoundResponse(const std::string& root,
|
explicit UrlNotFoundResponse(const RequestContext& request);
|
||||||
const RequestContext& request);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct HTTP400Response : HTTPErrorResponse
|
struct HTTP400Response : HTTPErrorResponse
|
||||||
{
|
{
|
||||||
HTTP400Response(const std::string& root,
|
explicit HTTP400Response(const RequestContext& request);
|
||||||
const RequestContext& request);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct HTTP500Response : HTTPErrorResponse
|
struct HTTP500Response : HTTPErrorResponse
|
||||||
{
|
{
|
||||||
HTTP500Response(const std::string& root,
|
explicit HTTP500Response(const RequestContext& request);
|
||||||
const RequestContext& request);
|
|
||||||
|
|
||||||
private: // overrides
|
private: // overrides
|
||||||
// generateResponseObject() is overriden in order to produce a minimal
|
// generateResponseObject() is overriden in order to produce a minimal
|
||||||
|
|
Loading…
Reference in New Issue