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

Unified Diff: net/quic/crypto/quic_crypto_client_config.cc

Issue 342863005: QUIC - Record reject reasons for CHLO message. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: mapping table for handshake failure to a shifted number Created 6 years, 6 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 | « net/quic/crypto/quic_crypto_client_config.h ('k') | net/quic/crypto/quic_crypto_client_config_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/crypto/quic_crypto_client_config.cc
diff --git a/net/quic/crypto/quic_crypto_client_config.cc b/net/quic/crypto/quic_crypto_client_config.cc
index b37befea03e661e50600e9ec3b5b2136cac00d8d..f81310c1c739704ac29d410ac4e7d80eaeea58de 100644
--- a/net/quic/crypto/quic_crypto_client_config.cc
+++ b/net/quic/crypto/quic_crypto_client_config.cc
@@ -4,6 +4,7 @@
#include "net/quic/crypto/quic_crypto_client_config.h"
+#include "base/metrics/sparse_histogram.h"
#include "base/stl_util.h"
#include "base/strings/string_util.h"
#include "net/quic/crypto/cert_compressor.h"
@@ -592,16 +593,79 @@ QuicErrorCode QuicCryptoClientConfig::ProcessRejection(
COMPILE_ASSERT(sizeof(QuicTag) == sizeof(uint32), header_out_of_sync);
if (rej.GetTaglist(kRREJ, &reject_reasons,
&num_reject_reasons) == QUIC_NO_ERROR) {
-#if defined(DEBUG)
+ uint32 packed_error = 0;
for (size_t i = 0; i < num_reject_reasons; ++i) {
- DVLOG(1) << "Reasons for rejection: " << reject_reasons[i];
+ HandshakeFailureReason reason =
+ static_cast<HandshakeFailureReason>(reject_reasons[i]);
+ packed_error |= RejectReasonToPackedError(reason);
}
-#endif
+ UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicClientHelloRejectReasons",
+ packed_error);
}
return QUIC_NO_ERROR;
}
+uint32 QuicCryptoClientConfig::RejectReasonToPackedError(
+ HandshakeFailureReason reason) {
+ enum RejectReasonShifted {
+ HANDSHAKE_OK_SHIFTED = 0,
+
+ CLIENT_NONCE_UNKNOWN_FAILURE_SHIFTED = 1u << 5,
+ CLIENT_NONCE_INVALID_FAILURE_SHIFTED = 2u << 5,
+
+ SERVER_NONCE_INVALID_FAILURE_SHIFTED = 1u << 10,
+ SERVER_NONCE_DECRYPTION_FAILURE_SHIFTED = 2u << 10,
+ SERVER_NONCE_NOT_UNIQUE_FAILURE_SHIFTED = 3u << 10,
+
+ SERVER_CONFIG_INCHOATE_HELLO_FAILURE_SHIFTED = 1u << 15,
+ SERVER_CONFIG_UNKNOWN_CONFIG_FAILURE_SHIFTED = 2u << 15,
+
+ SOURCE_ADDRESS_TOKEN_INVALID_FAILURE_SHIFTED = 1u << 20,
+ SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE_SHIFTED = 2u << 20,
+ SOURCE_ADDRESS_TOKEN_PARSE_FAILURE_SHIFTED = 3u << 20,
+ SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE_SHIFTED = 4u << 20,
+ SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE_SHIFTED = 5u << 20,
+ SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE_SHIFTED = 6u << 20,
+
+ UNKNOWN_REJECT_REASON_SHIFTED = 1u << 31,
+ };
+
+ switch (reason) {
+ case HANDSHAKE_OK:
+ return HANDSHAKE_OK_SHIFTED;
Ryan Hamilton 2014/06/23 23:09:43 As discussed offline, might as well just make the
ramant (doing other things) 2014/06/23 23:14:17 Done.
+ case CLIENT_NONCE_UNKNOWN_FAILURE:
+ return CLIENT_NONCE_UNKNOWN_FAILURE_SHIFTED;
+ case CLIENT_NONCE_INVALID_FAILURE:
+ return CLIENT_NONCE_INVALID_FAILURE_SHIFTED;
+ case SERVER_NONCE_INVALID_FAILURE:
+ return SERVER_NONCE_INVALID_FAILURE_SHIFTED;
+ case SERVER_NONCE_DECRYPTION_FAILURE:
+ return SERVER_NONCE_DECRYPTION_FAILURE_SHIFTED;
+ case SERVER_NONCE_NOT_UNIQUE_FAILURE:
+ return SERVER_NONCE_NOT_UNIQUE_FAILURE_SHIFTED;
+ case SERVER_CONFIG_INCHOATE_HELLO_FAILURE:
+ return SERVER_CONFIG_INCHOATE_HELLO_FAILURE_SHIFTED;
+ case SERVER_CONFIG_UNKNOWN_CONFIG_FAILURE:
+ return SERVER_CONFIG_UNKNOWN_CONFIG_FAILURE_SHIFTED;
+ case SOURCE_ADDRESS_TOKEN_INVALID_FAILURE:
+ return SOURCE_ADDRESS_TOKEN_INVALID_FAILURE_SHIFTED;
+ case SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE:
+ return SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE_SHIFTED;
+ case SOURCE_ADDRESS_TOKEN_PARSE_FAILURE:
+ return SOURCE_ADDRESS_TOKEN_PARSE_FAILURE_SHIFTED;
+ case SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE:
+ return SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE_SHIFTED;
+ case SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE:
+ return SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE_SHIFTED;
+ case SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE:
+ return SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE_SHIFTED;
+ default:
+ NOTREACHED();
+ return UNKNOWN_REJECT_REASON_SHIFTED;
+ }
+}
+
QuicErrorCode QuicCryptoClientConfig::ProcessServerHello(
const CryptoHandshakeMessage& server_hello,
QuicConnectionId connection_id,
« no previous file with comments | « net/quic/crypto/quic_crypto_client_config.h ('k') | net/quic/crypto/quic_crypto_client_config_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698