| Index: webrtc/pc/channelmanager.cc
|
| diff --git a/webrtc/pc/channelmanager.cc b/webrtc/pc/channelmanager.cc
|
| index c2ce1cc604e941360b8e56962e95ce809f429f18..06475e9eaa26f13ec0883a1c8e8654675cbf8e9e 100644
|
| --- a/webrtc/pc/channelmanager.cc
|
| +++ b/webrtc/pc/channelmanager.cc
|
| @@ -64,6 +64,7 @@ void ChannelManager::Construct(MediaEngineInterface* me,
|
| network_thread_ = network_thread;
|
| capturing_ = false;
|
| enable_rtx_ = false;
|
| + crypto_options_ = rtc::CryptoOptions::NoGcm();
|
| }
|
|
|
| ChannelManager::~ChannelManager() {
|
| @@ -97,6 +98,30 @@ bool ChannelManager::SetVideoRtxEnabled(bool enable) {
|
| }
|
| }
|
|
|
| +bool ChannelManager::SetCryptoOptions(
|
| + const rtc::CryptoOptions& crypto_options) {
|
| + return worker_thread_->Invoke<bool>(RTC_FROM_HERE, Bind(
|
| + &ChannelManager::SetCryptoOptions_w, this, crypto_options));
|
| +}
|
| +
|
| +bool ChannelManager::SetCryptoOptions_w(
|
| + const rtc::CryptoOptions& crypto_options) {
|
| + if (!video_channels_.empty() || !voice_channels_.empty() ||
|
| + !data_channels_.empty()) {
|
| + LOG(LS_WARNING) << "Not changing crypto options in existing channels.";
|
| + }
|
| + crypto_options_ = crypto_options;
|
| +#if defined(ENABLE_EXTERNAL_AUTH)
|
| + if (crypto_options_.enable_gcm_crypto_suites) {
|
| + // TODO(jbauch): Re-enable once https://crbug.com/628400 is resolved.
|
| + crypto_options_.enable_gcm_crypto_suites = false;
|
| + LOG(LS_WARNING) << "GCM ciphers are not supported with " <<
|
| + "ENABLE_EXTERNAL_AUTH and will be disabled.";
|
| + }
|
| +#endif
|
| + return true;
|
| +}
|
| +
|
| void ChannelManager::GetSupportedAudioSendCodecs(
|
| std::vector<AudioCodec>* codecs) const {
|
| *codecs = media_engine_->audio_send_codecs();
|
| @@ -218,6 +243,7 @@ VoiceChannel* ChannelManager::CreateVoiceChannel_w(
|
| VoiceChannel* voice_channel =
|
| new VoiceChannel(worker_thread_, network_thread_, media_engine_.get(),
|
| media_channel, transport_controller, content_name, rtcp);
|
| + voice_channel->SetCryptoOptions(crypto_options_);
|
| if (!voice_channel->Init_w(bundle_transport_name)) {
|
| delete voice_channel;
|
| return nullptr;
|
| @@ -281,6 +307,7 @@ VideoChannel* ChannelManager::CreateVideoChannel_w(
|
| VideoChannel* video_channel =
|
| new VideoChannel(worker_thread_, network_thread_, media_channel,
|
| transport_controller, content_name, rtcp);
|
| + video_channel->SetCryptoOptions(crypto_options_);
|
| if (!video_channel->Init_w(bundle_transport_name)) {
|
| delete video_channel;
|
| return NULL;
|
| @@ -344,6 +371,7 @@ DataChannel* ChannelManager::CreateDataChannel_w(
|
| DataChannel* data_channel =
|
| new DataChannel(worker_thread_, network_thread_, media_channel,
|
| transport_controller, content_name, rtcp);
|
| + data_channel->SetCryptoOptions(crypto_options_);
|
| if (!data_channel->Init_w(bundle_transport_name)) {
|
| LOG(LS_WARNING) << "Failed to init data channel.";
|
| delete data_channel;
|
|
|