Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: webrtc/pc/channelmanager.cc

Issue 1528843005: Add support for GCM cipher suites from RFC 7714. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Disable GCM if ENABLE_EXTERNAL_AUTH is defined. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/pc/channelmanager.h ('k') | webrtc/pc/mediasession.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « webrtc/pc/channelmanager.h ('k') | webrtc/pc/mediasession.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698