SipccSdpAttributeList.h (6726B)
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 _SIPCCSDPATTRIBUTELIST_H_ 8 #define _SIPCCSDPATTRIBUTELIST_H_ 9 10 #include "sdp/SdpAttributeList.h" 11 #include "sdp/SdpParser.h" 12 13 extern "C" { 14 #include "sipcc_sdp.h" 15 } 16 17 namespace mozilla { 18 19 class SipccSdp; 20 class SipccSdpMediaSection; 21 22 class SipccSdpAttributeList : public SdpAttributeList { 23 friend class SipccSdpMediaSection; 24 friend class SipccSdp; 25 26 public: 27 // Make sure we don't hide the default arg thunks 28 using SdpAttributeList::GetAttribute; 29 using SdpAttributeList::HasAttribute; 30 31 virtual bool HasAttribute(AttributeType type, 32 bool sessionFallback) const override; 33 virtual const SdpAttribute* GetAttribute(AttributeType type, 34 bool sessionFallback) const override; 35 virtual void SetAttribute(SdpAttribute* attr) override; 36 virtual void RemoveAttribute(AttributeType type) override; 37 virtual void Clear() override; 38 virtual uint32_t Count() const override; 39 40 virtual const SdpConnectionAttribute& GetConnection() const override; 41 virtual const SdpFingerprintAttributeList& GetFingerprint() const override; 42 virtual const SdpGroupAttributeList& GetGroup() const override; 43 virtual const SdpOptionsAttribute& GetIceOptions() const override; 44 virtual const SdpRtcpAttribute& GetRtcp() const override; 45 virtual const SdpRemoteCandidatesAttribute& GetRemoteCandidates() 46 const override; 47 virtual const SdpSetupAttribute& GetSetup() const override; 48 virtual const SdpSsrcAttributeList& GetSsrc() const override; 49 virtual const SdpSsrcGroupAttributeList& GetSsrcGroup() const override; 50 virtual const SdpDtlsMessageAttribute& GetDtlsMessage() const override; 51 52 // These attributes can appear multiple times, so the returned 53 // classes actually represent a collection of values. 54 virtual const std::vector<std::string>& GetCandidate() const override; 55 virtual const SdpExtmapAttributeList& GetExtmap() const override; 56 virtual const SdpFmtpAttributeList& GetFmtp() const override; 57 virtual const SdpImageattrAttributeList& GetImageattr() const override; 58 const SdpSimulcastAttribute& GetSimulcast() const override; 59 virtual const SdpMsidAttributeList& GetMsid() const override; 60 virtual const SdpMsidSemanticAttributeList& GetMsidSemantic() const override; 61 const SdpRidAttributeList& GetRid() const override; 62 virtual const SdpRtcpFbAttributeList& GetRtcpFb() const override; 63 virtual const SdpRtpmapAttributeList& GetRtpmap() const override; 64 virtual const SdpSctpmapAttributeList& GetSctpmap() const override; 65 virtual uint32_t GetSctpPort() const override; 66 virtual uint32_t GetMaxMessageSize() const override; 67 68 // These attributes are effectively simple types, so we'll make life 69 // easy by just returning their value. 70 virtual const std::string& GetIcePwd() const override; 71 virtual const std::string& GetIceUfrag() const override; 72 virtual const std::string& GetIdentity() const override; 73 virtual const std::string& GetLabel() const override; 74 virtual unsigned int GetMaxptime() const override; 75 virtual const std::string& GetMid() const override; 76 virtual unsigned int GetPtime() const override; 77 78 virtual SdpDirectionAttribute::Direction GetDirection() const override; 79 80 virtual void Serialize(std::ostream&) const override; 81 82 virtual ~SipccSdpAttributeList(); 83 84 private: 85 static const std::string kEmptyString; 86 static const size_t kNumAttributeTypes = SdpAttribute::kLastAttribute + 1; 87 88 // Pass a session-level attribute list if constructing a media-level one, 89 // otherwise pass nullptr 90 explicit SipccSdpAttributeList(const SipccSdpAttributeList* sessionLevel); 91 92 // Copy c'tor, sort of 93 SipccSdpAttributeList(const SipccSdpAttributeList& aOrig, 94 const SipccSdpAttributeList* sessionLevel); 95 96 using InternalResults = SdpParser::InternalResults; 97 98 bool Load(sdp_t* sdp, uint16_t level, InternalResults& results); 99 void LoadSimpleStrings(sdp_t* sdp, uint16_t level, InternalResults& results); 100 void LoadSimpleString(sdp_t* sdp, uint16_t level, sdp_attr_e attr, 101 AttributeType targetType, InternalResults& results); 102 void LoadSimpleNumbers(sdp_t* sdp, uint16_t level, InternalResults& results); 103 void LoadSimpleNumber(sdp_t* sdp, uint16_t level, sdp_attr_e attr, 104 AttributeType targetType, InternalResults& results); 105 void LoadFlags(sdp_t* sdp, uint16_t level); 106 void LoadDirection(sdp_t* sdp, uint16_t level, InternalResults& results); 107 bool LoadRtpmap(sdp_t* sdp, uint16_t level, InternalResults& results); 108 bool LoadSctpmap(sdp_t* sdp, uint16_t level, InternalResults& results); 109 void LoadIceAttributes(sdp_t* sdp, uint16_t level); 110 bool LoadFingerprint(sdp_t* sdp, uint16_t level, InternalResults& results); 111 void LoadCandidate(sdp_t* sdp, uint16_t level); 112 void LoadSetup(sdp_t* sdp, uint16_t level); 113 void LoadSsrc(sdp_t* sdp, uint16_t level); 114 void LoadSsrcGroup(sdp_t* sdp, uint16_t level); 115 bool LoadImageattr(sdp_t* sdp, uint16_t level, InternalResults& results); 116 bool LoadSimulcast(sdp_t* sdp, uint16_t level, InternalResults& results); 117 bool LoadGroups(sdp_t* sdp, uint16_t level, InternalResults& results); 118 bool LoadMsidSemantics(sdp_t* sdp, uint16_t level, InternalResults& results); 119 void LoadIdentity(sdp_t* sdp, uint16_t level); 120 void LoadDtlsMessage(sdp_t* sdp, uint16_t level); 121 void LoadFmtp(sdp_t* sdp, uint16_t level); 122 void LoadMsids(sdp_t* sdp, uint16_t level, InternalResults& results); 123 bool LoadRid(sdp_t* sdp, uint16_t level, InternalResults& results); 124 void LoadExtmap(sdp_t* sdp, uint16_t level, InternalResults& results); 125 void LoadRtcpFb(sdp_t* sdp, uint16_t level, InternalResults& results); 126 void LoadRtcp(sdp_t* sdp, uint16_t level, InternalResults& results); 127 static SdpRtpmapAttributeList::CodecType GetCodecType(rtp_ptype type); 128 129 bool AtSessionLevel() const { return !mSessionLevel; } 130 bool IsAllowedHere(SdpAttribute::AttributeType type) const; 131 void WarnAboutMisplacedAttribute(SdpAttribute::AttributeType type, 132 uint32_t lineNumber, 133 InternalResults& results); 134 135 const SipccSdpAttributeList* mSessionLevel; 136 137 SdpAttribute* mAttributes[kNumAttributeTypes]; 138 139 SipccSdpAttributeList(const SipccSdpAttributeList& orig) = delete; 140 SipccSdpAttributeList& operator=(const SipccSdpAttributeList& rhs) = delete; 141 }; 142 143 } // namespace mozilla 144 145 #endif