Index: webrtc/pc/channelmanager.cc |
diff --git a/webrtc/pc/channelmanager.cc b/webrtc/pc/channelmanager.cc |
index c2ce1cc604e941360b8e56962e95ce809f429f18..6f49a33b7862e2ad192c021d25fcfb5f4c3dc831 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,22 @@ 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; |
+ return true; |
+} |
+ |
void ChannelManager::GetSupportedAudioSendCodecs( |
std::vector<AudioCodec>* codecs) const { |
*codecs = media_engine_->audio_send_codecs(); |
@@ -218,6 +235,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 +299,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 +363,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; |