userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
websocket_response.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/clients/http/websocket_response.hpp
4
/// @brief @copybrief clients::http::WebSocketResponse
5
6
#
include
<
string
>
7
8
#
include
<
userver
/
clients
/
http
/
response
.
hpp
>
9
#
include
<
userver
/
fs
/
blocking
/
file_descriptor
.
hpp
>
10
11
USERVER_NAMESPACE_BEGIN
12
13
namespace
websocket {
14
class
WebSocketConnection
;
15
struct
Config;
16
}
// namespace websocket
17
18
namespace
clients::http {
19
20
/// @brief HTTP response for WebSocket upgrade.
21
///
22
/// Call @ref clients::http::Request::PerformWebSocketHandshake()
23
/// to get one. After successful WebSocket handshake, you can use
24
/// MakeWebSocketConnection() to establish a WebSocket connection.
25
///
26
/// @snippet samples/websocket_client/main.cpp WebSocket client sample - handler
27
class
WebSocketResponse
final
{
28
public
:
29
/// @cond
30
WebSocketResponse(
31
std::shared_ptr<Response> handshake_response,
32
fs::
blocking
::FileDescriptor&& socket,
33
std::string socket_preamble = {}
34
);
35
/// @endcond
36
37
WebSocketResponse() =
default
;
38
WebSocketResponse(WebSocketResponse&&) =
default
;
39
WebSocketResponse(
const
WebSocketResponse&) =
delete
;
40
WebSocketResponse& operator=(WebSocketResponse&&) =
default
;
41
WebSocketResponse& operator=(
const
WebSocketResponse&) =
delete
;
42
43
/// @brief Get the HTTP handshake response
44
std::shared_ptr<Response>
GetHandshakeResponse
() {
return
handshake_response_; }
45
46
/// @brief Check if WebSocket protocol upgrade was successful
47
/// @returns true if handshake completed with status 101 Switching Protocols
48
bool
IsProtocolUpgraded
()
const
;
49
50
/// @brief Create a WebSocket connection from this response
51
std::shared_ptr<websocket::
WebSocketConnection
>
MakeWebSocketConnection
();
52
53
/// @brief Create a WebSocket connection from this response with custom websocket config
54
std::shared_ptr<websocket::
WebSocketConnection
>
MakeWebSocketConnectionWithConfig
(
const
websocket::Config& config);
55
56
private
:
57
std::shared_ptr<Response> handshake_response_;
58
fs::
blocking
::FileDescriptor socket_;
59
/// Raw WebSocket frames drained from libcurl CONNECT_ONLY buffers.
60
std::string socket_preamble_;
61
};
62
63
/// @cond
64
namespace
impl {
65
66
/// Function pointer for curl::easy::enable_socket_extraction (curl thread, before remove).
67
std::string DrainCurlWebSocketPreamble(
void
* native_easy);
68
69
}
// namespace impl
70
/// @endcond
71
72
}
// namespace clients::http
73
74
USERVER_NAMESPACE_END
userver
clients
http
websocket_response.hpp
Generated on
for userver by
Doxygen
1.17.0