Refactor of extmap-allow-mixed in SessionDescription
- Rename member variable and access functions to show connection to the extmap-allow-mixed attribute. - Transfer extmap-allow-mixed setting when new content is added to a SessionDescription. - Add boolean function that shows support of extmap-allow-mixed. - Add unit tests of extmap-allow-mixed logic. Bug: webrtc:7990 Change-Id: Ic330fbab7be3e1df81c2d36ce522acc254617178 Reviewed-on: https://webrtc-review.googlesource.com/c/105308 Reviewed-by: Seth Hampson <shampson@webrtc.org> Commit-Queue: Johannes Kron <kron@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25163}
This commit is contained in:
parent
cae8802dc1
commit
9ac3c9118a
@ -293,6 +293,7 @@ if (rtc_include_tests) {
|
||||
"rtcpmuxfilter_unittest.cc",
|
||||
"rtptransport_unittest.cc",
|
||||
"rtptransporttestutil.h",
|
||||
"sessiondescription_unittest.cc",
|
||||
"srtpfilter_unittest.cc",
|
||||
"srtpsession_unittest.cc",
|
||||
"srtptestutil.h",
|
||||
|
||||
@ -1073,8 +1073,7 @@ static bool CreateMediaContentAnswer(
|
||||
answer->AddCodecs(negotiated_codecs);
|
||||
answer->set_protocol(offer->protocol());
|
||||
|
||||
answer->set_mixed_one_two_byte_header_extensions_supported(
|
||||
offer->mixed_one_two_byte_header_extensions_supported());
|
||||
answer->set_extmap_allow_mixed_headers(offer->extmap_allow_mixed_headers());
|
||||
RtpHeaderExtensions negotiated_rtp_extensions;
|
||||
NegotiateRtpHeaderExtensions(
|
||||
local_rtp_extenstions, offer->rtp_header_extensions(),
|
||||
@ -1408,8 +1407,7 @@ SessionDescription* MediaSessionDescriptionFactory::CreateAnswer(
|
||||
// Transport info shared by the bundle group.
|
||||
std::unique_ptr<TransportInfo> bundle_transport;
|
||||
|
||||
answer->set_mixed_one_two_byte_header_extensions_supported(
|
||||
offer->mixed_one_two_byte_header_extensions_supported());
|
||||
answer->set_extmap_allow_mixed_headers(offer->extmap_allow_mixed_headers());
|
||||
|
||||
// Get list of all possible codecs that respects existing payload type
|
||||
// mappings and uses a single payload type space.
|
||||
|
||||
@ -1586,19 +1586,18 @@ TEST_F(MediaSessionDescriptionFactoryTest,
|
||||
MediaSessionOptions opts;
|
||||
std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL));
|
||||
// Offer without request of mixed one- and two-byte header extensions.
|
||||
offer->set_mixed_one_two_byte_header_extensions_supported(false);
|
||||
offer->set_extmap_allow_mixed_headers(false);
|
||||
ASSERT_TRUE(offer.get() != NULL);
|
||||
std::unique_ptr<SessionDescription> answer_no_support(
|
||||
f2_.CreateAnswer(offer.get(), opts, NULL));
|
||||
EXPECT_FALSE(
|
||||
answer_no_support->mixed_one_two_byte_header_extensions_supported());
|
||||
EXPECT_FALSE(answer_no_support->extmap_allow_mixed_headers());
|
||||
|
||||
// Offer with request of mixed one- and two-byte header extensions.
|
||||
offer->set_mixed_one_two_byte_header_extensions_supported(true);
|
||||
offer->set_extmap_allow_mixed_headers(true);
|
||||
ASSERT_TRUE(offer.get() != NULL);
|
||||
std::unique_ptr<SessionDescription> answer_support(
|
||||
f2_.CreateAnswer(offer.get(), opts, NULL));
|
||||
EXPECT_TRUE(answer_support->mixed_one_two_byte_header_extensions_supported());
|
||||
EXPECT_TRUE(answer_support->extmap_allow_mixed_headers());
|
||||
}
|
||||
|
||||
TEST_F(MediaSessionDescriptionFactoryTest,
|
||||
@ -1614,10 +1613,8 @@ TEST_F(MediaSessionDescriptionFactoryTest,
|
||||
ASSERT_TRUE(audio_offer);
|
||||
|
||||
// Explicit disable of mixed one-two byte header support in offer.
|
||||
video_offer->set_mixed_one_two_byte_header_extensions_supported(
|
||||
MediaContentDescription::kNo);
|
||||
audio_offer->set_mixed_one_two_byte_header_extensions_supported(
|
||||
MediaContentDescription::kNo);
|
||||
video_offer->set_extmap_allow_mixed_headers(MediaContentDescription::kNo);
|
||||
audio_offer->set_extmap_allow_mixed_headers(MediaContentDescription::kNo);
|
||||
|
||||
ASSERT_TRUE(offer.get() != NULL);
|
||||
std::unique_ptr<SessionDescription> answer_no_support(
|
||||
@ -1627,24 +1624,22 @@ TEST_F(MediaSessionDescriptionFactoryTest,
|
||||
MediaContentDescription* audio_answer =
|
||||
answer_no_support->GetContentDescriptionByName("audio");
|
||||
EXPECT_EQ(MediaContentDescription::kNo,
|
||||
video_answer->mixed_one_two_byte_header_extensions_supported());
|
||||
video_answer->extmap_allow_mixed_headers());
|
||||
EXPECT_EQ(MediaContentDescription::kNo,
|
||||
audio_answer->mixed_one_two_byte_header_extensions_supported());
|
||||
audio_answer->extmap_allow_mixed_headers());
|
||||
|
||||
// Enable mixed one-two byte header support in offer.
|
||||
video_offer->set_mixed_one_two_byte_header_extensions_supported(
|
||||
MediaContentDescription::kMedia);
|
||||
audio_offer->set_mixed_one_two_byte_header_extensions_supported(
|
||||
MediaContentDescription::kMedia);
|
||||
video_offer->set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
audio_offer->set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
ASSERT_TRUE(offer.get() != NULL);
|
||||
std::unique_ptr<SessionDescription> answer_support(
|
||||
f2_.CreateAnswer(offer.get(), opts, NULL));
|
||||
video_answer = answer_support->GetContentDescriptionByName("video");
|
||||
audio_answer = answer_support->GetContentDescriptionByName("audio");
|
||||
EXPECT_EQ(MediaContentDescription::kMedia,
|
||||
video_answer->mixed_one_two_byte_header_extensions_supported());
|
||||
video_answer->extmap_allow_mixed_headers());
|
||||
EXPECT_EQ(MediaContentDescription::kMedia,
|
||||
audio_answer->mixed_one_two_byte_header_extensions_supported());
|
||||
audio_answer->extmap_allow_mixed_headers());
|
||||
}
|
||||
|
||||
// Create an audio and video offer with:
|
||||
|
||||
@ -84,21 +84,6 @@ bool ContentGroup::RemoveContentName(const std::string& content_name) {
|
||||
}
|
||||
|
||||
SessionDescription::SessionDescription() = default;
|
||||
|
||||
SessionDescription::SessionDescription(const ContentInfos& contents)
|
||||
: contents_(contents) {}
|
||||
|
||||
SessionDescription::SessionDescription(const ContentInfos& contents,
|
||||
const ContentGroups& groups)
|
||||
: contents_(contents), content_groups_(groups) {}
|
||||
|
||||
SessionDescription::SessionDescription(const ContentInfos& contents,
|
||||
const TransportInfos& transports,
|
||||
const ContentGroups& groups)
|
||||
: contents_(contents),
|
||||
transport_infos_(transports),
|
||||
content_groups_(groups) {}
|
||||
|
||||
SessionDescription::SessionDescription(const SessionDescription&) = default;
|
||||
|
||||
SessionDescription::~SessionDescription() {
|
||||
@ -162,7 +147,7 @@ void SessionDescription::AddContent(const std::string& name,
|
||||
ContentInfo content(type);
|
||||
content.name = name;
|
||||
content.description = description;
|
||||
contents_.push_back(std::move(content));
|
||||
AddContent(&content);
|
||||
}
|
||||
|
||||
void SessionDescription::AddContent(const std::string& name,
|
||||
@ -173,7 +158,7 @@ void SessionDescription::AddContent(const std::string& name,
|
||||
content.name = name;
|
||||
content.rejected = rejected;
|
||||
content.description = description;
|
||||
contents_.push_back(std::move(content));
|
||||
AddContent(&content);
|
||||
}
|
||||
|
||||
void SessionDescription::AddContent(const std::string& name,
|
||||
@ -186,7 +171,16 @@ void SessionDescription::AddContent(const std::string& name,
|
||||
content.rejected = rejected;
|
||||
content.bundle_only = bundle_only;
|
||||
content.description = description;
|
||||
contents_.push_back(std::move(content));
|
||||
AddContent(&content);
|
||||
}
|
||||
|
||||
void SessionDescription::AddContent(ContentInfo* content) {
|
||||
if (extmap_allow_mixed_headers()) {
|
||||
// Mixed support on session level overrides setting on media level.
|
||||
content->description->set_extmap_allow_mixed_headers(
|
||||
MediaContentDescription::kSession);
|
||||
}
|
||||
contents_.push_back(std::move(*content));
|
||||
}
|
||||
|
||||
bool SessionDescription::RemoveContentByName(const std::string& name) {
|
||||
|
||||
@ -185,18 +185,21 @@ class MediaContentDescription {
|
||||
|
||||
// Determines if it's allowed to mix one- and two-byte rtp header extensions
|
||||
// within the same rtp stream.
|
||||
enum ExtmapAllowMixed { kNo, kSession, kMedia };
|
||||
void set_mixed_one_two_byte_header_extensions_supported(
|
||||
ExtmapAllowMixed supported) {
|
||||
if (supported == kMedia &&
|
||||
mixed_one_two_byte_header_extensions_supported_ == kSession) {
|
||||
enum ExtmapAllowMixedHeaders { kNo, kSession, kMedia };
|
||||
void set_extmap_allow_mixed_headers(
|
||||
ExtmapAllowMixedHeaders new_extmap_allow_mixed) {
|
||||
if (new_extmap_allow_mixed == kMedia &&
|
||||
extmap_allow_mixed_headers_ == kSession) {
|
||||
// Do not downgrade from session level to media level.
|
||||
return;
|
||||
}
|
||||
mixed_one_two_byte_header_extensions_supported_ = supported;
|
||||
extmap_allow_mixed_headers_ = new_extmap_allow_mixed;
|
||||
}
|
||||
ExtmapAllowMixed mixed_one_two_byte_header_extensions_supported() const {
|
||||
return mixed_one_two_byte_header_extensions_supported_;
|
||||
ExtmapAllowMixedHeaders extmap_allow_mixed_headers() const {
|
||||
return extmap_allow_mixed_headers_;
|
||||
}
|
||||
bool mixed_one_two_byte_header_extensions_supported() const {
|
||||
return extmap_allow_mixed_headers_ != kNo;
|
||||
}
|
||||
|
||||
protected:
|
||||
@ -215,7 +218,7 @@ class MediaContentDescription {
|
||||
// Mixed one- and two-byte header not included in offer on media level or
|
||||
// session level, but we will respond that we support it. The plan is to add
|
||||
// it to our offer on session level. See todo in SessionDescription.
|
||||
ExtmapAllowMixed mixed_one_two_byte_header_extensions_supported_ = kNo;
|
||||
ExtmapAllowMixedHeaders extmap_allow_mixed_headers_ = kNo;
|
||||
};
|
||||
|
||||
// TODO(bugs.webrtc.org/8620): Remove this alias once downstream projects have
|
||||
@ -398,11 +401,6 @@ enum MsidSignaling {
|
||||
class SessionDescription {
|
||||
public:
|
||||
SessionDescription();
|
||||
explicit SessionDescription(const ContentInfos& contents);
|
||||
SessionDescription(const ContentInfos& contents, const ContentGroups& groups);
|
||||
SessionDescription(const ContentInfos& contents,
|
||||
const TransportInfos& transports,
|
||||
const ContentGroups& groups);
|
||||
~SessionDescription();
|
||||
|
||||
SessionDescription* Copy() const;
|
||||
@ -432,6 +430,8 @@ class SessionDescription {
|
||||
bool rejected,
|
||||
bool bundle_only,
|
||||
MediaContentDescription* description);
|
||||
void AddContent(ContentInfo* content);
|
||||
|
||||
bool RemoveContentByName(const std::string& name);
|
||||
|
||||
// Transport accessors.
|
||||
@ -477,19 +477,23 @@ class SessionDescription {
|
||||
|
||||
// Determines if it's allowed to mix one- and two-byte rtp header extensions
|
||||
// within the same rtp stream.
|
||||
void set_mixed_one_two_byte_header_extensions_supported(bool supported) {
|
||||
mixed_one_two_byte_header_extensions_supported_ = supported;
|
||||
MediaContentDescription::ExtmapAllowMixed extmap_allow_mixed =
|
||||
void set_extmap_allow_mixed_headers(bool supported) {
|
||||
extmap_allow_mixed_headers_ = supported;
|
||||
MediaContentDescription::ExtmapAllowMixedHeaders media_level_setting =
|
||||
supported ? MediaContentDescription::kSession
|
||||
: MediaContentDescription::kNo;
|
||||
for (auto& content : contents_) {
|
||||
content.media_description()
|
||||
->set_mixed_one_two_byte_header_extensions_supported(
|
||||
extmap_allow_mixed);
|
||||
// Do not set to kNo if the current setting is kMedia.
|
||||
if (supported ||
|
||||
content.media_description()->extmap_allow_mixed_headers() !=
|
||||
MediaContentDescription::kMedia) {
|
||||
content.media_description()->set_extmap_allow_mixed_headers(
|
||||
media_level_setting);
|
||||
}
|
||||
}
|
||||
}
|
||||
bool mixed_one_two_byte_header_extensions_supported() const {
|
||||
return mixed_one_two_byte_header_extensions_supported_;
|
||||
bool extmap_allow_mixed_headers() const {
|
||||
return extmap_allow_mixed_headers_;
|
||||
}
|
||||
|
||||
private:
|
||||
@ -506,7 +510,7 @@ class SessionDescription {
|
||||
// session level. It's currently not included in offer by default because
|
||||
// clients prior to https://bugs.webrtc.org/9712 cannot parse this correctly.
|
||||
// If it's included in offer to us we will respond that we support it.
|
||||
bool mixed_one_two_byte_header_extensions_supported_ = false;
|
||||
bool extmap_allow_mixed_headers_ = false;
|
||||
};
|
||||
|
||||
// Indicates whether a session description was sent by the local client or
|
||||
|
||||
134
pc/sessiondescription_unittest.cc
Normal file
134
pc/sessiondescription_unittest.cc
Normal file
@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Copyright 2018 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
#include "pc/sessiondescription.h"
|
||||
#include "rtc_base/gunit.h"
|
||||
|
||||
namespace cricket {
|
||||
|
||||
TEST(MediaContentDescriptionTest, ExtmapAllowMixedDefaultValue) {
|
||||
VideoContentDescription video_desc;
|
||||
EXPECT_EQ(MediaContentDescription::kNo,
|
||||
video_desc.extmap_allow_mixed_headers());
|
||||
}
|
||||
|
||||
TEST(MediaContentDescriptionTest, SetExtmapAllowMixed) {
|
||||
VideoContentDescription video_desc;
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kNo);
|
||||
EXPECT_EQ(MediaContentDescription::kNo,
|
||||
video_desc.extmap_allow_mixed_headers());
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
EXPECT_EQ(MediaContentDescription::kMedia,
|
||||
video_desc.extmap_allow_mixed_headers());
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kSession);
|
||||
EXPECT_EQ(MediaContentDescription::kSession,
|
||||
video_desc.extmap_allow_mixed_headers());
|
||||
|
||||
// Not allowed to downgrade from kSession to kMedia.
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
EXPECT_EQ(MediaContentDescription::kSession,
|
||||
video_desc.extmap_allow_mixed_headers());
|
||||
|
||||
// Always okay to set not supported.
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kNo);
|
||||
EXPECT_EQ(MediaContentDescription::kNo,
|
||||
video_desc.extmap_allow_mixed_headers());
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
EXPECT_EQ(MediaContentDescription::kMedia,
|
||||
video_desc.extmap_allow_mixed_headers());
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kNo);
|
||||
EXPECT_EQ(MediaContentDescription::kNo,
|
||||
video_desc.extmap_allow_mixed_headers());
|
||||
}
|
||||
|
||||
TEST(MediaContentDescriptionTest, MixedOneTwoByteHeaderSupported) {
|
||||
VideoContentDescription video_desc;
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kNo);
|
||||
EXPECT_FALSE(video_desc.mixed_one_two_byte_header_extensions_supported());
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
EXPECT_TRUE(video_desc.mixed_one_two_byte_header_extensions_supported());
|
||||
video_desc.set_extmap_allow_mixed_headers(MediaContentDescription::kSession);
|
||||
EXPECT_TRUE(video_desc.mixed_one_two_byte_header_extensions_supported());
|
||||
}
|
||||
|
||||
TEST(SessionDescriptionTest, SetExtmapAllowMixed) {
|
||||
SessionDescription session_desc;
|
||||
session_desc.set_extmap_allow_mixed_headers(true);
|
||||
EXPECT_TRUE(session_desc.extmap_allow_mixed_headers());
|
||||
session_desc.set_extmap_allow_mixed_headers(false);
|
||||
EXPECT_FALSE(session_desc.extmap_allow_mixed_headers());
|
||||
}
|
||||
|
||||
TEST(SessionDescriptionTest, SetExtmapAllowMixedPropagatesToMediaLevel) {
|
||||
SessionDescription session_desc;
|
||||
MediaContentDescription* video_desc = new VideoContentDescription();
|
||||
session_desc.AddContent("video", MediaProtocolType::kRtp, video_desc);
|
||||
|
||||
// Setting true on session level propagates to media level.
|
||||
session_desc.set_extmap_allow_mixed_headers(true);
|
||||
EXPECT_EQ(MediaContentDescription::kSession,
|
||||
video_desc->extmap_allow_mixed_headers());
|
||||
|
||||
// Don't downgrade from session level to media level
|
||||
video_desc->set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
EXPECT_EQ(MediaContentDescription::kSession,
|
||||
video_desc->extmap_allow_mixed_headers());
|
||||
|
||||
// Setting false on session level propagates to media level if the current
|
||||
// state is kSession.
|
||||
session_desc.set_extmap_allow_mixed_headers(false);
|
||||
EXPECT_EQ(MediaContentDescription::kNo,
|
||||
video_desc->extmap_allow_mixed_headers());
|
||||
|
||||
// Now possible to set at media level.
|
||||
video_desc->set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
EXPECT_EQ(MediaContentDescription::kMedia,
|
||||
video_desc->extmap_allow_mixed_headers());
|
||||
|
||||
// Setting false on session level does not override on media level if current
|
||||
// state is kMedia.
|
||||
session_desc.set_extmap_allow_mixed_headers(false);
|
||||
EXPECT_EQ(MediaContentDescription::kMedia,
|
||||
video_desc->extmap_allow_mixed_headers());
|
||||
|
||||
// Setting true on session level overrides setting on media level.
|
||||
session_desc.set_extmap_allow_mixed_headers(true);
|
||||
EXPECT_EQ(MediaContentDescription::kSession,
|
||||
video_desc->extmap_allow_mixed_headers());
|
||||
}
|
||||
|
||||
TEST(SessionDescriptionTest, AddContentTransfersExtmapAllowMixedSetting) {
|
||||
SessionDescription session_desc;
|
||||
session_desc.set_extmap_allow_mixed_headers(false);
|
||||
MediaContentDescription* audio_desc = new AudioContentDescription();
|
||||
audio_desc->set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
|
||||
// If session setting is false, media level setting is preserved when new
|
||||
// content is added.
|
||||
session_desc.AddContent("audio", MediaProtocolType::kRtp, audio_desc);
|
||||
EXPECT_EQ(MediaContentDescription::kMedia,
|
||||
audio_desc->extmap_allow_mixed_headers());
|
||||
|
||||
// If session setting is true, it's transferred to media level when new
|
||||
// content is added.
|
||||
session_desc.set_extmap_allow_mixed_headers(true);
|
||||
MediaContentDescription* video_desc = new VideoContentDescription();
|
||||
session_desc.AddContent("video", MediaProtocolType::kRtp, video_desc);
|
||||
EXPECT_EQ(MediaContentDescription::kSession,
|
||||
video_desc->extmap_allow_mixed_headers());
|
||||
|
||||
// Session level setting overrides media level when new content is added.
|
||||
MediaContentDescription* data_desc = new DataContentDescription;
|
||||
data_desc->set_extmap_allow_mixed_headers(MediaContentDescription::kMedia);
|
||||
session_desc.AddContent("data", MediaProtocolType::kRtp, data_desc);
|
||||
EXPECT_EQ(MediaContentDescription::kSession,
|
||||
data_desc->extmap_allow_mixed_headers());
|
||||
}
|
||||
|
||||
} // namespace cricket
|
||||
@ -856,7 +856,7 @@ std::string SdpSerialize(const JsepSessionDescription& jdesc) {
|
||||
}
|
||||
|
||||
// Mixed one- and two-byte header extension.
|
||||
if (desc->mixed_one_two_byte_header_extensions_supported()) {
|
||||
if (desc->extmap_allow_mixed_headers()) {
|
||||
InitAttrLine(kAttributeExtmapAllowMixed, &os);
|
||||
AddLine(os.str(), &message);
|
||||
}
|
||||
@ -1496,7 +1496,7 @@ void BuildRtpContentAttributes(const MediaContentDescription* media_desc,
|
||||
// The attribute MUST be either on session level or media level. We support
|
||||
// responding on both levels, however, we don't respond on media level if it's
|
||||
// set on session level.
|
||||
if (media_desc->mixed_one_two_byte_header_extensions_supported() ==
|
||||
if (media_desc->extmap_allow_mixed_headers() ==
|
||||
MediaContentDescription::kMedia) {
|
||||
InitAttrLine(kAttributeExtmapAllowMixed, &os);
|
||||
AddLine(os.str(), message);
|
||||
@ -2015,7 +2015,7 @@ bool ParseSessionDescription(const std::string& message,
|
||||
std::string line;
|
||||
|
||||
desc->set_msid_supported(false);
|
||||
desc->set_mixed_one_two_byte_header_extensions_supported(false);
|
||||
desc->set_extmap_allow_mixed_headers(false);
|
||||
// RFC 4566
|
||||
// v= (protocol version)
|
||||
if (!GetLineWithType(message, pos, &line, kLineTypeVersion)) {
|
||||
@ -2153,7 +2153,7 @@ bool ParseSessionDescription(const std::string& message,
|
||||
desc->set_msid_supported(
|
||||
CaseInsensitiveFind(semantics, kMediaStreamSemantic));
|
||||
} else if (HasAttribute(line, kAttributeExtmapAllowMixed)) {
|
||||
desc->set_mixed_one_two_byte_header_extensions_supported(true);
|
||||
desc->set_extmap_allow_mixed_headers(true);
|
||||
} else if (HasAttribute(line, kAttributeExtmap)) {
|
||||
RtpExtension extmap;
|
||||
if (!ParseExtmap(line, &extmap, error)) {
|
||||
@ -2525,10 +2525,6 @@ bool ParseMediaDescription(const std::string& message,
|
||||
}
|
||||
|
||||
if (IsRtp(protocol)) {
|
||||
if (desc->mixed_one_two_byte_header_extensions_supported()) {
|
||||
content->set_mixed_one_two_byte_header_extensions_supported(
|
||||
MediaContentDescription::kSession);
|
||||
}
|
||||
// Set the extmap.
|
||||
if (!session_extmaps.empty() &&
|
||||
!content->rtp_header_extensions().empty()) {
|
||||
@ -2929,7 +2925,7 @@ bool ParseContent(const std::string& message,
|
||||
} else if (HasAttribute(line, kAttributeSendRecv)) {
|
||||
media_desc->set_direction(RtpTransceiverDirection::kSendRecv);
|
||||
} else if (HasAttribute(line, kAttributeExtmapAllowMixed)) {
|
||||
media_desc->set_mixed_one_two_byte_header_extensions_supported(
|
||||
media_desc->set_extmap_allow_mixed_headers(
|
||||
MediaContentDescription::kMedia);
|
||||
} else if (HasAttribute(line, kAttributeExtmap)) {
|
||||
RtpExtension extmap;
|
||||
|
||||
@ -1285,8 +1285,8 @@ class WebRtcSdpTest : public testing::Test {
|
||||
EXPECT_EQ(cd1->streams(), cd2->streams());
|
||||
|
||||
// extmap-allow-mixed
|
||||
EXPECT_EQ(cd1->mixed_one_two_byte_header_extensions_supported(),
|
||||
cd2->mixed_one_two_byte_header_extensions_supported());
|
||||
EXPECT_EQ(cd1->extmap_allow_mixed_headers(),
|
||||
cd2->extmap_allow_mixed_headers());
|
||||
|
||||
// extmap
|
||||
ASSERT_EQ(cd1->rtp_header_extensions().size(),
|
||||
@ -1404,8 +1404,8 @@ class WebRtcSdpTest : public testing::Test {
|
||||
|
||||
// global attributes
|
||||
EXPECT_EQ(desc1.msid_supported(), desc2.msid_supported());
|
||||
EXPECT_EQ(desc1.mixed_one_two_byte_header_extensions_supported(),
|
||||
desc2.mixed_one_two_byte_header_extensions_supported());
|
||||
EXPECT_EQ(desc1.extmap_allow_mixed_headers(),
|
||||
desc2.extmap_allow_mixed_headers());
|
||||
}
|
||||
|
||||
bool CompareSessionDescription(const JsepSessionDescription& desc1,
|
||||
@ -2102,8 +2102,7 @@ TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithDataChannelAndBandwidth) {
|
||||
}
|
||||
|
||||
TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithExtmapAllowMixed) {
|
||||
jdesc_.description()->set_mixed_one_two_byte_header_extensions_supported(
|
||||
true);
|
||||
jdesc_.description()->set_extmap_allow_mixed_headers(true);
|
||||
TestSerialize(jdesc_);
|
||||
}
|
||||
|
||||
@ -2114,9 +2113,9 @@ TEST_F(WebRtcSdpTest, SerializeMediaContentDescriptionWithExtmapAllowMixed) {
|
||||
cricket::MediaContentDescription* audio_desc =
|
||||
jdesc_.description()->GetContentDescriptionByName(kAudioContentName);
|
||||
ASSERT_TRUE(audio_desc);
|
||||
video_desc->set_mixed_one_two_byte_header_extensions_supported(
|
||||
video_desc->set_extmap_allow_mixed_headers(
|
||||
cricket::MediaContentDescription::kMedia);
|
||||
audio_desc->set_mixed_one_two_byte_header_extensions_supported(
|
||||
audio_desc->set_extmap_allow_mixed_headers(
|
||||
cricket::MediaContentDescription::kMedia);
|
||||
TestSerialize(jdesc_);
|
||||
}
|
||||
@ -2458,46 +2457,8 @@ TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithoutMsid) {
|
||||
EXPECT_TRUE(CompareSessionDescription(jdesc_, jdesc));
|
||||
}
|
||||
|
||||
TEST_F(WebRtcSdpTest, SessionLevelMixedHeaderExtensionsAlsoSetsMediaSetting) {
|
||||
cricket::MediaContentDescription* video_desc =
|
||||
jdesc_.description()->GetContentDescriptionByName(kVideoContentName);
|
||||
ASSERT_TRUE(video_desc);
|
||||
cricket::MediaContentDescription* audio_desc =
|
||||
jdesc_.description()->GetContentDescriptionByName(kAudioContentName);
|
||||
ASSERT_TRUE(audio_desc);
|
||||
|
||||
// Setting true on session level propagates to media level.
|
||||
jdesc_.description()->set_mixed_one_two_byte_header_extensions_supported(
|
||||
true);
|
||||
EXPECT_EQ(cricket::MediaContentDescription::kSession,
|
||||
video_desc->mixed_one_two_byte_header_extensions_supported());
|
||||
EXPECT_EQ(cricket::MediaContentDescription::kSession,
|
||||
audio_desc->mixed_one_two_byte_header_extensions_supported());
|
||||
|
||||
// Don't downgrade from session level to media level
|
||||
video_desc->set_mixed_one_two_byte_header_extensions_supported(
|
||||
cricket::MediaContentDescription::kMedia);
|
||||
EXPECT_EQ(cricket::MediaContentDescription::kSession,
|
||||
video_desc->mixed_one_two_byte_header_extensions_supported());
|
||||
|
||||
// Setting false on session level propagates to media level.
|
||||
jdesc_.description()->set_mixed_one_two_byte_header_extensions_supported(
|
||||
false);
|
||||
EXPECT_EQ(cricket::MediaContentDescription::kNo,
|
||||
video_desc->mixed_one_two_byte_header_extensions_supported());
|
||||
EXPECT_EQ(cricket::MediaContentDescription::kNo,
|
||||
audio_desc->mixed_one_two_byte_header_extensions_supported());
|
||||
|
||||
// Now possible to set at media level.
|
||||
video_desc->set_mixed_one_two_byte_header_extensions_supported(
|
||||
cricket::MediaContentDescription::kMedia);
|
||||
EXPECT_EQ(cricket::MediaContentDescription::kMedia,
|
||||
video_desc->mixed_one_two_byte_header_extensions_supported());
|
||||
}
|
||||
|
||||
TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithExtmapAllowMixed) {
|
||||
jdesc_.description()->set_mixed_one_two_byte_header_extensions_supported(
|
||||
true);
|
||||
jdesc_.description()->set_extmap_allow_mixed_headers(true);
|
||||
std::string sdp_with_extmap_allow_mixed = kSdpFullString;
|
||||
InjectAfter("t=0 0\r\n", kExtmapAllowMixed, &sdp_with_extmap_allow_mixed);
|
||||
// Deserialize
|
||||
@ -2508,8 +2469,7 @@ TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithExtmapAllowMixed) {
|
||||
}
|
||||
|
||||
TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithoutExtmapAllowMixed) {
|
||||
jdesc_.description()->set_mixed_one_two_byte_header_extensions_supported(
|
||||
false);
|
||||
jdesc_.description()->set_extmap_allow_mixed_headers(false);
|
||||
std::string sdp_without_extmap_allow_mixed = kSdpFullString;
|
||||
// Deserialize
|
||||
JsepSessionDescription jdesc_deserialized(kDummyType);
|
||||
@ -2526,9 +2486,9 @@ TEST_F(WebRtcSdpTest, DeserializeMediaContentDescriptionWithExtmapAllowMixed) {
|
||||
cricket::MediaContentDescription* audio_desc =
|
||||
jdesc_.description()->GetContentDescriptionByName(kAudioContentName);
|
||||
ASSERT_TRUE(audio_desc);
|
||||
video_desc->set_mixed_one_two_byte_header_extensions_supported(
|
||||
video_desc->set_extmap_allow_mixed_headers(
|
||||
cricket::MediaContentDescription::kMedia);
|
||||
audio_desc->set_mixed_one_two_byte_header_extensions_supported(
|
||||
audio_desc->set_extmap_allow_mixed_headers(
|
||||
cricket::MediaContentDescription::kMedia);
|
||||
|
||||
std::string sdp_with_extmap_allow_mixed = kSdpFullString;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user