Replace BundleFilter with RtpDemuxer in RtpTransport.
BundleFilter is replaced by RtpDemuxer in RtpTransport for payload
type-based demuxing. RtpTransport will support MID-based demuxing later.
Each BaseChannel has its own RTP demuxing criteria and when connecting
to the RtpTransport, BaseChannel will register itself as a demuxer sink.
The inheritance model is changed. New inheritance chain:
DtlsSrtpTransport->SrtpTransport->RtpTranpsort
The JsepTransport2 is renamed to JsepTransport.
NOTE:
When RTCP packets are received, Call::DeliverRtcp will be called for
multiple times (webrtc:9035) which is an existing issue. With this CL,
it will become more of a problem and should be fixed.
Bug: webrtc:8587
Change-Id: Ibd880e7b744bd912336a691309950bc18e42cf62
Reviewed-on: https://webrtc-review.googlesource.com/65786
Commit-Queue: Zhi Huang <zhihuang@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Benjamin Wright <benwright@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22867}
diff --git a/pc/peerconnection_bundle_unittest.cc b/pc/peerconnection_bundle_unittest.cc
index a1b69d8..dfd47cd 100644
--- a/pc/peerconnection_bundle_unittest.cc
+++ b/pc/peerconnection_bundle_unittest.cc
@@ -666,6 +666,42 @@
EXPECT_EQ(caller->voice_rtp_transport(), caller->video_rtp_transport());
}
+// This tests that applying description with conflicted RTP demuxing criteria
+// will fail.
+TEST_P(PeerConnectionBundleTest,
+ ApplyDescriptionWithConflictedDemuxCriteriaFail) {
+ auto caller = CreatePeerConnectionWithAudioVideo();
+ auto callee = CreatePeerConnectionWithAudioVideo();
+
+ RTCOfferAnswerOptions options;
+ options.use_rtp_mux = false;
+ auto offer = caller->CreateOffer(options);
+ // Modified the SDP to make two m= sections have the same SSRC.
+ ASSERT_GE(offer->description()->contents().size(), 2U);
+ offer->description()
+ ->contents()[0]
+ .description->mutable_streams()[0]
+ .ssrcs[0] = 1111222;
+ offer->description()
+ ->contents()[1]
+ .description->mutable_streams()[0]
+ .ssrcs[0] = 1111222;
+ EXPECT_TRUE(
+ caller->SetLocalDescription(CloneSessionDescription(offer.get())));
+ EXPECT_TRUE(callee->SetRemoteDescription(std::move(offer)));
+ EXPECT_TRUE(callee->CreateAnswerAndSetAsLocal(options));
+
+ // Enable BUNDLE in subsequent offer/answer exchange and two m= sections are
+ // expectd to use one RtpTransport underneath.
+ options.use_rtp_mux = true;
+ EXPECT_TRUE(
+ callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal(options)));
+ auto answer = callee->CreateAnswer(options);
+ // When BUNDLE is enabled, applying the description is expected to fail
+ // because the demuxing criteria is conflicted.
+ EXPECT_FALSE(callee->SetLocalDescription(std::move(answer)));
+}
+
// This tests that changing the pre-negotiated BUNDLE tag is not supported.
TEST_P(PeerConnectionBundleTest, RejectDescriptionChangingBundleTag) {
RTCConfiguration config;