diff options
Diffstat (limited to 'error.cpp')
-rw-r--r-- | error.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/error.cpp b/error.cpp new file mode 100644 index 0000000..d7a26de --- /dev/null +++ b/error.cpp @@ -0,0 +1,32 @@ +#include "error.h" + +#include <iostream> + +#include <boost/asio/ssl/error.hpp> + +// Report a failure +void fail(boost::beast::error_code ec, char const* what) +{ + // ssl::error::stream_truncated, also known as an SSL "short read", + // indicates the peer closed the connection without performing the + // required closing handshake (for example, Google does this to + // improve performance). Generally this can be a security issue, + // but if your communication protocol is self-terminated (as + // it is with both HTTP and WebSocket) then you may simply + // ignore the lack of close_notify. + // + // https://github.com/boostorg/beast/issues/38 + // + // https://security.stackexchange.com/questions/91435/how-to-handle-a-malicious-ssl-tls-shutdown + // + // When a short read would cut off the end of an HTTP message, + // Beast returns the error beast::http::error::partial_message. + // Therefore, if we see a short read here, it has occurred + // after the message has been completed, so it is safe to ignore it. + + if (ec == boost::asio::ssl::error::stream_truncated) + return; + + std::cerr << what << ": " << ec.message() << "\n"; +} + |