File indexing completed on 2025-07-15 08:29:01
0001
0002
0003
0004
0005
0006
0007
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 }
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 }
0176 }
0177 }
0178
0179 #endif