File indexing completed on 2025-12-16 09:43:59
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef BOOST_BEAST_HTTP_IMPL_ERROR_IPP
0011 #define BOOST_BEAST_HTTP_IMPL_ERROR_IPP
0012
0013 #include <boost/beast/http/error.hpp>
0014 #include <type_traits>
0015
0016 namespace boost {
0017 namespace beast {
0018 namespace http {
0019 namespace detail {
0020
0021 class http_error_category : public error_category
0022 {
0023 public:
0024 const char*
0025 name() const noexcept override
0026 {
0027 return "beast.http";
0028 }
0029
0030 http_error_category() : error_category(0x964627da815bf210u) {}
0031
0032 BOOST_BEAST_DECL
0033 char const*
0034 message(int ev, char*, std::size_t) const noexcept override
0035 {
0036 switch(static_cast<error>(ev))
0037 {
0038 case error::end_of_stream: return "end of stream";
0039 case error::partial_message: return "partial message";
0040 case error::need_more: return "need more";
0041 case error::unexpected_body: return "unexpected body";
0042 case error::need_buffer: return "need buffer";
0043 case error::end_of_chunk: return "end of chunk";
0044 case error::buffer_overflow: return "buffer overflow";
0045 case error::header_limit: return "header limit exceeded";
0046 case error::body_limit: return "body limit exceeded";
0047 case error::bad_alloc: return "bad alloc";
0048 case error::bad_line_ending: return "bad line ending";
0049 case error::bad_method: return "bad method";
0050 case error::bad_target: return "bad target";
0051 case error::bad_version: return "bad version";
0052 case error::bad_status: return "bad status";
0053 case error::bad_reason: return "bad reason";
0054 case error::bad_field: return "bad field";
0055 case error::bad_value: return "bad value";
0056 case error::bad_content_length: return "bad Content-Length";
0057 case error::bad_transfer_encoding: return "bad Transfer-Encoding";
0058 case error::bad_chunk: return "bad chunk";
0059 case error::bad_chunk_extension: return "bad chunk extension";
0060 case error::bad_obs_fold: return "bad obs-fold";
0061 case error::multiple_content_length: return "multiple Content-Length";
0062 case error::stale_parser: return "stale parser";
0063 case error::short_read: return "unexpected eof in body";
0064 case error::header_field_name_too_large: return "header field name too large";
0065 case error::header_field_value_too_large: return "header field value too large";
0066
0067 default:
0068 return "beast.http error";
0069 }
0070 }
0071
0072 std::string
0073 message(int ev) const override
0074 {
0075 return message(ev, nullptr, 0);
0076 }
0077
0078 error_condition
0079 default_error_condition(
0080 int ev) const noexcept override
0081 {
0082 return error_condition{ev, *this};
0083 }
0084
0085 bool
0086 equivalent(int ev,
0087 error_condition const& condition
0088 ) const noexcept override
0089 {
0090 return condition.value() == ev &&
0091 &condition.category() == this;
0092 }
0093
0094 bool
0095 equivalent(error_code const& error,
0096 int ev) const noexcept override
0097 {
0098 return error.value() == ev &&
0099 &error.category() == this;
0100 }
0101 };
0102
0103 }
0104
0105 error_code
0106 make_error_code(error ev)
0107 {
0108 static detail::http_error_category const cat{};
0109 return error_code{static_cast<
0110 std::underlying_type<error>::type>(ev), cat};
0111 }
0112
0113 }
0114 }
0115 }
0116
0117 #endif