A11 (C++ runtime)
Native C++ implementation of the A11 action and streaming runtime
Loading...
Searching...
No Matches
websocket_signalling.h
Go to the documentation of this file.
1// Copyright 2026 The A11 Authors.
2
15#ifndef A11_NET_WEBSOCKET_SIGNALLING_H_
16#define A11_NET_WEBSOCKET_SIGNALLING_H_
17
18#include <cstddef>
19#include <cstdint>
20#include <memory>
21#include <string>
22
23#include <absl/base/nullability.h>
24#include <absl/status/status.h>
25#include <absl/status/statusor.h>
26#include <absl/time/time.h>
27
29#include "a11/net/http2.h"
30#include "a11/net/signalling.h"
31
32namespace a11::net {
33
42 absl::Time deadline = absl::InfiniteFuture();
43 size_t max_message_size = 1024 * 1024;
44
46 absl::Status Validate() const;
47};
48
58 : public SignallingTransport,
59 public std::enable_shared_from_this<WebSocketSignallingClient> {
60 private:
61 struct State;
62
63 struct ConstructorToken {};
64
65 public:
76 std::string url, std::string identity,
77 OnSignallingMessage on_message = {},
79
81
82 absl::Status Send(SignallingMessage message) override;
83 absl::Status SetOnMessage(OnSignallingMessage on_message) override;
84 absl::Status Close() override;
85 [[nodiscard]] std::string identity() const override;
86 [[nodiscard]] bool connected() const override;
87 [[nodiscard]] absl::Status GetStatus() const override;
89 [[nodiscard]] void* absl_nullable GetImpl() const;
90
91 explicit WebSocketSignallingClient(ConstructorToken,
92 std::shared_ptr<State> state)
93 : state_(std::move(state)) {}
94
95 private:
96 static void Pump(const std::shared_ptr<State>& state);
97 static void Fail(const std::shared_ptr<State>& state, absl::Status status);
98
99 std::shared_ptr<State> state_;
100};
101
109 std::string path_prefix =
110 "/";
111 std::string bind_address = "127.0.0.1";
112 std::uint16_t port = 0;
114 size_t max_message_size = 1024 * 1024;
115
117 absl::Status Validate() const;
118};
119
128 : public std::enable_shared_from_this<WebSocketSignallingServer> {
129 public:
137 static absl::StatusOr<std::shared_ptr<WebSocketSignallingServer>> Create(
138 std::shared_ptr<SignallingService> service,
140
142
144 absl::Status Stop();
146 [[nodiscard]] std::uint16_t port() const;
148 [[nodiscard]] bool running() const;
150 [[nodiscard]] std::shared_ptr<SignallingService> service() const;
152 [[nodiscard]] void* absl_nullable GetImpl() const;
153
154 private:
155 struct State;
156
157 explicit WebSocketSignallingServer(std::shared_ptr<State> state)
158 : state_(std::move(state)) {}
159
160 static void Remove(const std::shared_ptr<State>& state, std::string identity);
161
162 std::shared_ptr<State> state_;
163};
164
165} // namespace a11::net
166
167#endif // A11_NET_WEBSOCKET_SIGNALLING_H_
Shared handle to one asynchronous result.
Definition future.h:110
Abstract identity-bound channel over which signalling flows.
Definition signalling.h:80
A SignallingTransport that relays messages over a WebSocket.
Definition websocket_signalling.h:59
absl::Status GetStatus() const override
Definition websocket_signalling.cc:419
void *absl_nullable GetImpl() const
Definition websocket_signalling.cc:424
~WebSocketSignallingClient() override
Definition websocket_signalling.cc:354
bool connected() const override
Definition websocket_signalling.cc:414
absl::Status Send(SignallingMessage message) override
Sends a signalling message to the peer (non-blocking).
Definition websocket_signalling.cc:358
absl::Status Close() override
Closes the transport and releases its resources.
Definition websocket_signalling.cc:391
absl::Status SetOnMessage(OnSignallingMessage on_message) override
Registers the async callback invoked for each inbound message.
Definition websocket_signalling.cc:378
std::string identity() const override
Definition websocket_signalling.cc:410
WebSocketSignallingClient(ConstructorToken, std::shared_ptr< State > state)
Definition websocket_signalling.h:91
static a11::Future< std::shared_ptr< WebSocketSignallingClient > > Connect(std::string url, std::string identity, OnSignallingMessage on_message={}, WebSocketSignallingClientOptions options={})
Asynchronously connects to a WebSocket signalling server.
Definition websocket_signalling.cc:154
Fronts an in-process SignallingService over a WebSocket.
Definition websocket_signalling.h:128
~WebSocketSignallingServer()
Definition websocket_signalling.cc:624
absl::Status Stop()
Stops the server and closes all client connections.
Definition websocket_signalling.cc:628
bool running() const
Definition websocket_signalling.cc:656
static absl::StatusOr< std::shared_ptr< WebSocketSignallingServer > > Create(std::shared_ptr< SignallingService > service, WebSocketSignallingServerOptions options={})
Creates a WebSocket signalling server fronting service.
Definition websocket_signalling.cc:462
std::uint16_t port() const
Definition websocket_signalling.cc:651
std::shared_ptr< SignallingService > service() const
Definition websocket_signalling.cc:662
void *absl_nullable GetImpl() const
Definition websocket_signalling.cc:666
Completion values used by every asynchronous A11 operation.
A11's nghttp2 HTTP/2 client, server, and streaming primitives.
Definition action.h:46
std::function< a11::Task(SignallingMessage message)> OnSignallingMessage
Async callback invoked for each inbound SignallingMessage.
Definition signalling.h:71
Future< T > SubmitWithCancellationHook(absl::AnyInvocable< absl::StatusOr< T >() && > work, std::function< void()> cancellation_hook, thread::TreeOptions tree_options)
Run work on A11's fiber pool with application-specific cancellation.
Definition executor.h:30
Out-of-band signalling used to negotiate WebRTC peer connections.
Body-size limits, buffering thresholds, deadline, and TLS for an HTTP/2 client or server.
Definition http2.h:103
One signalling payload: an SDP description, an ICE candidate, or an error.
Definition signalling.h:48
Connection tuning for a WebSocketSignallingClient.
Definition websocket_signalling.h:40
absl::Time deadline
Registration deadline.
Definition websocket_signalling.h:42
size_t max_message_size
Inbound JSON message limit.
Definition websocket_signalling.h:43
absl::Status Validate() const
Definition websocket_signalling.cc:120
Http2Options http2_options
HTTP/2 connection and TLS policy.
Definition websocket_signalling.h:41
Definition websocket_signalling.cc:129
Listen address and limits for a WebSocketSignallingServer.
Definition websocket_signalling.h:108
size_t max_message_size
Inbound JSON message limit.
Definition websocket_signalling.h:114
std::uint16_t port
Listen port; zero requests an ephemeral port.
Definition websocket_signalling.h:112
absl::Status Validate() const
Definition websocket_signalling.cc:429
Http2Options http2_options
Server HTTP/2 and TLS policy.
Definition websocket_signalling.h:113
std::string path_prefix
Prefix before identity registration paths.
Definition websocket_signalling.h:109
std::string bind_address
Local listen address.
Definition websocket_signalling.h:111
Definition websocket_signalling.cc:443
const std::string identity
Definition webrtc_wire_stream.cc:90