RsdparsaSdpAttributeList.h (6676B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef _RSDPARSA_SDP_ATTRIBUTE_LIST_H_ 8 #define _RSDPARSA_SDP_ATTRIBUTE_LIST_H_ 9 10 #include "sdp/RsdparsaSdpGlue.h" 11 #include "sdp/RsdparsaSdpInc.h" 12 #include "sdp/SdpAttributeList.h" 13 14 namespace mozilla { 15 16 class RsdparsaSdp; 17 class RsdparsaSdpMediaSection; 18 class SdpParser; 19 20 class RsdparsaSdpAttributeList : public SdpAttributeList { 21 friend class RsdparsaSdpMediaSection; 22 friend class RsdparsaSdp; 23 24 public: 25 // Make sure we don't hide the default arg thunks 26 using SdpAttributeList::GetAttribute; 27 using SdpAttributeList::HasAttribute; 28 29 bool HasAttribute(AttributeType type, bool sessionFallback) const override; 30 const SdpAttribute* GetAttribute(AttributeType type, 31 bool sessionFallback) const override; 32 void SetAttribute(SdpAttribute* attr) override; 33 void RemoveAttribute(AttributeType type) override; 34 void Clear() override; 35 uint32_t Count() const override; 36 37 const SdpConnectionAttribute& GetConnection() const override; 38 const SdpFingerprintAttributeList& GetFingerprint() const override; 39 const SdpGroupAttributeList& GetGroup() const override; 40 const SdpOptionsAttribute& GetIceOptions() const override; 41 const SdpRtcpAttribute& GetRtcp() const override; 42 const SdpRemoteCandidatesAttribute& GetRemoteCandidates() const override; 43 const SdpSetupAttribute& GetSetup() const override; 44 const SdpSsrcAttributeList& GetSsrc() const override; 45 const SdpSsrcGroupAttributeList& GetSsrcGroup() const override; 46 const SdpDtlsMessageAttribute& GetDtlsMessage() const override; 47 48 // These attributes can appear multiple times, so the returned 49 // classes actually represent a collection of values. 50 const std::vector<std::string>& GetCandidate() const override; 51 const SdpExtmapAttributeList& GetExtmap() const override; 52 const SdpFmtpAttributeList& GetFmtp() const override; 53 const SdpImageattrAttributeList& GetImageattr() const override; 54 const SdpSimulcastAttribute& GetSimulcast() const override; 55 const SdpMsidAttributeList& GetMsid() const override; 56 const SdpMsidSemanticAttributeList& GetMsidSemantic() const override; 57 const SdpRidAttributeList& GetRid() const override; 58 const SdpRtcpFbAttributeList& GetRtcpFb() const override; 59 const SdpRtpmapAttributeList& GetRtpmap() const override; 60 const SdpSctpmapAttributeList& GetSctpmap() const override; 61 62 // These attributes are effectively simple types, so we'll make life 63 // easy by just returning their value. 64 uint32_t GetSctpPort() const override; 65 uint32_t GetMaxMessageSize() const override; 66 const std::string& GetIcePwd() const override; 67 const std::string& GetIceUfrag() const override; 68 const std::string& GetIdentity() const override; 69 const std::string& GetLabel() const override; 70 unsigned int GetMaxptime() const override; 71 const std::string& GetMid() const override; 72 unsigned int GetPtime() const override; 73 74 SdpDirectionAttribute::Direction GetDirection() const override; 75 76 void Serialize(std::ostream&) const override; 77 78 virtual ~RsdparsaSdpAttributeList(); 79 80 private: 81 explicit RsdparsaSdpAttributeList(RsdparsaSessionHandle session) 82 : mSession(std::move(session)), 83 mSessionAttributes(nullptr), 84 mIsVideo(false), 85 mAttributes() { 86 RustAttributeList* attributes = get_sdp_session_attributes(mSession.get()); 87 LoadAll(attributes); 88 } 89 90 RsdparsaSdpAttributeList(RsdparsaSessionHandle session, 91 const RustMediaSection* const msection, 92 const RsdparsaSdpAttributeList* sessionAttributes) 93 : mSession(std::move(session)), 94 mSessionAttributes(sessionAttributes), 95 mAttributes() { 96 mIsVideo = 97 sdp_rust_get_media_type(msection) == RustSdpMediaValue::kRustVideo; 98 RustAttributeList* attributes = sdp_get_media_attribute_list(msection); 99 LoadAll(attributes); 100 } 101 102 static const std::string kEmptyString; 103 static const size_t kNumAttributeTypes = SdpAttribute::kLastAttribute + 1; 104 105 const RsdparsaSessionHandle mSession; 106 const RsdparsaSdpAttributeList* mSessionAttributes; 107 bool mIsVideo; 108 109 bool AtSessionLevel() const { return !mSessionAttributes; } 110 111 bool IsAllowedHere(SdpAttribute::AttributeType type); 112 void LoadAll(RustAttributeList* attributeList); 113 void LoadAttribute(RustAttributeList* attributeList, AttributeType type); 114 void LoadIceUfrag(RustAttributeList* attributeList); 115 void LoadIcePwd(RustAttributeList* attributeList); 116 void LoadIdentity(RustAttributeList* attributeList); 117 void LoadIceOptions(RustAttributeList* attributeList); 118 void LoadFingerprint(RustAttributeList* attributeList); 119 void LoadDtlsMessage(RustAttributeList* attributeList); 120 void LoadSetup(RustAttributeList* attributeList); 121 void LoadSsrc(RustAttributeList* attributeList); 122 void LoadSsrcGroup(RustAttributeList* attributeList); 123 void LoadRtpmap(RustAttributeList* attributeList); 124 void LoadFmtp(RustAttributeList* attributeList); 125 void LoadPtime(RustAttributeList* attributeList); 126 void LoadFlags(RustAttributeList* attributeList); 127 void LoadMaxMessageSize(RustAttributeList* attributeList); 128 void LoadMid(RustAttributeList* attributeList); 129 void LoadMsid(RustAttributeList* attributeList); 130 void LoadMsidSemantics(RustAttributeList* attributeList); 131 void LoadGroup(RustAttributeList* attributeList); 132 void LoadRtcp(RustAttributeList* attributeList); 133 void LoadRtcpFb(RustAttributeList* attributeList); 134 void LoadSctpPort(RustAttributeList* attributeList); 135 void LoadSimulcast(RustAttributeList* attributeList); 136 void LoadImageattr(RustAttributeList* attributeList); 137 void LoadSctpmaps(RustAttributeList* attributeList); 138 void LoadDirection(RustAttributeList* attributeList); 139 void LoadRemoteCandidates(RustAttributeList* attributeList); 140 void LoadRids(RustAttributeList* attributeList); 141 void LoadExtmap(RustAttributeList* attributeList); 142 void LoadMaxPtime(RustAttributeList* attributeList); 143 void LoadCandidate(RustAttributeList* attributeList); 144 145 void WarnAboutMisplacedAttribute(SdpAttribute::AttributeType type, 146 uint32_t lineNumber, SdpParser& errorHolder); 147 148 SdpAttribute* mAttributes[kNumAttributeTypes]; 149 150 RsdparsaSdpAttributeList(const RsdparsaSdpAttributeList& orig) = delete; 151 RsdparsaSdpAttributeList& operator=(const RsdparsaSdpAttributeList& rhs) = 152 delete; 153 }; 154 155 } // namespace mozilla 156 157 #endif