mirror of
https://github.com/boostorg/beast.git
synced 2025-07-30 04:47:29 +02:00
Refactor WebSocket error codes (API Change):
fix #325 This removes unused and misleading handshake error codes. All semantic handshake failures are now reported using the same code, error::handshake_failed. Errors originating from stream operations still use the underlying stream error codes (for example: boost::asio::error::connection_reset).
This commit is contained in:
@ -8,6 +8,10 @@
|
||||
* More flat_streambuf tests
|
||||
* WebSocket doc work
|
||||
|
||||
API Changes:
|
||||
|
||||
* Refactor WebSocket error codes (API Change)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
1.0.0-b37
|
||||
|
@ -23,32 +23,8 @@ enum class error
|
||||
/// WebSocket connection failed, protocol violation
|
||||
failed,
|
||||
|
||||
/// Upgrade request failed, connection is closed
|
||||
handshake_failed,
|
||||
|
||||
/// Upgrade request failed, but connection is still open
|
||||
keep_alive,
|
||||
|
||||
/// HTTP response is malformed
|
||||
response_malformed,
|
||||
|
||||
/// HTTP response failed the upgrade
|
||||
response_failed,
|
||||
|
||||
/// Upgrade request denied for invalid fields.
|
||||
response_denied,
|
||||
|
||||
/// Upgrade request is malformed
|
||||
request_malformed,
|
||||
|
||||
/// Upgrade request fields incorrect
|
||||
request_invalid,
|
||||
|
||||
/// Upgrade request denied
|
||||
request_denied,
|
||||
|
||||
/// General WebSocket error
|
||||
general
|
||||
/// Upgrade handshake failed
|
||||
handshake_failed
|
||||
};
|
||||
|
||||
} // websocket
|
||||
|
@ -39,14 +39,7 @@ public:
|
||||
case error::closed: return "WebSocket connection closed normally";
|
||||
case error::failed: return "WebSocket connection failed due to a protocol violation";
|
||||
case error::handshake_failed: return "WebSocket Upgrade handshake failed";
|
||||
case error::keep_alive: return "WebSocket Upgrade handshake failed but connection is still open";
|
||||
|
||||
case error::response_malformed: return "malformed HTTP response";
|
||||
case error::response_failed: return "upgrade request failed";
|
||||
case error::response_denied: return "upgrade request denied";
|
||||
case error::request_malformed: return "malformed HTTP request";
|
||||
case error::request_invalid: return "upgrade request invalid";
|
||||
case error::request_denied: return "upgrade request denied";
|
||||
default:
|
||||
return "websocket error";
|
||||
}
|
||||
|
@ -289,23 +289,30 @@ stream<NextLayer>::
|
||||
do_response(http::response_header const& res,
|
||||
detail::sec_ws_key_type const& key, error_code& ec)
|
||||
{
|
||||
// VFALCO Review these error codes
|
||||
auto fail = [&]{ ec = error::response_failed; };
|
||||
if(res.version < 11)
|
||||
return fail();
|
||||
if(res.status != 101)
|
||||
return fail();
|
||||
if(! is_upgrade(res))
|
||||
return fail();
|
||||
if(! http::token_list{res.fields["Upgrade"]}.exists("websocket"))
|
||||
return fail();
|
||||
if(! res.fields.exists("Sec-WebSocket-Accept"))
|
||||
return fail();
|
||||
detail::sec_ws_accept_type accept;
|
||||
detail::make_sec_ws_accept(accept, key);
|
||||
if(accept.compare(
|
||||
res.fields["Sec-WebSocket-Accept"]) != 0)
|
||||
return fail();
|
||||
bool const success = [&]()
|
||||
{
|
||||
if(res.version < 11)
|
||||
return false;
|
||||
if(res.status != 101)
|
||||
return false;
|
||||
if(! is_upgrade(res))
|
||||
return false;
|
||||
if(! http::token_list{res.fields["Upgrade"]}.exists("websocket"))
|
||||
return false;
|
||||
if(! res.fields.exists("Sec-WebSocket-Accept"))
|
||||
return false;
|
||||
detail::sec_ws_accept_type accept;
|
||||
detail::make_sec_ws_accept(accept, key);
|
||||
if(accept.compare(
|
||||
res.fields["Sec-WebSocket-Accept"]) != 0)
|
||||
return false;
|
||||
return true;
|
||||
}();
|
||||
if(! success)
|
||||
{
|
||||
ec = error::handshake_failed;
|
||||
return;
|
||||
}
|
||||
detail::pmd_offer offer;
|
||||
pmd_read(offer, res.fields);
|
||||
// VFALCO see if offer satisfies pmd_config_,
|
||||
|
@ -37,14 +37,6 @@ public:
|
||||
check("websocket", error::closed);
|
||||
check("websocket", error::failed);
|
||||
check("websocket", error::handshake_failed);
|
||||
check("websocket", error::keep_alive);
|
||||
check("websocket", error::response_malformed);
|
||||
check("websocket", error::response_failed);
|
||||
check("websocket", error::response_denied);
|
||||
check("websocket", error::request_malformed);
|
||||
check("websocket", error::request_invalid);
|
||||
check("websocket", error::request_denied);
|
||||
check("websocket", error::general);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1107,7 +1107,7 @@ public:
|
||||
}
|
||||
catch(system_error const& se)
|
||||
{
|
||||
BEAST_EXPECT(se.code() == error::response_failed);
|
||||
BEAST_EXPECT(se.code() == error::handshake_failed);
|
||||
}
|
||||
};
|
||||
// wrong HTTP version
|
||||
|
Reference in New Issue
Block a user