ac6c6d446b3c71690743486cd51efa9e936f5e2b
[WebKit-https.git] / Source / WebCore / platform / mediastream / PeerMediaDescription.h
1 /*
2  * Copyright (C) 2015 Ericsson AB. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer
12  *    in the documentation and/or other materials provided with the
13  *    distribution.
14  * 3. Neither the name of Ericsson nor the names of its contributors
15  *    may be used to endorse or promote products derived from this
16  *    software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef PeerMediaDescription_h
32 #define PeerMediaDescription_h
33
34 #if ENABLE(MEDIA_STREAM)
35
36 #include "IceCandidate.h"
37 #include "MediaPayload.h"
38 #include "RealtimeMediaSource.h"
39 #include <wtf/RefCounted.h>
40 #include <wtf/Vector.h>
41
42 namespace WebCore {
43
44 class PeerMediaDescription : public RefCounted<PeerMediaDescription> {
45 public:
46     static RefPtr<PeerMediaDescription> create()
47     {
48         return adoptRef(new PeerMediaDescription());
49     }
50     virtual ~PeerMediaDescription() { }
51
52     const String& type() const { return m_type; }
53     void setType(const String& type) { m_type = type; }
54
55     unsigned short port() const { return m_port; }
56     void setPort(unsigned short port) { m_port = port; }
57
58     const String& address() const { return m_address; }
59     void setAddress(const String& address) { m_address = address; }
60
61     const String& mode() const { return m_mode; }
62     void setMode(const String& mode) { m_mode = mode; }
63
64     const Vector<RefPtr<MediaPayload>>& payloads() const { return m_payloads; }
65     void addPayload(RefPtr<MediaPayload>&& payload) { m_payloads.append(WTFMove(payload)); }
66     void setPayloads(Vector<RefPtr<MediaPayload>>&& payloads) { m_payloads = payloads; }
67     void setPayloads(const Vector<RefPtr<MediaPayload>>& payloads) { m_payloads = payloads; }
68
69     bool rtcpMux() const { return m_rtcpMux; }
70     void setRtcpMux(bool rtcpMux) { m_rtcpMux = rtcpMux; }
71
72     const String& rtcpAddress() const { return m_rtcpAddress; }
73     void setRtcpAddress(const String& rtcpAddress) { m_rtcpAddress = rtcpAddress; }
74
75     unsigned short rtcpPort() const { return m_rtcpPort; }
76     void setRtcpPort(unsigned short rtcpPort) { m_rtcpPort = rtcpPort; }
77
78     const String& mediaStreamId() const { return m_mediaStreamId; }
79     void setMediaStreamId(const String& mediaStreamId) { m_mediaStreamId = mediaStreamId; }
80
81     const String& mediaStreamTrackId() const { return m_mediaStreamTrackId; }
82     void setMediaStreamTrackId(const String& mediaStreamTrackId) { m_mediaStreamTrackId = mediaStreamTrackId; }
83
84     const String& dtlsSetup() const { return m_dtlsSetup; }
85     void setDtlsSetup(const String& dtlsSetup) { m_dtlsSetup = dtlsSetup; }
86
87     const String& dtlsFingerprintHashFunction() const { return m_dtlsFingerprintHashFunction; }
88     void setDtlsFingerprintHashFunction(const String& dtlsFingerprintHashFunction) { m_dtlsFingerprintHashFunction = dtlsFingerprintHashFunction; }
89
90     const String& dtlsFingerprint() const { return m_dtlsFingerprint; }
91     void setDtlsFingerprint(const String& dtlsFingerprint) { m_dtlsFingerprint = dtlsFingerprint; }
92
93     const String& cname() const { return m_cname; }
94     void setCname(const String& cname) { m_cname = cname; }
95
96     const Vector<unsigned>& ssrcs() const { return m_ssrcs; }
97     void addSsrc(unsigned ssrc) { m_ssrcs.append(ssrc); }
98     void clearSsrcs() { m_ssrcs.clear(); }
99
100     const String& iceUfrag() const { return m_iceUfrag; }
101     void setIceUfrag(const String& iceUfrag) { m_iceUfrag = iceUfrag; }
102
103     const String& icePassword() const { return m_icePassword; }
104     void setIcePassword(const String& icePassword) { m_icePassword = icePassword; }
105
106     const Vector<RefPtr<IceCandidate>>& iceCandidates() const { return m_iceCandidates; }
107     void addIceCandidate(RefPtr<IceCandidate>&& candidate) { m_iceCandidates.append(WTFMove(candidate)); }
108
109     RealtimeMediaSource* source() const { return m_source.get(); }
110     void setSource(RefPtr<RealtimeMediaSource>&& source) { m_source = source; }
111
112     RefPtr<PeerMediaDescription> clone() const
113     {
114         RefPtr<PeerMediaDescription> copy = create();
115
116         copy->m_type = String(m_type);
117         copy->m_port = m_port;
118         copy->m_address = String(m_address);
119         copy->m_mode = String(m_mode);
120
121         for (auto& payload : m_payloads)
122             copy->m_payloads.append(payload->clone());
123
124         copy->m_rtcpMux = m_rtcpMux;
125         copy->m_rtcpAddress = String(m_rtcpAddress);
126         copy->m_rtcpPort = m_rtcpPort;
127
128         copy->m_mediaStreamId = String(m_mediaStreamId);
129         copy->m_mediaStreamTrackId = String(m_mediaStreamTrackId);
130
131         copy->m_dtlsSetup = String(m_dtlsSetup);
132         copy->m_dtlsFingerprintHashFunction = String(m_dtlsFingerprintHashFunction);
133         copy->m_dtlsFingerprint = String(m_dtlsFingerprint);
134
135         for (auto ssrc : m_ssrcs)
136             copy->m_ssrcs.append(ssrc);
137
138         copy->m_cname = String(m_cname);
139
140         copy->m_iceUfrag = String(m_iceUfrag);
141         copy->m_icePassword = String(m_icePassword);
142
143         for (auto& candidate : m_iceCandidates)
144             copy->m_iceCandidates.append(candidate->clone());
145
146         return copy;
147     }
148
149 private:
150     PeerMediaDescription() { }
151
152     String m_type;
153     unsigned short m_port { 0 };
154     String m_address;
155     String m_mode;
156
157     Vector<RefPtr<MediaPayload>> m_payloads;
158
159     bool m_rtcpMux { false };
160     String m_rtcpAddress;
161     unsigned short m_rtcpPort { 0 };
162
163     String m_mediaStreamId;
164     String m_mediaStreamTrackId;
165
166     String m_dtlsSetup;
167     String m_dtlsFingerprintHashFunction;
168     String m_dtlsFingerprint;
169
170     Vector<unsigned> m_ssrcs;
171     String m_cname;
172
173     String m_iceUfrag;
174     String m_icePassword;
175     Vector<RefPtr<IceCandidate>> m_iceCandidates;
176
177     RefPtr<RealtimeMediaSource> m_source { nullptr };
178 };
179
180 } // namespace WebCore
181
182 #endif // ENABLE(MEDIA_STREAM)
183
184 #endif // PeerMediaDescription_h