Index: content/renderer/media/rtc_peer_connection_handler.cc |
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc |
index 9c50906e3da92bdc7f2f1c1453b6b17860d07e04..81bd46e21f10b76890fee5c9c280f9bb2b1d234e 100644 |
--- a/content/renderer/media/rtc_peer_connection_handler.cc |
+++ b/content/renderer/media/rtc_peer_connection_handler.cc |
@@ -14,6 +14,7 @@ |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/metrics/histogram.h" |
+#include "base/metrics/sparse_histogram.h" |
#include "base/stl_util.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/thread_task_runner_handle.h" |
@@ -31,6 +32,7 @@ |
#include "content/renderer/media/webrtc_audio_device_impl.h" |
#include "content/renderer/media/webrtc_uma_histograms.h" |
#include "content/renderer/render_thread_impl.h" |
+#include "net/third_party/nss/ssl/sslproto.h" |
Ryan Sleevi
2015/09/22 21:21:10
BUG: You should not be directly including NSS head
|
#include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
#include "third_party/WebKit/public/platform/WebRTCConfiguration.h" |
#include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" |
@@ -62,6 +64,69 @@ enum RtcpMux { |
RTCP_MUX_MAX |
}; |
+#define SSLCIPHER_ENTRY(cipher) \ |
+ { webrtc::SslCipherType_##cipher, cipher } |
+ |
+uint16 ConvertWebRtcSslCipherToStandard(int cipher) { |
+ static struct { |
+ webrtc::SslCipherType webrtc_cipher; |
+ uint16 cipher; |
+ } kWebRtcSslCipherMapping[] = { |
+ // TLS v1.0 ciphersuites from RFC2246. |
+ {webrtc::SslCipherType_TLS_RSA_RC4_128_SHA, TLS_RSA_WITH_RC4_128_SHA}, |
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_3DES_EDE_CBC_SHA), |
+ |
+ // AES ciphersuites from RFC3268. |
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_CBC_SHA), |
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_CBC_SHA), |
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_CBC_SHA), |
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_CBC_SHA), |
+ |
+ // ECC ciphersuites from RFC4492. |
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_RC4_128_SHA), |
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA), |
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA), |
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA), |
+ |
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_RC4_128_SHA), |
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA), |
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA), |
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA), |
+ |
+ // TLS v1.2 ciphersuites. |
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_CBC_SHA256), |
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_CBC_SHA256), |
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256), |
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256), |
+ |
+ // TLS v1.2 GCM ciphersuites from RFC5288. |
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_GCM_SHA256), |
+ // SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_GCM_SHA384), |
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256), |
+ // SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384), |
+ // SSLCIPHER_ENTRY(TLS_DH_RSA_WITH_AES_128_GCM_SHA256), |
+ // SSLCIPHER_ENTRY(TLS_DH_RSA_WITH_AES_256_GCM_SHA384), |
+ |
+ // ECDH HMAC based ciphersuites from RFC5289. |
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256), |
+ // SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384), |
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256), |
+ // SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384), |
+ |
+ // ECDH GCM based ciphersuites from RFC5289. |
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256), |
+ // SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384), |
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256), |
+ // SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384), |
+ }; |
+ |
+ for (auto c : kWebRtcSslCipherMapping) { |
+ if (c.webrtc_cipher == cipher) |
+ return c.cipher; |
+ } |
Ryan Sleevi
2015/09/22 21:21:10
This is very inefficient for what it does - given
davidben
2015/09/22 21:29:46
+1 to that. TLS already provides standard well-kno
|
+ return 0; |
+} |
+ |
// Converter functions from libjingle types to WebKit types. |
blink::WebRTCPeerConnectionHandlerClient::ICEGatheringState |
GetWebKitIceGatheringState( |
@@ -531,8 +596,31 @@ class PeerConnectionUMAObserver : public webrtc::UMAObserver { |
UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_TCP", |
counter, counter_max); |
break; |
+ case webrtc::kEnumCounterAudioSrtpCipher: |
+ UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Audio.Srtp", |
+ counter, counter_max); |
+ break; |
+ case webrtc::kEnumCounterAudioSslCipher: |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Audio.Ssl", |
+ ConvertWebRtcSslCipherToStandard(counter)); |
+ break; |
+ case webrtc::kEnumCounterVideoSrtpCipher: |
+ UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Video.Srtp", |
+ counter, counter_max); |
+ break; |
+ case webrtc::kEnumCounterVideoSslCipher: |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Video.Ssl", |
+ ConvertWebRtcSslCipherToStandard(counter)); |
+ break; |
+ case webrtc::kEnumCounterDataSrtpCipher: |
+ UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Data.Srtp", |
+ counter, counter_max); |
+ break; |
+ case webrtc::kEnumCounterDataSslCipher: |
+ UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Data.Ssl", |
+ ConvertWebRtcSslCipherToStandard(counter)); |
+ break; |
default: |
- NOTREACHED(); |
break; |
} |
} |