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