Bug 1438536: Added bool field to indicate whether direction was specified to RustSdpAttributeExtmap, r=drno draft
authorJohannes Willbold <j.willbold@mozilla.com>
Tue, 10 Jul 2018 16:23:50 -0700
changeset 817004 d65f35051338673062d13b7bde591de880052558
parent 816347 70f901964f9725e6dfd09750f48996e9d6670492
push id115924
push userbmo:johannes.willbold@rub.de
push dateWed, 11 Jul 2018 19:55:26 +0000
reviewersdrno
bugs1438536
milestone63.0a1
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
media/webrtc/signaling/src/sdp/RsdparsaSdpAttributeList.cpp
media/webrtc/signaling/src/sdp/RsdparsaSdpInc.h
media/webrtc/signaling/src/sdp/rsdparsa_capi/src/attribute.rs
--- 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]