userver: userver/clients/http/websocket_response.hpp Source File
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 <userver/clients/http/response.hpp>
7#include <userver/fs/blocking/file_descriptor.hpp>
8
9USERVER_NAMESPACE_BEGIN
10
11namespace websocket {
13} // namespace websocket
14
15namespace clients::http {
16
17/// @brief HTTP response for WebSocket upgrade.
18///
19/// Call @ref http::client::Request::PerformWebSocketHandshake()
20/// to get one. After successful WebSocket handshake, you can use
21/// MakeWebSocketConnection() to establish a WebSocket connection.
22///
23/// @snippet samples/websocket_client/main.cpp WebSocket client sample - handler
24class WebSocketResponse final {
25public:
26 /// @cond
27 WebSocketResponse(std::shared_ptr<Response> handshake_response, fs::blocking::FileDescriptor&& socket);
28 /// @endcond
29
30 WebSocketResponse() = default;
31 WebSocketResponse(WebSocketResponse&&) = default;
32 WebSocketResponse(const WebSocketResponse&) = delete;
33 WebSocketResponse& operator=(WebSocketResponse&&) = default;
34 WebSocketResponse& operator=(const WebSocketResponse&) = delete;
35
36 /// @brief Get the HTTP handshake response
37 std::shared_ptr<Response> GetHandshakeResponse() { return handshake_response_; }
38
39 /// @brief Check if WebSocket protocol upgrade was successful
40 /// @returns true if handshake completed with status 101 Switching Protocols
41 bool IsProtocolUpgraded() const;
42
43 /// @brief Create a WebSocket connection from this response
44 std::shared_ptr<websocket::WebSocketConnection> MakeWebSocketConnection();
45
46private:
47 std::shared_ptr<Response> handshake_response_;
48 fs::blocking::FileDescriptor socket_;
49};
50
51} // namespace clients::http
52
53USERVER_NAMESPACE_END