Bug 1474712: Added support for whitespace seperacted ssrc-values in the Rust parser, r=bwc
Added support for whitespace in source-level attributes
Extended C++ unti test CheckSsrc
Extended Rust unti test for ssrc
MozReview-Commit-ID: 1xiYyZBYf5o
--- a/media/webrtc/signaling/gtest/sdp_unittests.cpp
+++ b/media/webrtc/signaling/gtest/sdp_unittests.cpp
@@ -1899,16 +1899,17 @@ const std::string kBasicAudioVideoOffer
"a=candidate:6 1 UDP 16515071 162.222.183.171 64800 typ relay raddr 162.222.183.171 rport 64800" CRLF
"a=candidate:2 1 UDP 1694236671 24.6.134.204 59530 typ srflx raddr 10.0.0.36 rport 59530" CRLF
"a=candidate:3 1 UDP 100401151 162.222.183.171 62935 typ relay raddr 162.222.183.171 rport 62935" CRLF
"a=candidate:3 2 UDP 100401150 162.222.183.171 61026 typ relay raddr 162.222.183.171 rport 61026" CRLF
"a=rtcp:61026" CRLF
"a=end-of-candidates" CRLF
"a=ssrc:1111 foo" CRLF
"a=ssrc:1111 foo:bar" CRLF
+"a=ssrc:1111 msid:1d0cdb4e-5934-4f0f-9f88-40392cb60d31 315b086a-5cb6-4221-89de-caf0b038c79d" CRLF
"a=imageattr:120 send * recv *" CRLF
"a=imageattr:121 send [x=640,y=480] recv [x=640,y=480]" CRLF
"a=rid:bar recv pt=120;max-width=800;max-height=600" CRLF
"a=rid:bar123 recv max-width=1920;max-height=1080" CRLF
"a=simulcast:recv rid=bar;bar123" CRLF
"m=audio 9 RTP/SAVPF 0" CRLF
"a=mid:third" CRLF
"a=rtpmap:0 PCMU/8000" CRLF
@@ -2152,21 +2153,25 @@ TEST_P(NewSdpTest, CheckSsrc)
auto ssrcs = mSdp->GetMediaSection(0).GetAttributeList().GetSsrc().mSsrcs;
ASSERT_EQ(1U, ssrcs.size());
ASSERT_EQ(5150U, ssrcs[0].ssrc);
ASSERT_EQ("", ssrcs[0].attribute);
ASSERT_TRUE(mSdp->GetMediaSection(1).GetAttributeList().HasAttribute(
SdpAttribute::kSsrcAttribute));
ssrcs = mSdp->GetMediaSection(1).GetAttributeList().GetSsrc().mSsrcs;
- ASSERT_EQ(2U, ssrcs.size());
+ ASSERT_EQ(3U, ssrcs.size());
ASSERT_EQ(1111U, ssrcs[0].ssrc);
ASSERT_EQ("foo", ssrcs[0].attribute);
ASSERT_EQ(1111U, ssrcs[1].ssrc);
ASSERT_EQ("foo:bar", ssrcs[1].attribute);
+ ASSERT_EQ(1111U, ssrcs[2].ssrc);
+ ASSERT_EQ("msid:1d0cdb4e-5934-4f0f-9f88-40392cb60d31 "
+ "315b086a-5cb6-4221-89de-caf0b038c79d",
+ ssrcs[2].attribute);
}
TEST_P(NewSdpTest, CheckRtpmap) {
ParseSdp(kBasicAudioVideoOffer);
ASSERT_TRUE(!!mSdp) << "Parse failed: " << GetParseErrors();
ASSERT_EQ(3U, mSdp->GetMediaSectionCount())
<< "Wrong number of media sections";
--- a/media/webrtc/signaling/src/sdp/rsdparsa/src/attribute_type.rs
+++ b/media/webrtc/signaling/src/sdp/rsdparsa/src/attribute_type.rs
@@ -1597,17 +1597,17 @@ fn parse_simulcast(to_parse: &str) -> Re
SdpSingleDirection::Recv => SdpAttributeSimulcast {
send: second_version_list,
receive: first_version_list,
},
}))
}
fn parse_ssrc(to_parse: &str) -> Result<SdpAttribute, SdpParserInternalError> {
- let mut tokens = to_parse.split_whitespace();
+ let mut tokens = to_parse.splitn(2,' ');
let ssrc_id = match tokens.next() {
None => {
return Err(SdpParserInternalError::Generic("Ssrc attribute is missing ssrc-id value"
.to_string()))
}
Some(x) => x.parse::<u32>()?,
};
let mut ssrc = SdpAttributeSsrc::new(ssrc_id);
@@ -2073,16 +2073,18 @@ fn test_parse_attribute_simulcast() {
}
#[test]
fn test_parse_attribute_ssrc() {
assert!(parse_attribute("ssrc:2655508255").is_ok());
assert!(parse_attribute("ssrc:2655508255 foo").is_ok());
assert!(parse_attribute("ssrc:2655508255 cname:{735484ea-4f6c-f74a-bd66-7425f8476c2e}")
.is_ok());
+ assert!(parse_attribute("ssrc:2082260239 msid:1d0cdb4e-5934-4f0f-9f88-40392cb60d31 315b086a-5cb6-4221-89de-caf0b038c79d")
+ .is_ok());
assert!(parse_attribute("ssrc:").is_err());
assert!(parse_attribute("ssrc:foo").is_err());
}
#[test]
fn test_parse_attribute_ssrc_group() {
assert!(parse_attribute("ssrc-group:FID 3156517279 2673335628").is_ok())