Skip to content
This repository was archived by the owner on Oct 24, 2022. It is now read-only.

Commit 8465dbb

Browse files
committed
Refactor signalling protocol around a Session ID
This allows for more use cases to be handled like having several session between 2 peers, and it simplifies the code a bit and makes the protocol sensibly cleaner Webrtcsink has been refactored a bit to take the new concept into account
1 parent 976a065 commit 8465dbb

File tree

7 files changed

+674
-591
lines changed

7 files changed

+674
-591
lines changed

plugins/src/signaller/imp.rs

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -133,23 +133,30 @@ impl Signaller {
133133
);
134134
}
135135
p::OutgoingMessage::Registered(_) => unreachable!(),
136-
p::OutgoingMessage::StartSession { peer_id } => {
137-
if let Err(err) = element.add_consumer(&peer_id) {
136+
p::OutgoingMessage::StartSession {
137+
session_id,
138+
peer_id,
139+
} => {
140+
if let Err(err) =
141+
element.add_consumer(&session_id, &peer_id)
142+
{
138143
gst::warning!(CAT, obj: &element, "{}", err);
139144
}
140145
}
141-
p::OutgoingMessage::EndSession { peer_id } => {
142-
if let Err(err) = element.remove_consumer(&peer_id) {
146+
p::OutgoingMessage::EndSession(session_info) => {
147+
if let Err(err) =
148+
element.remove_consumer(&session_info.session_id)
149+
{
143150
gst::warning!(CAT, obj: &element, "{}", err);
144151
}
145152
}
146153
p::OutgoingMessage::Peer(p::PeerMessage {
147-
peer_id,
154+
session_id,
148155
peer_message,
149156
}) => match peer_message {
150157
p::PeerMessageInner::Sdp(p::SdpMessage::Answer { sdp }) => {
151158
if let Err(err) = element.handle_sdp(
152-
&peer_id,
159+
&session_id,
153160
&gst_webrtc::WebRTCSessionDescription::new(
154161
gst_webrtc::WebRTCSDPType::Answer,
155162
gst_sdp::SDPMessage::parse_buffer(
@@ -175,7 +182,7 @@ impl Signaller {
175182
sdp_m_line_index,
176183
} => {
177184
if let Err(err) = element.handle_ice(
178-
&peer_id,
185+
&session_id,
179186
Some(sdp_m_line_index),
180187
None,
181188
&candidate,
@@ -254,13 +261,13 @@ impl Signaller {
254261
pub fn handle_sdp(
255262
&self,
256263
element: &WebRTCSink,
257-
peer_id: &str,
264+
session_id: &str,
258265
sdp: &gst_webrtc::WebRTCSessionDescription,
259266
) {
260267
let state = self.state.lock().unwrap();
261268

262269
let msg = p::IncomingMessage::Peer(p::PeerMessage {
263-
peer_id: peer_id.to_string(),
270+
session_id: session_id.to_string(),
264271
peer_message: p::PeerMessageInner::Sdp(p::SdpMessage::Offer {
265272
sdp: sdp.sdp().as_text().unwrap(),
266273
}),
@@ -281,15 +288,15 @@ impl Signaller {
281288
pub fn handle_ice(
282289
&self,
283290
element: &WebRTCSink,
284-
peer_id: &str,
291+
session_id: &str,
285292
candidate: &str,
286293
sdp_m_line_index: Option<u32>,
287294
_sdp_mid: Option<String>,
288295
) {
289296
let state = self.state.lock().unwrap();
290297

291298
let msg = p::IncomingMessage::Peer(p::PeerMessage {
292-
peer_id: peer_id.to_string(),
299+
session_id: session_id.to_string(),
293300
peer_message: p::PeerMessageInner::Ice {
294301
candidate: candidate.to_string(),
295302
sdp_m_line_index: sdp_m_line_index.unwrap(),
@@ -331,17 +338,17 @@ impl Signaller {
331338
}
332339
}
333340

334-
pub fn consumer_removed(&self, element: &WebRTCSink, peer_id: &str) {
335-
gst::debug!(CAT, obj: element, "Signalling consumer {} removed", peer_id);
341+
pub fn end_session(&self, element: &WebRTCSink, session_id: &str) {
342+
gst::debug!(CAT, obj: element, "Signalling session {} ended", session_id);
336343

337344
let state = self.state.lock().unwrap();
338-
let peer_id = peer_id.to_string();
345+
let session_id = session_id.to_string();
339346
let element = element.downgrade();
340347
if let Some(mut sender) = state.websocket_sender.clone() {
341348
task::spawn(async move {
342349
if let Err(err) = sender
343350
.send(p::IncomingMessage::EndSession(p::EndSessionMessage {
344-
peer_id: peer_id.to_string(),
351+
session_id: session_id.to_string(),
345352
}))
346353
.await
347354
{

plugins/src/signaller/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ impl Signallable for Signaller {
3434
fn handle_ice(
3535
&mut self,
3636
element: &WebRTCSink,
37-
peer_id: &str,
37+
session_id: &str,
3838
candidate: &str,
3939
sdp_mline_index: Option<u32>,
4040
sdp_mid: Option<String>,
4141
) -> Result<(), Box<dyn Error>> {
4242
let signaller = imp::Signaller::from_instance(self);
43-
signaller.handle_ice(element, peer_id, candidate, sdp_mline_index, sdp_mid);
43+
signaller.handle_ice(element, session_id, candidate, sdp_mline_index, sdp_mid);
4444
Ok(())
4545
}
4646

@@ -49,9 +49,9 @@ impl Signallable for Signaller {
4949
signaller.stop(element);
5050
}
5151

52-
fn consumer_removed(&mut self, element: &WebRTCSink, peer_id: &str) {
52+
fn session_ended(&mut self, element: &WebRTCSink, session_id: &str) {
5353
let signaller = imp::Signaller::from_instance(self);
54-
signaller.consumer_removed(element, peer_id);
54+
signaller.end_session(element, session_id);
5555
}
5656
}
5757

0 commit comments

Comments
 (0)