Skip to content

Commit c9fcddd

Browse files
authored
Remove plan-b support (#320)
M96 was released 2021-11-15. All Chrome releases since then have been (largely) without plan-b support. The SDP used to establish a connection in WebRTC has a non-standard dialect: Plan B. [Removal timeline][1]: * M93: Exception thrown in Canary. * M96: Exception thrown in Beta and Stable. [1]: https://chromestatus.com/feature/5823036655665152
1 parent 8315d00 commit c9fcddd

File tree

6 files changed

+120
-673
lines changed

6 files changed

+120
-673
lines changed

webrtc/src/peer_connection/configuration.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use crate::peer_connection::certificate::RTCCertificate;
33
use crate::peer_connection::policy::bundle_policy::RTCBundlePolicy;
44
use crate::peer_connection::policy::ice_transport_policy::RTCIceTransportPolicy;
55
use crate::peer_connection::policy::rtcp_mux_policy::RTCRtcpMuxPolicy;
6-
use crate::peer_connection::policy::sdp_semantics::RTCSdpSemantics;
76

87
/// A Configuration defines how peer-to-peer communication via PeerConnection
98
/// is established or re-established.
@@ -48,10 +47,6 @@ pub struct RTCConfiguration {
4847

4948
/// icecandidate_pool_size describes the size of the prefetched ICE pool.
5049
pub ice_candidate_pool_size: u8,
51-
52-
/// sdp_semantics controls the type of SDP offers accepted by and
53-
/// SDP answers generated by the PeerConnection.
54-
pub sdp_semantics: RTCSdpSemantics,
5550
}
5651

5752
impl RTCConfiguration {

webrtc/src/peer_connection/mod.rs

Lines changed: 43 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ use crate::peer_connection::operation::{Operation, Operations};
4646
use crate::peer_connection::peer_connection_state::{
4747
NegotiationNeededState, RTCPeerConnectionState,
4848
};
49-
use crate::peer_connection::policy::sdp_semantics::RTCSdpSemantics;
5049
use crate::peer_connection::sdp::sdp_type::RTCSdpType;
5150
use crate::peer_connection::sdp::session_description::RTCSessionDescription;
5251
use crate::peer_connection::sdp::*;
@@ -772,70 +771,54 @@ impl RTCPeerConnection {
772771
rtp_transceivers.clone()
773772
};
774773

775-
// in-parallel steps to create an offer
776-
// https://w3c.github.io/webrtc-pc/#dfn-in-parallel-steps-to-create-an-offer
777-
let is_plan_b = {
774+
// include unmatched local transceivers
775+
// update the greater mid if the remote description provides a greater one
776+
{
778777
let current_remote_description =
779778
self.internal.current_remote_description.lock().await;
780-
if current_remote_description.is_some() {
781-
description_is_plan_b(current_remote_description.as_ref())?
782-
} else {
783-
self.configuration.sdp_semantics == RTCSdpSemantics::PlanB
784-
}
785-
};
786-
787-
// include unmatched local transceivers
788-
if !is_plan_b {
789-
// update the greater mid if the remote description provides a greater one
790-
{
791-
let current_remote_description =
792-
self.internal.current_remote_description.lock().await;
793-
if let Some(d) = &*current_remote_description {
794-
if let Some(parsed) = &d.parsed {
795-
for media in &parsed.media_descriptions {
796-
if let Some(mid) = get_mid_value(media) {
797-
if mid.is_empty() {
798-
continue;
799-
}
800-
let numeric_mid = match mid.parse::<isize>() {
801-
Ok(n) => n,
802-
Err(_) => continue,
803-
};
804-
if numeric_mid
805-
> self.internal.greater_mid.load(Ordering::SeqCst)
806-
{
807-
self.internal
808-
.greater_mid
809-
.store(numeric_mid, Ordering::SeqCst);
810-
}
779+
if let Some(d) = &*current_remote_description {
780+
if let Some(parsed) = &d.parsed {
781+
for media in &parsed.media_descriptions {
782+
if let Some(mid) = get_mid_value(media) {
783+
if mid.is_empty() {
784+
continue;
785+
}
786+
let numeric_mid = match mid.parse::<isize>() {
787+
Ok(n) => n,
788+
Err(_) => continue,
789+
};
790+
if numeric_mid > self.internal.greater_mid.load(Ordering::SeqCst) {
791+
self.internal
792+
.greater_mid
793+
.store(numeric_mid, Ordering::SeqCst);
811794
}
812795
}
813796
}
814797
}
815798
}
816-
for t in &current_transceivers {
817-
if !t.mid().await.is_empty() {
818-
continue;
819-
}
799+
}
800+
for t in &current_transceivers {
801+
if !t.mid().await.is_empty() {
802+
continue;
803+
}
820804

821-
if let Some(gen) = &self.internal.setting_engine.mid_generator {
822-
let current_greatest = self.internal.greater_mid.load(Ordering::SeqCst);
823-
let mid = (gen)(current_greatest);
805+
if let Some(gen) = &self.internal.setting_engine.mid_generator {
806+
let current_greatest = self.internal.greater_mid.load(Ordering::SeqCst);
807+
let mid = (gen)(current_greatest);
824808

825-
// If it's possible to parse the returned mid as numeric, we will update the greater_mid field.
826-
if let Ok(numeric_mid) = mid.parse::<isize>() {
827-
if numeric_mid > self.internal.greater_mid.load(Ordering::SeqCst) {
828-
self.internal
829-
.greater_mid
830-
.store(numeric_mid, Ordering::SeqCst);
831-
}
809+
// If it's possible to parse the returned mid as numeric, we will update the greater_mid field.
810+
if let Ok(numeric_mid) = mid.parse::<isize>() {
811+
if numeric_mid > self.internal.greater_mid.load(Ordering::SeqCst) {
812+
self.internal
813+
.greater_mid
814+
.store(numeric_mid, Ordering::SeqCst);
832815
}
833-
834-
t.set_mid(mid).await?;
835-
} else {
836-
let greater_mid = self.internal.greater_mid.fetch_add(1, Ordering::SeqCst);
837-
t.set_mid(format!("{}", greater_mid + 1)).await?;
838816
}
817+
818+
t.set_mid(mid).await?;
819+
} else {
820+
let greater_mid = self.internal.greater_mid.fetch_add(1, Ordering::SeqCst);
821+
t.set_mid(format!("{}", greater_mid + 1)).await?;
839822
}
840823
}
841824

@@ -847,11 +830,7 @@ impl RTCPeerConnection {
847830

848831
let mut d = if current_remote_description_is_none {
849832
self.internal
850-
.generate_unmatched_sdp(
851-
current_transceivers,
852-
use_identity,
853-
self.configuration.sdp_semantics,
854-
)
833+
.generate_unmatched_sdp(current_transceivers, use_identity)
855834
.await?
856835
} else {
857836
self.internal
@@ -860,7 +839,6 @@ impl RTCPeerConnection {
860839
use_identity,
861840
true, /*includeUnmatched */
862841
DEFAULT_DTLS_ROLE_OFFER.to_connection_role(),
863-
self.configuration.sdp_semantics,
864842
)
865843
.await?
866844
};
@@ -879,7 +857,7 @@ impl RTCPeerConnection {
879857

880858
// Verify local media hasn't changed during offer
881859
// generation. Recompute if necessary
882-
if is_plan_b || !self.internal.has_local_description_changed(&offer).await {
860+
if !self.internal.has_local_description_changed(&offer).await {
883861
break;
884862
}
885863
count += 1;
@@ -978,7 +956,6 @@ impl RTCPeerConnection {
978956
use_identity,
979957
false, /*includeUnmatched */
980958
connection_role,
981-
self.configuration.sdp_semantics,
982959
)
983960
.await?;
984961

@@ -1303,7 +1280,6 @@ impl RTCPeerConnection {
13031280
self.start_rtp_senders().await?;
13041281

13051282
let pci = Arc::clone(&self.internal);
1306-
let sdp_semantics = self.configuration.sdp_semantics;
13071283
let remote_desc = Arc::new(remote_desc);
13081284
self.internal
13091285
.ops
@@ -1312,9 +1288,7 @@ impl RTCPeerConnection {
13121288
let pc = Arc::clone(&pci);
13131289
let rd = Arc::clone(&remote_desc);
13141290
Box::pin(async move {
1315-
let _ = pc
1316-
.start_rtp(have_local_description, rd, sdp_semantics)
1317-
.await;
1291+
let _ = pc.start_rtp(have_local_description, rd).await;
13181292
false
13191293
})
13201294
},
@@ -1365,10 +1339,9 @@ impl RTCPeerConnection {
13651339

13661340
let mut local_transceivers = self.get_transceivers().await;
13671341
let remote_description = self.remote_description().await;
1368-
let detected_plan_b = description_is_plan_b(remote_description.as_ref())?;
13691342
let we_offer = desc.sdp_type == RTCSdpType::Answer;
13701343

1371-
if !we_offer && !detected_plan_b {
1344+
if !we_offer {
13721345
if let Some(parsed) = remote_description.as_ref().and_then(|r| r.parsed.as_ref()) {
13731346
for media in &parsed.media_descriptions {
13741347
let mid_value = match get_mid_value(media) {
@@ -1529,7 +1502,6 @@ impl RTCPeerConnection {
15291502
self.start_rtp_senders().await?;
15301503

15311504
let pci = Arc::clone(&self.internal);
1532-
let sdp_semantics = self.configuration.sdp_semantics;
15331505
let remote_desc = Arc::new(desc);
15341506
self.internal
15351507
.ops
@@ -1538,7 +1510,7 @@ impl RTCPeerConnection {
15381510
let pc = Arc::clone(&pci);
15391511
let rd = Arc::clone(&remote_desc);
15401512
Box::pin(async move {
1541-
let _ = pc.start_rtp(true, rd, sdp_semantics).await;
1513+
let _ = pc.start_rtp(true, rd).await;
15421514
false
15431515
})
15441516
},
@@ -1580,7 +1552,6 @@ impl RTCPeerConnection {
15801552
//log::trace!("start_transports: parsed={:?}", parsed);
15811553

15821554
let pci = Arc::clone(&self.internal);
1583-
let sdp_semantics = self.configuration.sdp_semantics;
15841555
let dtls_role = DTLSRole::from(parsed);
15851556
let remote_desc = Arc::new(desc);
15861557
self.internal
@@ -1603,7 +1574,7 @@ impl RTCPeerConnection {
16031574
.await;
16041575

16051576
if we_offer {
1606-
let _ = pc.start_rtp(false, rd, sdp_semantics).await;
1577+
let _ = pc.start_rtp(false, rd).await;
16071578
}
16081579
false
16091580
})

0 commit comments

Comments
 (0)