aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/utils/http_util/http_util.h
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2018-11-17 16:23:51 -0500
committerJack Lloyd <[email protected]>2018-11-23 11:15:25 -0500
commitb909778857b3e0b7eb86ac26c818e5f25baaddbd (patch)
treef8a5c9cbec26310bbfc9077563892b04db158a48 /src/lib/utils/http_util/http_util.h
parentc20a428ca2f7c1ef96e642f55bb898010444c499 (diff)
Make exceptions easier to translate to error codes
Avoid throwing base Botan::Exception type, as it is difficult to determine what the error is in that case. Add Exception::error_code and Exception::error_type which allows (for error code) more information about the error and (for error type) allows knowing the error type without requiring a sequence of catches. See GH #1742
Diffstat (limited to 'src/lib/utils/http_util/http_util.h')
-rw-r--r--src/lib/utils/http_util/http_util.h27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/lib/utils/http_util/http_util.h b/src/lib/utils/http_util/http_util.h
index 9edd3d983..92a67e42b 100644
--- a/src/lib/utils/http_util/http_util.h
+++ b/src/lib/utils/http_util/http_util.h
@@ -20,6 +20,20 @@ namespace Botan {
namespace HTTP {
+/**
+* HTTP_Error Exception
+*/
+class BOTAN_PUBLIC_API(2,0) HTTP_Error final : public Exception
+ {
+ public:
+ explicit HTTP_Error(const std::string& msg) :
+ Exception("HTTP error " + msg)
+ {}
+
+ ErrorType error_type() const noexcept override { return ErrorType::HttpError; }
+
+ };
+
class Response final
{
public:
@@ -44,7 +58,7 @@ class Response final
void throw_unless_ok()
{
if(status_code() != 200)
- throw Exception("HTTP error: " + status_message());
+ throw HTTP_Error(status_message());
}
private:
@@ -54,17 +68,6 @@ class Response final
std::map<std::string, std::string> m_headers;
};
-/**
-* HTTP_Error Exception
-*/
-class BOTAN_PUBLIC_API(2,0) HTTP_Error final : public Exception
- {
- public:
- explicit HTTP_Error(const std::string& msg) :
- Exception("HTTP error " + msg)
- {}
- };
-
BOTAN_PUBLIC_API(2,0) std::ostream& operator<<(std::ostream& o, const Response& resp);
typedef std::function<std::string (const std::string&, const std::string&)> http_exch_fn;