diff options
author | eidheim <eidheim@gmail.com> | 2019-04-29 14:35:52 +0300 |
---|---|---|
committer | eidheim <eidheim@gmail.com> | 2019-04-29 14:35:52 +0300 |
commit | 2442687bb56da1a8eb434d1b241a4d69bf0a7098 (patch) | |
tree | f35a7a16cb259d57f1570795717adbd5abc0a9c5 | |
parent | 49ceda8c92022d6e729041d06760f74c078e49f4 (diff) |
SimpleWeb::status_code(const std::string &) has been made more general and accepts custom status codes as well
-rw-r--r-- | status_code.hpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/status_code.hpp b/status_code.hpp index 0792727..9f9ecc5 100644 --- a/status_code.hpp +++ b/status_code.hpp @@ -1,6 +1,7 @@ #ifndef SIMPLE_WEB_STATUS_CODE_HPP #define SIMPLE_WEB_STATUS_CODE_HPP +#include <cstdlib> #include <map> #include <string> #include <unordered_map> @@ -140,17 +141,25 @@ namespace SimpleWeb { } inline StatusCode status_code(const std::string &status_code_string) noexcept { + if(status_code_string.size() < 3) + return StatusCode::unknown; + + auto number = status_code_string.substr(0, 3); + if(number[0] < '0' || number[0] > '9' || number[1] < '0' || number[1] > '9' || number[2] < '0' || number[2] > '9') + return StatusCode::unknown; + class StringToStatusCode : public std::unordered_map<std::string, SimpleWeb::StatusCode> { public: StringToStatusCode() { for(auto &status_code : status_code_strings()) - emplace(status_code.second, status_code.first); + emplace(status_code.second.substr(0, 3), status_code.first); } }; static StringToStatusCode string_to_status_code; - auto pos = string_to_status_code.find(status_code_string); + + auto pos = string_to_status_code.find(number); if(pos == string_to_status_code.end()) - return StatusCode::unknown; + return static_cast<StatusCode>(atoi(number.c_str())); return pos->second; } |