A11 (C++ runtime)
Native C++ implementation of the A11 streaming action runtime
Loading...
Searching...
No Matches
signalling.h
Go to the documentation of this file.
1/*
2 * Copyright 2026 The A11 Authors
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
32#ifndef A11_NET_SIGNALLING_H_
33#define A11_NET_SIGNALLING_H_
34
35#include <functional>
36#include <memory>
37#include <string>
38#include <string_view>
39#include <vector>
40
41#include <absl/status/status.h>
42#include <absl/status/statusor.h>
43
45
46namespace a11::net {
47
54
65 std::string sender = {};
66 std::string recipient;
67 std::string description = {};
68 std::string description_type = {};
69 std::string candidate = {};
70 std::string mid = {};
71 absl::Status error = {};
82 std::vector<std::string> capabilities = {};
83
85 absl::Status Validate() const;
87 absl::StatusOr<std::string> ToJson() const;
90 static absl::StatusOr<SignallingMessage> FromJson(std::string_view json);
91};
92
93class SignallingService;
94
96using OnSignallingMessage = std::function<a11::Task(SignallingMessage message)>;
97
106 public:
107 virtual ~SignallingTransport() = default;
109 virtual absl::Status Send(SignallingMessage message) = 0;
111 virtual absl::Status SetOnMessage(OnSignallingMessage on_message) = 0;
113 virtual absl::Status Close() = 0;
115 [[nodiscard]] virtual std::string identity() const = 0;
117 [[nodiscard]] virtual bool connected() const = 0;
119 [[nodiscard]] virtual absl::Status GetStatus() const = 0;
120};
121
131 : public SignallingTransport,
132 public std::enable_shared_from_this<SignallingEndpoint> {
133 public:
135
136 absl::Status Send(SignallingMessage message) override;
137 absl::Status SetOnMessage(OnSignallingMessage on_message) override;
138 absl::Status Close() override;
139 [[nodiscard]] std::string identity() const override;
140 [[nodiscard]] bool connected() const override;
141 [[nodiscard]] absl::Status GetStatus() const override;
142
143 private:
144 struct State;
145
146 explicit SignallingEndpoint(std::shared_ptr<State> state)
147 : state_(std::move(state)) {}
148
149 std::shared_ptr<State> state_;
150
151 friend class SignallingService;
152};
153
163 : public std::enable_shared_from_this<SignallingService> {
164 public:
166 static std::shared_ptr<SignallingService> Create();
168
176 absl::StatusOr<std::shared_ptr<SignallingEndpoint>> Connect(
177 std::string identity, OnSignallingMessage on_message);
197 absl::Status Deliver(SignallingMessage message);
199 [[nodiscard]] bool Contains(std::string_view identity) const;
201 [[nodiscard]] std::vector<std::string> Identities() const;
203 absl::Status Stop();
204
205 private:
206 struct State;
207
208 explicit SignallingService(std::shared_ptr<State> state)
209 : state_(std::move(state)) {}
210
211 absl::Status Route(const std::shared_ptr<SignallingEndpoint::State>& sender,
212 SignallingMessage message);
213 void Disconnect(const std::shared_ptr<SignallingEndpoint::State>& endpoint,
214 absl::Status status);
215 static void Pump(const std::shared_ptr<SignallingEndpoint::State>& endpoint);
216
217 std::shared_ptr<State> state_;
218
219 friend class SignallingEndpoint;
220};
221
222} // namespace a11::net
223
224#endif // A11_NET_SIGNALLING_H_
An identity-bound endpoint into an in-process SignallingService.
Definition signalling.h:132
absl::Status SetOnMessage(OnSignallingMessage on_message) override
Registers the async callback invoked for each inbound message.
Definition signalling.cc:481
~SignallingEndpoint()
Definition signalling.cc:469
absl::Status Close() override
Closes the transport and releases its resources.
Definition signalling.cc:497
std::string identity() const override
Definition signalling.cc:507
absl::Status Send(SignallingMessage message) override
Sends a signalling message to the peer (non-blocking).
Definition signalling.cc:473
absl::Status GetStatus() const override
Definition signalling.cc:517
bool connected() const override
Definition signalling.cc:512
An in-process broker that routes signalling messages by identity.
Definition signalling.h:163
absl::Status Stop()
Stops the service and disconnects all endpoints.
Definition signalling.cc:443
absl::Status Deliver(SignallingMessage message)
Delivers a message to a locally connected recipient.
Definition signalling.cc:284
~SignallingService()
Definition signalling.cc:248
std::vector< std::string > Identities() const
Definition signalling.cc:431
static std::shared_ptr< SignallingService > Create()
Definition signalling.cc:239
absl::StatusOr< std::shared_ptr< SignallingEndpoint > > Connect(std::string identity, OnSignallingMessage on_message)
Registers an identity and its inbound-message callback.
Definition signalling.cc:252
bool Contains(std::string_view identity) const
Definition signalling.cc:425
Abstract identity-bound channel over which signalling flows.
Definition signalling.h:105
virtual std::string identity() const =0
virtual ~SignallingTransport()=default
virtual absl::Status Send(SignallingMessage message)=0
Sends a signalling message to the peer (non-blocking).
virtual bool connected() const =0
virtual absl::Status SetOnMessage(OnSignallingMessage on_message)=0
Registers the async callback invoked for each inbound message.
virtual absl::Status GetStatus() const =0
virtual absl::Status Close()=0
Closes the transport and releases its resources.
Completion values used by every asynchronous A11 operation.
Definition action.h:65
std::function< a11::Task(SignallingMessage message)> OnSignallingMessage
Async callback invoked for each inbound SignallingMessage.
Definition signalling.h:96
SignallingMessageType
The kind of payload a SignallingMessage carries.
Definition signalling.h:49
Future< Unit > Task
Asynchronous operation whose only successful result is completion itself.
Definition future.h:411
Definition signalling.cc:215
One signalling payload: an SDP description, an ICE candidate, or an error.
Definition signalling.h:62
std::vector< std::string > capabilities
Capability tokens the sender supports; a peer echoes those it shares.
Definition signalling.h:82
static absl::StatusOr< SignallingMessage > FromJson(std::string_view json)
Parses a message from its JSON wire representation.
Definition signalling.cc:138
std::string description
SDP offer or answer text.
Definition signalling.h:67
std::string description_type
SDP type, such as offer or answer.
Definition signalling.h:68
SignallingMessageType type
Payload discriminator.
Definition signalling.h:63
std::string sender
Identity of the originating peer.
Definition signalling.h:65
absl::StatusOr< std::string > ToJson() const
Definition signalling.cc:102
absl::Status error
Negotiation failure for kError messages.
Definition signalling.h:71
absl::Status Validate() const
Definition signalling.cc:71
std::string recipient
Identity of the target peer.
Definition signalling.h:66
std::string candidate
ICE candidate text.
Definition signalling.h:69
std::string mid
Media/data-section id for the candidate.
Definition signalling.h:70
Definition signalling.cc:232
const std::string identity
Definition webrtc_wire_stream.cc:107
const std::shared_ptr< SignallingTransport > endpoint
Definition webrtc_wire_stream.cc:109