Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-15 08:29:01

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_WEBSOCKET_IMPL_ERROR_IPP
0011 #define BOOST_BEAST_WEBSOCKET_IMPL_ERROR_IPP
0012 
0013 #include <boost/beast/websocket/error.hpp>
0014 
0015 namespace boost {
0016 namespace beast {
0017 namespace websocket {
0018 namespace detail {
0019 
0020 class error_codes : public error_category
0021 {
0022 public:
0023 
0024     error_codes() : error_category(0x065d7edd7687edafu )  {}
0025 
0026     const char*
0027     name() const noexcept override
0028     {
0029         return "boost.beast.websocket";
0030     }
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         default:
0039         case error::closed:                 return "The WebSocket stream was gracefully closed at both endpoints";
0040         case error::buffer_overflow:        return "The WebSocket operation caused a dynamic buffer overflow";
0041         case error::partial_deflate_block:  return "The WebSocket stream produced an incomplete deflate block";
0042         case error::message_too_big:        return "The WebSocket message exceeded the locally configured limit";
0043 
0044         case error::bad_http_version:       return "The WebSocket handshake was not HTTP/1.1";
0045         case error::bad_method:             return "The WebSocket handshake method was not GET";
0046         case error::no_host:                return "The WebSocket handshake Host field is missing";
0047         case error::no_connection:          return "The WebSocket handshake Connection field is missing";
0048         case error::no_connection_upgrade:  return "The WebSocket handshake Connection field is missing the upgrade token";
0049         case error::no_upgrade:             return "The WebSocket handshake Upgrade field is missing";
0050         case error::no_upgrade_websocket:   return "The WebSocket handshake Upgrade field is missing the websocket token";
0051         case error::no_sec_key:             return "The WebSocket handshake Sec-WebSocket-Key field is missing";
0052         case error::bad_sec_key:            return "The WebSocket handshake Sec-WebSocket-Key field is invalid";
0053         case error::no_sec_version:         return "The WebSocket handshake Sec-WebSocket-Version field is missing";
0054         case error::bad_sec_version:        return "The WebSocket handshake Sec-WebSocket-Version field is invalid";
0055         case error::no_sec_accept:          return "The WebSocket handshake Sec-WebSocket-Accept field is missing";
0056         case error::bad_sec_accept:         return "The WebSocket handshake Sec-WebSocket-Accept field is invalid";
0057         case error::upgrade_declined:       return "The WebSocket handshake was declined by the remote peer";
0058 
0059         case error::bad_opcode:             return "The WebSocket frame contained an illegal opcode";
0060         case error::bad_data_frame:         return "The WebSocket data frame was unexpected";
0061         case error::bad_continuation:       return "The WebSocket continuation frame was unexpected";
0062         case error::bad_reserved_bits:      return "The WebSocket frame contained illegal reserved bits";
0063         case error::bad_control_fragment:   return "The WebSocket control frame was fragmented";
0064         case error::bad_control_size:       return "The WebSocket control frame size was invalid";
0065         case error::bad_unmasked_frame:     return "The WebSocket frame was unmasked";
0066         case error::bad_masked_frame:       return "The WebSocket frame was masked";
0067         case error::bad_size:               return "The WebSocket frame size was not canonical";
0068         case error::bad_frame_payload:      return "The WebSocket frame payload was not valid utf8";
0069         case error::bad_close_code:         return "The WebSocket close frame reason code was invalid";
0070         case error::bad_close_size:         return "The WebSocket close frame payload size was invalid";
0071         case error::bad_close_payload:      return "The WebSocket close frame payload was not valid utf8";
0072         }
0073     }
0074 
0075     std::string
0076     message(int ev) const override
0077     {
0078         return message(ev, nullptr, 0);
0079     }
0080 
0081     error_condition
0082     default_error_condition(int ev) const noexcept override
0083     {
0084         switch(static_cast<error>(ev))
0085         {
0086         default:
0087         case error::closed:
0088         case error::buffer_overflow:
0089         case error::partial_deflate_block:
0090         case error::message_too_big:
0091             return {ev, *this};
0092 
0093         case error::bad_http_version:
0094         case error::bad_method:
0095         case error::no_host:
0096         case error::no_connection:
0097         case error::no_connection_upgrade:
0098         case error::no_upgrade:
0099         case error::no_upgrade_websocket:
0100         case error::no_sec_key:
0101         case error::bad_sec_key:
0102         case error::no_sec_version:
0103         case error::bad_sec_version:
0104         case error::no_sec_accept:
0105         case error::bad_sec_accept:
0106         case error::upgrade_declined:
0107             return condition::handshake_failed;
0108 
0109         case error::bad_opcode:
0110         case error::bad_data_frame:
0111         case error::bad_continuation:
0112         case error::bad_reserved_bits:
0113         case error::bad_control_fragment:
0114         case error::bad_control_size:
0115         case error::bad_unmasked_frame:
0116         case error::bad_masked_frame:
0117         case error::bad_size:
0118         case error::bad_frame_payload:
0119         case error::bad_close_code:
0120         case error::bad_close_size:
0121         case error::bad_close_payload:
0122             return condition::protocol_violation;
0123         }
0124     }
0125 };
0126 
0127 class error_conditions : public error_category
0128 {
0129 public:
0130     const char*
0131     name() const noexcept override
0132     {
0133         return "boost.beast.websocket";
0134     }
0135 
0136     error_conditions() : error_category(0x7a8de5d61799ce9eu)  {}
0137 
0138     BOOST_BEAST_DECL
0139     char const*
0140     message(int cv, char*, std::size_t) const noexcept override
0141     {
0142         switch(static_cast<condition>(cv))
0143         {
0144         default:
0145         case condition::handshake_failed: return "The WebSocket handshake failed";
0146         case condition::protocol_violation: return "A WebSocket protocol violation occurred";
0147         }
0148     }
0149 
0150     std::string
0151     message(int cv) const override
0152     {
0153         return message(cv, nullptr, 0);
0154     }
0155 };
0156 
0157 } // detail
0158 
0159 error_code
0160 make_error_code(error e)
0161 {
0162     static detail::error_codes const cat{};
0163     return error_code{static_cast<
0164         std::underlying_type<error>::type>(e), cat};
0165 }
0166 
0167 error_condition
0168 make_error_condition(condition c)
0169 {
0170     static detail::error_conditions const cat{};
0171     return error_condition{static_cast<
0172         std::underlying_type<condition>::type>(c), cat};
0173 }
0174 
0175 } // websocket
0176 } // beast
0177 } // boost
0178 
0179 #endif