summaryrefslogtreecommitdiffhomepage
path: root/error.cpp
blob: d7a26def51d48f59d87c75853967a23940e14504 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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";
}