2 // Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 #ifndef BEAST_WEBSOCKET_IMPL_ERROR_IPP
9 #define BEAST_WEBSOCKET_IMPL_ERROR_IPP
14 struct is_error_code_enum<beast::websocket::error>
16 static bool const value = true;
25 class websocket_error_category : public error_category
29 name() const noexcept override
35 message(int ev) const override
37 switch(static_cast<error>(ev))
39 case error::closed: return "WebSocket connection closed normally";
40 case error::failed: return "WebSocket connection failed due to a protocol violation";
41 case error::handshake_failed: return "WebSocket Upgrade handshake failed";
42 case error::keep_alive: return "WebSocket Upgrade handshake failed but connection is still open";
44 case error::response_malformed: return "malformed HTTP response";
45 case error::response_failed: return "upgrade request failed";
46 case error::response_denied: return "upgrade request denied";
47 case error::request_malformed: return "malformed HTTP request";
48 case error::request_invalid: return "upgrade request invalid";
49 case error::request_denied: return "upgrade request denied";
51 return "websocket error";
56 default_error_condition(int ev) const noexcept override
58 return error_condition(ev, *this);
63 error_condition const& condition
64 ) const noexcept override
66 return condition.value() == ev &&
67 &condition.category() == this;
71 equivalent(error_code const& error, int ev) const noexcept override
73 return error.value() == ev &&
74 &error.category() == this;
82 static detail::websocket_error_category const cat{};
90 make_error_code(error e)
93 static_cast<std::underlying_type<error>::type>(e),
94 detail::get_error_category());