OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/protocol/session_config.h" | 5 #include "remoting/protocol/session_config.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/memory/ptr_util.h" |
11 | 12 |
12 namespace remoting { | 13 namespace remoting { |
13 namespace protocol { | 14 namespace protocol { |
14 | 15 |
15 namespace { | 16 namespace { |
16 | 17 |
17 bool IsChannelConfigSupported(const std::list<ChannelConfig>& list, | 18 bool IsChannelConfigSupported(const std::list<ChannelConfig>& list, |
18 const ChannelConfig& value) { | 19 const ChannelConfig& value) { |
19 return std::find(list.begin(), list.end(), value) != list.end(); | 20 return std::find(list.begin(), list.end(), value) != list.end(); |
20 } | 21 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 } | 64 } |
64 | 65 |
65 bool ChannelConfig::operator==(const ChannelConfig& b) const { | 66 bool ChannelConfig::operator==(const ChannelConfig& b) const { |
66 // If the transport field is set to NONE then all other fields are irrelevant. | 67 // If the transport field is set to NONE then all other fields are irrelevant. |
67 if (transport == ChannelConfig::TRANSPORT_NONE) | 68 if (transport == ChannelConfig::TRANSPORT_NONE) |
68 return transport == b.transport; | 69 return transport == b.transport; |
69 return transport == b.transport && version == b.version && codec == b.codec; | 70 return transport == b.transport && version == b.version && codec == b.codec; |
70 } | 71 } |
71 | 72 |
72 // static | 73 // static |
73 scoped_ptr<SessionConfig> SessionConfig::SelectCommon( | 74 std::unique_ptr<SessionConfig> SessionConfig::SelectCommon( |
74 const CandidateSessionConfig* client_config, | 75 const CandidateSessionConfig* client_config, |
75 const CandidateSessionConfig* host_config) { | 76 const CandidateSessionConfig* host_config) { |
76 | |
77 // Use WebRTC if both host and client support it. | 77 // Use WebRTC if both host and client support it. |
78 if (client_config->webrtc_supported() && host_config->webrtc_supported()) | 78 if (client_config->webrtc_supported() && host_config->webrtc_supported()) |
79 return make_scoped_ptr(new SessionConfig(Protocol::WEBRTC)); | 79 return base::WrapUnique(new SessionConfig(Protocol::WEBRTC)); |
80 | 80 |
81 // Reject connection if ICE is not supported by either of the peers. | 81 // Reject connection if ICE is not supported by either of the peers. |
82 if (!host_config->ice_supported() || !client_config->ice_supported()) | 82 if (!host_config->ice_supported() || !client_config->ice_supported()) |
83 return nullptr; | 83 return nullptr; |
84 | 84 |
85 scoped_ptr<SessionConfig> result(new SessionConfig(Protocol::ICE)); | 85 std::unique_ptr<SessionConfig> result(new SessionConfig(Protocol::ICE)); |
86 ChannelConfig control_config; | 86 ChannelConfig control_config; |
87 ChannelConfig event_config; | 87 ChannelConfig event_config; |
88 ChannelConfig video_config; | 88 ChannelConfig video_config; |
89 ChannelConfig audio_config; | 89 ChannelConfig audio_config; |
90 | 90 |
91 // If neither host nor the client have VP9 experiment enabled then remove it | 91 // If neither host nor the client have VP9 experiment enabled then remove it |
92 // from the list of host video configs. | 92 // from the list of host video configs. |
93 std::list<ChannelConfig> host_video_configs = host_config->video_configs(); | 93 std::list<ChannelConfig> host_video_configs = host_config->video_configs(); |
94 if (!client_config->vp9_experiment_enabled() && | 94 if (!client_config->vp9_experiment_enabled() && |
95 !host_config->vp9_experiment_enabled()) { | 95 !host_config->vp9_experiment_enabled()) { |
(...skipping 14 matching lines...) Expand all Loading... |
110 !SelectCommonChannelConfig(host_config->audio_configs(), | 110 !SelectCommonChannelConfig(host_config->audio_configs(), |
111 client_config->audio_configs(), | 111 client_config->audio_configs(), |
112 &result->audio_config_)) { | 112 &result->audio_config_)) { |
113 return nullptr; | 113 return nullptr; |
114 } | 114 } |
115 | 115 |
116 return result; | 116 return result; |
117 } | 117 } |
118 | 118 |
119 // static | 119 // static |
120 scoped_ptr<SessionConfig> SessionConfig::GetFinalConfig( | 120 std::unique_ptr<SessionConfig> SessionConfig::GetFinalConfig( |
121 const CandidateSessionConfig* candidate_config) { | 121 const CandidateSessionConfig* candidate_config) { |
122 if (candidate_config->webrtc_supported()) { | 122 if (candidate_config->webrtc_supported()) { |
123 if (candidate_config->ice_supported()) { | 123 if (candidate_config->ice_supported()) { |
124 LOG(ERROR) << "Received candidate config is ambiguous."; | 124 LOG(ERROR) << "Received candidate config is ambiguous."; |
125 return nullptr; | 125 return nullptr; |
126 } | 126 } |
127 return make_scoped_ptr(new SessionConfig(Protocol::WEBRTC)); | 127 return base::WrapUnique(new SessionConfig(Protocol::WEBRTC)); |
128 } | 128 } |
129 | 129 |
130 if (!candidate_config->ice_supported()) | 130 if (!candidate_config->ice_supported()) |
131 return nullptr; | 131 return nullptr; |
132 | 132 |
133 if (candidate_config->control_configs().size() != 1 || | 133 if (candidate_config->control_configs().size() != 1 || |
134 candidate_config->event_configs().size() != 1 || | 134 candidate_config->event_configs().size() != 1 || |
135 candidate_config->video_configs().size() != 1 || | 135 candidate_config->video_configs().size() != 1 || |
136 candidate_config->audio_configs().size() != 1) { | 136 candidate_config->audio_configs().size() != 1) { |
137 return nullptr; | 137 return nullptr; |
138 } | 138 } |
139 | 139 |
140 scoped_ptr<SessionConfig> result(new SessionConfig(Protocol::ICE)); | 140 std::unique_ptr<SessionConfig> result(new SessionConfig(Protocol::ICE)); |
141 result->control_config_ = candidate_config->control_configs().front(); | 141 result->control_config_ = candidate_config->control_configs().front(); |
142 result->event_config_ = candidate_config->event_configs().front(); | 142 result->event_config_ = candidate_config->event_configs().front(); |
143 result->video_config_ = candidate_config->video_configs().front(); | 143 result->video_config_ = candidate_config->video_configs().front(); |
144 result->audio_config_ = candidate_config->audio_configs().front(); | 144 result->audio_config_ = candidate_config->audio_configs().front(); |
145 | 145 |
146 return result; | 146 return result; |
147 } | 147 } |
148 | 148 |
149 // static | 149 // static |
150 scoped_ptr<SessionConfig> SessionConfig::ForTest() { | 150 std::unique_ptr<SessionConfig> SessionConfig::ForTest() { |
151 scoped_ptr<SessionConfig> result(new SessionConfig(Protocol::ICE)); | 151 std::unique_ptr<SessionConfig> result(new SessionConfig(Protocol::ICE)); |
152 result->control_config_ = ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, | 152 result->control_config_ = ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, |
153 kControlStreamVersion, | 153 kControlStreamVersion, |
154 ChannelConfig::CODEC_UNDEFINED); | 154 ChannelConfig::CODEC_UNDEFINED); |
155 result->event_config_ = ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, | 155 result->event_config_ = ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, |
156 kDefaultStreamVersion, | 156 kDefaultStreamVersion, |
157 ChannelConfig::CODEC_UNDEFINED); | 157 ChannelConfig::CODEC_UNDEFINED); |
158 result->video_config_ = ChannelConfig(ChannelConfig::TRANSPORT_STREAM, | 158 result->video_config_ = ChannelConfig(ChannelConfig::TRANSPORT_STREAM, |
159 kDefaultStreamVersion, | 159 kDefaultStreamVersion, |
160 ChannelConfig::CODEC_VP8); | 160 ChannelConfig::CODEC_VP8); |
161 result->audio_config_ = ChannelConfig(ChannelConfig::TRANSPORT_NONE, | 161 result->audio_config_ = ChannelConfig(ChannelConfig::TRANSPORT_NONE, |
162 kDefaultStreamVersion, | 162 kDefaultStreamVersion, |
163 ChannelConfig::CODEC_UNDEFINED); | 163 ChannelConfig::CODEC_UNDEFINED); |
164 return result; | 164 return result; |
165 } | 165 } |
166 | 166 |
167 scoped_ptr<SessionConfig> SessionConfig::ForTestWithVerbatimVideo() { | 167 std::unique_ptr<SessionConfig> SessionConfig::ForTestWithVerbatimVideo() { |
168 scoped_ptr<SessionConfig> result = ForTest(); | 168 std::unique_ptr<SessionConfig> result = ForTest(); |
169 result->video_config_ = ChannelConfig(ChannelConfig::TRANSPORT_STREAM, | 169 result->video_config_ = ChannelConfig(ChannelConfig::TRANSPORT_STREAM, |
170 kDefaultStreamVersion, | 170 kDefaultStreamVersion, |
171 ChannelConfig::CODEC_VERBATIM); | 171 ChannelConfig::CODEC_VERBATIM); |
172 return result; | 172 return result; |
173 } | 173 } |
174 | 174 |
175 scoped_ptr<SessionConfig> SessionConfig::ForTestWithWebrtc() { | 175 std::unique_ptr<SessionConfig> SessionConfig::ForTestWithWebrtc() { |
176 return make_scoped_ptr(new SessionConfig(Protocol::WEBRTC)); | 176 return base::WrapUnique(new SessionConfig(Protocol::WEBRTC)); |
177 } | 177 } |
178 | 178 |
179 const ChannelConfig& SessionConfig::control_config() const { | 179 const ChannelConfig& SessionConfig::control_config() const { |
180 DCHECK(protocol_ == Protocol::ICE); | 180 DCHECK(protocol_ == Protocol::ICE); |
181 return control_config_; | 181 return control_config_; |
182 } | 182 } |
183 const ChannelConfig& SessionConfig::event_config() const { | 183 const ChannelConfig& SessionConfig::event_config() const { |
184 DCHECK(protocol_ == Protocol::ICE); | 184 DCHECK(protocol_ == Protocol::ICE); |
185 return event_config_; | 185 return event_config_; |
186 } | 186 } |
(...skipping 24 matching lines...) Expand all Loading... |
211 IsChannelConfigSupported(audio_configs_, config.audio_config()); | 211 IsChannelConfigSupported(audio_configs_, config.audio_config()); |
212 | 212 |
213 case SessionConfig::Protocol::WEBRTC: | 213 case SessionConfig::Protocol::WEBRTC: |
214 return webrtc_supported(); | 214 return webrtc_supported(); |
215 } | 215 } |
216 | 216 |
217 NOTREACHED(); | 217 NOTREACHED(); |
218 return false; | 218 return false; |
219 } | 219 } |
220 | 220 |
221 scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::Clone() const { | 221 std::unique_ptr<CandidateSessionConfig> CandidateSessionConfig::Clone() const { |
222 return make_scoped_ptr(new CandidateSessionConfig(*this)); | 222 return base::WrapUnique(new CandidateSessionConfig(*this)); |
223 } | 223 } |
224 | 224 |
225 // static | 225 // static |
226 scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateEmpty() { | 226 std::unique_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateEmpty() { |
227 return make_scoped_ptr(new CandidateSessionConfig()); | 227 return base::WrapUnique(new CandidateSessionConfig()); |
228 } | 228 } |
229 | 229 |
230 // static | 230 // static |
231 scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateFrom( | 231 std::unique_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateFrom( |
232 const SessionConfig& config) { | 232 const SessionConfig& config) { |
233 scoped_ptr<CandidateSessionConfig> result = CreateEmpty(); | 233 std::unique_ptr<CandidateSessionConfig> result = CreateEmpty(); |
234 | 234 |
235 switch (config.protocol()) { | 235 switch (config.protocol()) { |
236 case SessionConfig::Protocol::WEBRTC: | 236 case SessionConfig::Protocol::WEBRTC: |
237 result->set_webrtc_supported(true); | 237 result->set_webrtc_supported(true); |
238 result->set_ice_supported(false); | 238 result->set_ice_supported(false); |
239 break; | 239 break; |
240 | 240 |
241 case SessionConfig::Protocol::ICE: | 241 case SessionConfig::Protocol::ICE: |
242 result->set_webrtc_supported(false); | 242 result->set_webrtc_supported(false); |
243 result->set_ice_supported(true); | 243 result->set_ice_supported(true); |
244 result->mutable_control_configs()->push_back(config.control_config()); | 244 result->mutable_control_configs()->push_back(config.control_config()); |
245 result->mutable_event_configs()->push_back(config.event_config()); | 245 result->mutable_event_configs()->push_back(config.event_config()); |
246 result->mutable_video_configs()->push_back(config.video_config()); | 246 result->mutable_video_configs()->push_back(config.video_config()); |
247 result->mutable_audio_configs()->push_back(config.audio_config()); | 247 result->mutable_audio_configs()->push_back(config.audio_config()); |
248 break; | 248 break; |
249 } | 249 } |
250 | 250 |
251 return result; | 251 return result; |
252 } | 252 } |
253 | 253 |
254 // static | 254 // static |
255 scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateDefault() { | 255 std::unique_ptr<CandidateSessionConfig> |
256 scoped_ptr<CandidateSessionConfig> result = CreateEmpty(); | 256 CandidateSessionConfig::CreateDefault() { |
| 257 std::unique_ptr<CandidateSessionConfig> result = CreateEmpty(); |
257 | 258 |
258 result->set_ice_supported(true); | 259 result->set_ice_supported(true); |
259 | 260 |
260 // Control channel. | 261 // Control channel. |
261 result->mutable_control_configs()->push_back( | 262 result->mutable_control_configs()->push_back( |
262 ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, | 263 ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, |
263 kControlStreamVersion, | 264 kControlStreamVersion, |
264 ChannelConfig::CODEC_UNDEFINED)); | 265 ChannelConfig::CODEC_UNDEFINED)); |
265 | 266 |
266 // Event channel. | 267 // Event channel. |
(...skipping 30 matching lines...) Expand all Loading... |
297 void CandidateSessionConfig::PreferTransport( | 298 void CandidateSessionConfig::PreferTransport( |
298 ChannelConfig::TransportType transport) { | 299 ChannelConfig::TransportType transport) { |
299 UpdateConfigListToPreferTransport(&control_configs_, transport); | 300 UpdateConfigListToPreferTransport(&control_configs_, transport); |
300 UpdateConfigListToPreferTransport(&event_configs_, transport); | 301 UpdateConfigListToPreferTransport(&event_configs_, transport); |
301 UpdateConfigListToPreferTransport(&video_configs_, transport); | 302 UpdateConfigListToPreferTransport(&video_configs_, transport); |
302 UpdateConfigListToPreferTransport(&audio_configs_, transport); | 303 UpdateConfigListToPreferTransport(&audio_configs_, transport); |
303 } | 304 } |
304 | 305 |
305 } // namespace protocol | 306 } // namespace protocol |
306 } // namespace remoting | 307 } // namespace remoting |
OLD | NEW |