diff --git a/include/boost/beast/websocket/detail/frame.hpp b/include/boost/beast/websocket/detail/frame.hpp index a7ab7467a8..2a69cbdddb 100644 --- a/include/boost/beast/websocket/detail/frame.hpp +++ b/include/boost/beast/websocket/detail/frame.hpp @@ -106,13 +106,13 @@ is_valid_close_code(std::uint16_t v) case close_code::internal_error: // 1011 case close_code::service_restart: // 1012 case close_code::try_again_later: // 1013 + case close_code::bad_gateway: // 1014 return true; // explicitly reserved case close_code::reserved1: // 1004 case close_code::no_status: // 1005 case close_code::abnormal: // 1006 - case close_code::reserved2: // 1014 case close_code::reserved3: // 1015 return false; } diff --git a/include/boost/beast/websocket/rfc6455.hpp b/include/boost/beast/websocket/rfc6455.hpp index 7611096bba..c8720bf1db 100644 --- a/include/boost/beast/websocket/rfc6455.hpp +++ b/include/boost/beast/websocket/rfc6455.hpp @@ -107,6 +107,9 @@ enum close_code : std::uint16_t /// The server is terminating the connection due to a temporary condition, e.g. it is overloaded and is casting off some of its clients. try_again_later = 1013, + /// The endpoint, acting as a gateway or proxy, received an invalid response from an upstream server, analogous to HTTP status 502. + bad_gateway = 1014, + //---- // // The following are illegal on the wire @@ -137,13 +140,7 @@ enum close_code : std::uint16_t abnormal = 1006, /** Reserved for future use by the WebSocket standard. - - This code is reserved and may not be sent. - */ - reserved2 = 1014, - /** Reserved for future use by the WebSocket standard. - This code is reserved and may not be sent. */ reserved3 = 1015 diff --git a/test/beast/websocket/frame.cpp b/test/beast/websocket/frame.cpp index 8380e132c4..8ff0f1107a 100644 --- a/test/beast/websocket/frame.cpp +++ b/test/beast/websocket/frame.cpp @@ -27,11 +27,13 @@ class frame_test BEAST_EXPECT(! is_valid_close_code(1004)); BEAST_EXPECT(! is_valid_close_code(1005)); BEAST_EXPECT(! is_valid_close_code(1006)); + BEAST_EXPECT(! is_valid_close_code(1015)); BEAST_EXPECT(! is_valid_close_code(1016)); BEAST_EXPECT(! is_valid_close_code(2000)); BEAST_EXPECT(! is_valid_close_code(2999)); BEAST_EXPECT(is_valid_close_code(1000)); BEAST_EXPECT(is_valid_close_code(1002)); + BEAST_EXPECT(is_valid_close_code(1014)); BEAST_EXPECT(is_valid_close_code(3000)); BEAST_EXPECT(is_valid_close_code(4000)); BEAST_EXPECT(is_valid_close_code(5000));