Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:43:59

0001 //
0002 // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
0003 //
0004 // Distributed under the Boost Software License, Version 1.0. (See accompanying
0005 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0006 //
0007 // Official repository: https://github.com/boostorg/beast
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 } // detail
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 } // http
0114 } // beast
0115 } // boost
0116 
0117 #endif