OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 DataEngineInterface* dme, | 59 DataEngineInterface* dme, |
60 rtc::Thread* worker_thread) { | 60 rtc::Thread* worker_thread) { |
61 media_engine_.reset(me); | 61 media_engine_.reset(me); |
62 data_media_engine_.reset(dme); | 62 data_media_engine_.reset(dme); |
63 initialized_ = false; | 63 initialized_ = false; |
64 main_thread_ = rtc::Thread::Current(); | 64 main_thread_ = rtc::Thread::Current(); |
65 worker_thread_ = worker_thread; | 65 worker_thread_ = worker_thread; |
66 audio_output_volume_ = kNotSetOutputVolume; | 66 audio_output_volume_ = kNotSetOutputVolume; |
67 capturing_ = false; | 67 capturing_ = false; |
68 enable_rtx_ = false; | 68 enable_rtx_ = false; |
| 69 crypto_options_ = rtc::CryptoOptions::NoGcm(); |
69 } | 70 } |
70 | 71 |
71 ChannelManager::~ChannelManager() { | 72 ChannelManager::~ChannelManager() { |
72 if (initialized_) { | 73 if (initialized_) { |
73 Terminate(); | 74 Terminate(); |
74 // If srtp is initialized (done by the Channel) then we must call | 75 // If srtp is initialized (done by the Channel) then we must call |
75 // srtp_shutdown to free all crypto kernel lists. But we need to make sure | 76 // srtp_shutdown to free all crypto kernel lists. But we need to make sure |
76 // shutdown always called at the end, after channels are destroyed. | 77 // shutdown always called at the end, after channels are destroyed. |
77 // ChannelManager d'tor is always called last, it's safe place to call | 78 // ChannelManager d'tor is always called last, it's safe place to call |
78 // shutdown. | 79 // shutdown. |
(...skipping 13 matching lines...) Expand all Loading... |
92 // app. | 93 // app. |
93 if (!initialized_) { | 94 if (!initialized_) { |
94 enable_rtx_ = enable; | 95 enable_rtx_ = enable; |
95 return true; | 96 return true; |
96 } else { | 97 } else { |
97 LOG(LS_WARNING) << "Cannot toggle rtx after initialization!"; | 98 LOG(LS_WARNING) << "Cannot toggle rtx after initialization!"; |
98 return false; | 99 return false; |
99 } | 100 } |
100 } | 101 } |
101 | 102 |
| 103 bool ChannelManager::SetCryptoOptions( |
| 104 const rtc::CryptoOptions& crypto_options) { |
| 105 return worker_thread_->Invoke<bool>(Bind( |
| 106 &ChannelManager::SetCryptoOptions_w, this, crypto_options)); |
| 107 } |
| 108 |
| 109 bool ChannelManager::SetCryptoOptions_w( |
| 110 const rtc::CryptoOptions& crypto_options) { |
| 111 if (!video_channels_.empty() || !voice_channels_.empty() || |
| 112 !data_channels_.empty()) { |
| 113 LOG(LS_WARNING) << "Not changing crypto options in existing channels."; |
| 114 } |
| 115 crypto_options_ = crypto_options; |
| 116 return true; |
| 117 } |
| 118 |
102 void ChannelManager::GetSupportedAudioCodecs( | 119 void ChannelManager::GetSupportedAudioCodecs( |
103 std::vector<AudioCodec>* codecs) const { | 120 std::vector<AudioCodec>* codecs) const { |
104 codecs->clear(); | 121 codecs->clear(); |
105 | 122 |
106 for (std::vector<AudioCodec>::const_iterator it = | 123 for (std::vector<AudioCodec>::const_iterator it = |
107 media_engine_->audio_codecs().begin(); | 124 media_engine_->audio_codecs().begin(); |
108 it != media_engine_->audio_codecs().end(); ++it) { | 125 it != media_engine_->audio_codecs().end(); ++it) { |
109 codecs->push_back(*it); | 126 codecs->push_back(*it); |
110 } | 127 } |
111 } | 128 } |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 ASSERT(worker_thread_ == rtc::Thread::Current()); | 240 ASSERT(worker_thread_ == rtc::Thread::Current()); |
224 ASSERT(nullptr != media_controller); | 241 ASSERT(nullptr != media_controller); |
225 VoiceMediaChannel* media_channel = media_engine_->CreateChannel( | 242 VoiceMediaChannel* media_channel = media_engine_->CreateChannel( |
226 media_controller->call_w(), media_controller->config(), options); | 243 media_controller->call_w(), media_controller->config(), options); |
227 if (!media_channel) | 244 if (!media_channel) |
228 return nullptr; | 245 return nullptr; |
229 | 246 |
230 VoiceChannel* voice_channel = | 247 VoiceChannel* voice_channel = |
231 new VoiceChannel(worker_thread_, media_engine_.get(), media_channel, | 248 new VoiceChannel(worker_thread_, media_engine_.get(), media_channel, |
232 transport_controller, content_name, rtcp); | 249 transport_controller, content_name, rtcp); |
| 250 voice_channel->SetCryptoOptions(crypto_options_); |
233 if (!voice_channel->Init()) { | 251 if (!voice_channel->Init()) { |
234 delete voice_channel; | 252 delete voice_channel; |
235 return nullptr; | 253 return nullptr; |
236 } | 254 } |
237 voice_channels_.push_back(voice_channel); | 255 voice_channels_.push_back(voice_channel); |
238 return voice_channel; | 256 return voice_channel; |
239 } | 257 } |
240 | 258 |
241 void ChannelManager::DestroyVoiceChannel(VoiceChannel* voice_channel) { | 259 void ChannelManager::DestroyVoiceChannel(VoiceChannel* voice_channel) { |
242 TRACE_EVENT0("webrtc", "ChannelManager::DestroyVoiceChannel"); | 260 TRACE_EVENT0("webrtc", "ChannelManager::DestroyVoiceChannel"); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 ASSERT(worker_thread_ == rtc::Thread::Current()); | 299 ASSERT(worker_thread_ == rtc::Thread::Current()); |
282 ASSERT(nullptr != media_controller); | 300 ASSERT(nullptr != media_controller); |
283 VideoMediaChannel* media_channel = media_engine_->CreateVideoChannel( | 301 VideoMediaChannel* media_channel = media_engine_->CreateVideoChannel( |
284 media_controller->call_w(), media_controller->config(), options); | 302 media_controller->call_w(), media_controller->config(), options); |
285 if (media_channel == NULL) { | 303 if (media_channel == NULL) { |
286 return NULL; | 304 return NULL; |
287 } | 305 } |
288 | 306 |
289 VideoChannel* video_channel = new VideoChannel( | 307 VideoChannel* video_channel = new VideoChannel( |
290 worker_thread_, media_channel, transport_controller, content_name, rtcp); | 308 worker_thread_, media_channel, transport_controller, content_name, rtcp); |
| 309 video_channel->SetCryptoOptions(crypto_options_); |
291 if (!video_channel->Init()) { | 310 if (!video_channel->Init()) { |
292 delete video_channel; | 311 delete video_channel; |
293 return NULL; | 312 return NULL; |
294 } | 313 } |
295 video_channels_.push_back(video_channel); | 314 video_channels_.push_back(video_channel); |
296 return video_channel; | 315 return video_channel; |
297 } | 316 } |
298 | 317 |
299 void ChannelManager::DestroyVideoChannel(VideoChannel* video_channel) { | 318 void ChannelManager::DestroyVideoChannel(VideoChannel* video_channel) { |
300 TRACE_EVENT0("webrtc", "ChannelManager::DestroyVideoChannel"); | 319 TRACE_EVENT0("webrtc", "ChannelManager::DestroyVideoChannel"); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 DataMediaChannel* media_channel = data_media_engine_->CreateChannel( | 358 DataMediaChannel* media_channel = data_media_engine_->CreateChannel( |
340 data_channel_type); | 359 data_channel_type); |
341 if (!media_channel) { | 360 if (!media_channel) { |
342 LOG(LS_WARNING) << "Failed to create data channel of type " | 361 LOG(LS_WARNING) << "Failed to create data channel of type " |
343 << data_channel_type; | 362 << data_channel_type; |
344 return NULL; | 363 return NULL; |
345 } | 364 } |
346 | 365 |
347 DataChannel* data_channel = new DataChannel( | 366 DataChannel* data_channel = new DataChannel( |
348 worker_thread_, media_channel, transport_controller, content_name, rtcp); | 367 worker_thread_, media_channel, transport_controller, content_name, rtcp); |
| 368 data_channel->SetCryptoOptions(crypto_options_); |
349 if (!data_channel->Init()) { | 369 if (!data_channel->Init()) { |
350 LOG(LS_WARNING) << "Failed to init data channel."; | 370 LOG(LS_WARNING) << "Failed to init data channel."; |
351 delete data_channel; | 371 delete data_channel; |
352 return NULL; | 372 return NULL; |
353 } | 373 } |
354 data_channels_.push_back(data_channel); | 374 data_channels_.push_back(data_channel); |
355 return data_channel; | 375 return data_channel; |
356 } | 376 } |
357 | 377 |
358 void ChannelManager::DestroyDataChannel(DataChannel* data_channel) { | 378 void ChannelManager::DestroyDataChannel(DataChannel* data_channel) { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 return worker_thread_->Invoke<bool>( | 437 return worker_thread_->Invoke<bool>( |
418 Bind(&MediaEngineInterface::StartRtcEventLog, media_engine_.get(), file)); | 438 Bind(&MediaEngineInterface::StartRtcEventLog, media_engine_.get(), file)); |
419 } | 439 } |
420 | 440 |
421 void ChannelManager::StopRtcEventLog() { | 441 void ChannelManager::StopRtcEventLog() { |
422 worker_thread_->Invoke<void>( | 442 worker_thread_->Invoke<void>( |
423 Bind(&MediaEngineInterface::StopRtcEventLog, media_engine_.get())); | 443 Bind(&MediaEngineInterface::StopRtcEventLog, media_engine_.get())); |
424 } | 444 } |
425 | 445 |
426 } // namespace cricket | 446 } // namespace cricket |
OLD | NEW |