// // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // Official repository: https://github.com/boostorg/beast // #ifndef BOOST_BEAST_WEBSOCKET_ERROR_HPP #define BOOST_BEAST_WEBSOCKET_ERROR_HPP #include #include namespace boost { namespace beast { namespace websocket { /// Error codes returned from @ref beast::websocket::stream operations. enum class error { /** The WebSocket stream was gracefully closed at both endpoints */ closed = 1, /* The error codes error::failed and error::handshake_failed are no longer in use. Please change your code to compare values of type error_code against condition::handshake_failed and condition::protocol_violation instead. Apologies for the inconvenience. - VFALCO */ #if ! BOOST_BEAST_DOXYGEN unused1 = 2, // failed unused2 = 3, // handshake_failed #endif /** The WebSocket operation caused a dynamic buffer overflow */ buffer_overflow, /** The WebSocket stream produced an incomplete deflate block */ partial_deflate_block, /** The WebSocket message exceeded the locally configured limit */ message_too_big, // // Handshake failure errors // // These will compare equal to condition::handshake_failed // /** The WebSocket handshake was not HTTP/1.1 Error codes with this value will compare equal to @ref condition::handshake_failed */ bad_http_version, /** The WebSocket handshake method was not GET Error codes with this value will compare equal to @ref condition::handshake_failed */ bad_method, /** The WebSocket handshake Host field is missing Error codes with this value will compare equal to @ref condition::handshake_failed */ no_host, /** The WebSocket handshake Connection field is missing Error codes with this value will compare equal to @ref condition::handshake_failed */ no_connection, /** The WebSocket handshake Connection field is missing the upgrade token Error codes with this value will compare equal to @ref condition::handshake_failed */ no_connection_upgrade, /** The WebSocket handshake Upgrade field is missing Error codes with this value will compare equal to @ref condition::handshake_failed */ no_upgrade, /** The WebSocket handshake Upgrade field is missing the websocket token Error codes with this value will compare equal to @ref condition::handshake_failed */ no_upgrade_websocket, /** The WebSocket handshake Sec-WebSocket-Key field is missing Error codes with this value will compare equal to @ref condition::handshake_failed */ no_sec_key, /** The WebSocket handshake Sec-WebSocket-Key field is invalid Error codes with this value will compare equal to @ref condition::handshake_failed */ bad_sec_key, /** The WebSocket handshake Sec-WebSocket-Version field is missing Error codes with this value will compare equal to @ref condition::handshake_failed */ no_sec_version, /** The WebSocket handshake Sec-WebSocket-Version field is invalid Error codes with this value will compare equal to @ref condition::handshake_failed */ bad_sec_version, /** The WebSocket handshake Sec-WebSocket-Accept field is missing Error codes with this value will compare equal to @ref condition::handshake_failed */ no_sec_accept, /** The WebSocket handshake Sec-WebSocket-Accept field is invalid Error codes with this value will compare equal to @ref condition::handshake_failed */ bad_sec_accept, /** The WebSocket handshake was declined by the remote peer Error codes with this value will compare equal to @ref condition::handshake_failed */ upgrade_declined, // // Protocol errors // // These will compare equal to condition::protocol_violation // /** The WebSocket frame contained an illegal opcode Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_opcode, /** The WebSocket data frame was unexpected Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_data_frame, /** The WebSocket continuation frame was unexpected Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_continuation, /** The WebSocket frame contained illegal reserved bits Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_reserved_bits, /** The WebSocket control frame was fragmented Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_control_fragment, /** The WebSocket control frame size was invalid Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_control_size, /** The WebSocket frame was unmasked Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_unmasked_frame, /** The WebSocket frame was masked Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_masked_frame, /** The WebSocket frame size was not canonical Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_size, /** The WebSocket frame payload was not valid utf8 Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_frame_payload, /** The WebSocket close frame reason code was invalid Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_close_code, /** The WebSocket close frame payload size was invalid Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_close_size, /** The WebSocket close frame payload was not valid utf8 Error codes with this value will compare equal to @ref condition::protocol_violation */ bad_close_payload }; /// Error conditions corresponding to sets of error codes. enum class condition { /** The WebSocket handshake failed This condition indicates that the WebSocket handshake failed. If the corresponding HTTP response indicates the keep-alive behavior, then the handshake may be reattempted. */ handshake_failed = 1, /** A WebSocket protocol violation occurred This condition indicates that the remote peer on the WebSocket connection sent data which violated the protocol. */ protocol_violation }; } // websocket } // beast } // boost #include #ifdef BOOST_BEAST_HEADER_ONLY #include #endif #endif