Bug 1438536: Added bool field to indicate whether direction was specified to RustSdpAttributeExtmap, r=drno
Added a bool field in RustSdpAttributeExtmap that tracks whether the direction was specified.
Added the correspodning C++/Rust glue code
MozReview-Commit-ID: yGL8yTDb49
--- a/media/webrtc/signaling/src/sdp/RsdparsaSdpAttributeList.cpp
+++ b/media/webrtc/signaling/src/sdp/RsdparsaSdpAttributeList.cpp
@@ -1144,31 +1144,29 @@ RsdparsaSdpAttributeList::LoadExtmap(Rus
auto rustExtmaps = MakeUnique<RustSdpAttributeExtmap[]>(numExtmap);
sdp_get_extmaps(attributeList, numExtmap,
rustExtmaps.get());
auto extmaps = MakeUnique<SdpExtmapAttributeList>();
for(size_t i = 0; i < numExtmap; i++) {
RustSdpAttributeExtmap& rustExtmap = rustExtmaps[i];
std::string name = convertStringView(rustExtmap.url);
SdpDirectionAttribute::Direction direction;
- bool directionSpecified = true;
+ bool directionSpecified = rustExtmap.direction_specified;
switch(rustExtmap.direction) {
case RustDirection::kRustRecvonly:
direction = SdpDirectionAttribute::kRecvonly;
break;
case RustDirection::kRustSendonly:
direction = SdpDirectionAttribute::kSendonly;
break;
case RustDirection::kRustSendrecv:
direction = SdpDirectionAttribute::kSendrecv;
break;
case RustDirection::kRustInactive:
- // TODO: Fix this, see Bug 1438544
- direction = SdpDirectionAttribute::kSendrecv;
- directionSpecified = false;
+ direction = SdpDirectionAttribute::kInactive;
break;
}
std::string extensionAttributes;
extensionAttributes = convertStringView(rustExtmap.extensionAttributes);
extmaps->PushEntry((uint16_t) rustExtmap.id, direction,
directionSpecified, name, extensionAttributes);
}
SetAttribute(extmaps.release());
--- a/media/webrtc/signaling/src/sdp/RsdparsaSdpInc.h
+++ b/media/webrtc/signaling/src/sdp/RsdparsaSdpInc.h
@@ -225,20 +225,19 @@ enum class RustDirection {
};
struct RustSdpAttributeRemoteCandidate {
uint32_t component;
RustIpAddr address;
uint32_t port;
};
-// TODO: Add field indicating whether direction was specified
-// See Bug 1438536.
struct RustSdpAttributeExtmap {
uint16_t id;
+ bool direction_specified;
RustDirection direction;
StringView url;
StringView extensionAttributes;
};
extern "C" {
size_t string_vec_len(const StringVec* vec);
--- a/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/attribute.rs
+++ b/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/attribute.rs
@@ -988,25 +988,27 @@ pub unsafe extern "C" fn sdp_get_rids(at
let rids = slice::from_raw_parts_mut(ret_rids, ret_size);
rids.clone_from_slice(attrs.as_slice());
}
#[repr(C)]
#[derive(Clone, Copy)]
pub struct RustSdpAttributeExtmap {
pub id: uint16_t,
+ pub direction_specified: bool,
pub direction: RustDirection,
pub url: StringView,
pub extension_attributes: StringView
}
impl<'a> From<&'a SdpAttributeExtmap> for RustSdpAttributeExtmap {
fn from(other: &SdpAttributeExtmap) -> Self {
RustSdpAttributeExtmap {
id : other.id as uint16_t,
+ direction_specified: other.direction.is_some(),
direction: RustDirection::from(&other.direction),
url: StringView::from(other.url.as_str()),
extension_attributes: StringView::from(&other.extension_attributes)
}
}
}
#[no_mangle]