Bug 1433093: Implemented RsdparsaSdpMediaSection::SetPort. r=dminor
Add C++/Rust glue code
Added set_port function SdpMedia
Added unit test: CheckSetPort
MozReview-Commit-ID: 6pbbuSxzhqM
--- a/media/webrtc/signaling/gtest/sdp_unittests.cpp
+++ b/media/webrtc/signaling/gtest/sdp_unittests.cpp
@@ -3902,16 +3902,38 @@ TEST_P(NewSdpTest, CheckMediaLevelDtlsMe
ASSERT_TRUE(!!mSdp) << "Parse failed: " << GetParseErrors();
// dtls-message is not defined for use at the media level; we don't
// parse it
ASSERT_FALSE(mSdp->GetMediaSection(0).GetAttributeList().HasAttribute(
SdpAttribute::kDtlsMessageAttribute));
}
+TEST_P(NewSdpTest, CheckSetPort) {
+ // Parse any valid sdp with a media section
+ ParseSdp("v=0" CRLF
+ "o=- 4294967296 2 IN IP4 127.0.0.1" CRLF
+ "s=SIP Call" CRLF
+ "c=IN IP4 198.51.100.7" CRLF
+ "b=CT:5000" CRLF
+ "t=0 0" CRLF
+ "m=video 56436 RTP/SAVPF 120" CRLF
+ "a=rtpmap:120 VP8/90000" CRLF
+ "a=sendonly" CRLF,
+ false);
+
+ ASSERT_TRUE(!!mSdp) << "Parse failed: " << GetParseErrors();
+
+ constexpr unsigned int expectedParesPort = 56436;
+ unsigned int currentPort = mSdp->GetMediaSection(0).GetPort();
+ ASSERT_EQ(expectedParesPort, currentPort);
+
+ mSdp->GetMediaSection(0).SetPort(currentPort+1);
+ ASSERT_EQ(currentPort+1,mSdp->GetMediaSection(0).GetPort());
+}
TEST(NewSdpTestNoFixture, CheckAttributeTypeSerialize) {
for (auto a = static_cast<size_t>(SdpAttribute::kFirstAttribute);
a <= static_cast<size_t>(SdpAttribute::kLastAttribute);
++a) {
SdpAttribute::AttributeType type =
static_cast<SdpAttribute::AttributeType>(a);
--- a/media/webrtc/signaling/src/sdp/RsdparsaSdpInc.h
+++ b/media/webrtc/signaling/src/sdp/RsdparsaSdpInc.h
@@ -199,16 +199,17 @@ size_t sdp_media_section_count(const Rus
RustMediaSection* sdp_get_media_section(const RustSdpSession* aSess,
size_t aLevel);
RustSdpMediaValue sdp_rust_get_media_type(const RustMediaSection* aMediaSec);
RustSdpProtocolValue
sdp_get_media_protocol(const RustMediaSection* aMediaSec);
RustSdpFormatType sdp_get_format_type(const RustMediaSection* aMediaSec);
StringVec* sdp_get_format_string_vec(const RustMediaSection* aMediaSec);
U32Vec* sdp_get_format_u32_vec(const RustMediaSection* aMediaSec);
+void sdp_set_media_port(const RustMediaSection* aMediaSec, uint32_t aPort);
uint32_t sdp_get_media_port(const RustMediaSection* aMediaSec);
uint32_t sdp_get_media_port_count(const RustMediaSection* aMediaSec);
uint32_t sdp_get_media_bandwidth(const RustMediaSection* aMediaSec,
const char* aBandwidthType);
bool sdp_media_has_connection(const RustMediaSection* aMediaSec);
nsresult sdp_get_media_connection(const RustMediaSection* aMediaSec,
RustSdpConnection* ret);
--- a/media/webrtc/signaling/src/sdp/RsdparsaSdpMediaSection.cpp
+++ b/media/webrtc/signaling/src/sdp/RsdparsaSdpMediaSection.cpp
@@ -54,17 +54,17 @@ unsigned int
RsdparsaSdpMediaSection::GetPort() const
{
return sdp_get_media_port(mSection);
}
void
RsdparsaSdpMediaSection::SetPort(unsigned int port)
{
- // TODO, see Bug 1433093
+ sdp_set_media_port(mSection, port);
}
unsigned int
RsdparsaSdpMediaSection::GetPortCount() const
{
return sdp_get_media_port_count(mSection);
}
@@ -227,9 +227,8 @@ RsdparsaSdpMediaSection::LoadConnection(
nr = sdp_get_session_connection(mSession.get(), &conn);
if (NS_SUCCEEDED(nr)) {
mConnection = convertRustConnection(conn);
}
}
}
} // namespace mozilla
-
--- a/media/webrtc/signaling/src/sdp/rsdparsa/src/media_type.rs
+++ b/media/webrtc/signaling/src/sdp/rsdparsa/src/media_type.rs
@@ -88,16 +88,20 @@ impl SdpMedia {
attribute: Vec::new(),
}
}
pub fn get_type(&self) -> &SdpMediaValue {
&self.media.media
}
+ pub fn set_port(&mut self, port: u32) {
+ self.media.port = port;
+ }
+
pub fn get_port(&self) -> u32 {
self.media.port
}
pub fn get_port_count(&self) -> u32 {
self.media.port_count
}
--- a/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/media_section.rs
+++ b/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/media_section.rs
@@ -101,16 +101,21 @@ pub unsafe extern "C" fn sdp_get_format_
if let SdpFormatList::Integers(ref formats) = *(*sdp_media).get_formats() {
formats
} else {
ptr::null()
}
}
#[no_mangle]
+pub unsafe extern "C" fn sdp_set_media_port(sdp_media: *mut SdpMedia, port: uint32_t) {
+ (*sdp_media).set_port(port);
+}
+
+#[no_mangle]
pub unsafe extern "C" fn sdp_get_media_port(sdp_media: *const SdpMedia) -> uint32_t {
(*sdp_media).get_port()
}
#[no_mangle]
pub unsafe extern "C" fn sdp_get_media_port_count(sdp_media: *const SdpMedia) -> uint32_t {
(*sdp_media).get_port_count()
}