diff --git a/src/http.cpp b/src/http.cpp index c2c8f5a..23cdf2b 100644 --- a/src/http.cpp +++ b/src/http.cpp @@ -34,6 +34,7 @@ const Request http::parse_request(const string &request) } uint16_t size = 80; + string fallback; string digest = request.substr(8); std::transform(digest.begin(), digest.end(), digest.begin(), ::tolower); std::size_t pos_digest = digest.find('?'); @@ -43,30 +44,47 @@ const Request http::parse_request(const string &request) digest = digest.substr(0, pos_digest); string answer; - answer = get_parameter(request, "s"); - if (!answer.empty()) { - size = static_cast(std::stoul(answer)); - } - else - { - answer = get_parameter(request, "size"); + answer = get_parameter(request, "s"); if (!answer.empty()) { size = static_cast(std::stoul(answer)); } + else + { + answer = get_parameter(request, "size"); + if (!answer.empty()) + { + size = static_cast(std::stoul(answer)); + } + } + if (size > 512) + { + size = 512; + } + if (size < 1) + { + size = 1; + } } - if (size > 512) { - size = 512; - } - if (size < 1) - { - size = 1; + answer = get_parameter(request, "d"); + if (!answer.empty()) + { + fallback = answer; + } + else + { + answer = get_parameter(request, "default"); + if (!answer.empty()) + { + fallback = answer; + } + } } } - return { digest, size }; + return { digest, size, fallback }; } const string http::get_parameter(const string &request, const string ¶meter) diff --git a/src/libravatarserv.cpp b/src/libravatarserv.cpp index 2a5f007..4368273 100644 --- a/src/libravatarserv.cpp +++ b/src/libravatarserv.cpp @@ -62,8 +62,19 @@ int main() } else { - cout << "Status: 404 Not Found\n\n"; cerr << "Error " << std::to_string(answer.error) << ": Could not open file.\n"; + if (avatar.fallback.empty()) + { + cout << "Status: 404 Not Found\n\n"; + } + else + { + if (avatar.fallback.substr(0, 4) == "http") + { + cout << "Status: 307 Temporary Redirect\n"; + cout << "Location: " << avatar.fallback << endl << endl; + } + } } return 0; diff --git a/src/libravatarserv.hpp b/src/libravatarserv.hpp index d860bdf..4144e60 100644 --- a/src/libravatarserv.hpp +++ b/src/libravatarserv.hpp @@ -49,6 +49,7 @@ namespace http // http.cpp { const string digest; uint16_t size; + const string fallback; }; const Request parse_request(const string &request);