Chromium Code Reviews| Index: net/quic/quic_connection_logger.cc |
| =================================================================== |
| --- net/quic/quic_connection_logger.cc (revision 250874) |
| +++ net/quic/quic_connection_logger.cc (working copy) |
| @@ -12,7 +12,10 @@ |
| #include "base/values.h" |
| #include "net/base/net_log.h" |
| #include "net/quic/crypto/crypto_handshake_message.h" |
| +#include "net/quic/crypto/crypto_protocol.h" |
| +#include "net/quic/quic_socket_address_coder.h" |
| +using base::StringPiece; |
| using std::string; |
| namespace net { |
| @@ -195,6 +198,71 @@ |
| num_consecutive_missing_packets); |
| } |
| +void UpdatePublicResetAddressMismatchHistogram( |
| + const IPEndPoint& server_hello_address, |
| + const IPEndPoint& public_reset_address) { |
| + enum { |
| + kAddressAndPortMatch_base = 0, |
| + kAddressAndPortMatch_v4_v4 = 0, |
|
wtc
2014/02/13 02:04:10
Is it correct for the histogram enumeration to sta
jar (doing other things)
2014/02/13 03:24:48
Perfectly correct.
|
| + kAddressAndPortMatch_v6_v6 = 1, |
| + kAddressAndPortMatch_v4_v6 = 2, |
| + kAddressAndPortMatch_v6_v4 = 3, |
| + |
| + // The addresses match, but the ports don't match. |
| + kPortMismatch_base = 4, |
| + kPortMismatch_v4_v4 = 4, |
| + kPortMismatch_v6_v6 = 5, |
| + kPortMismatch_v4_v6 = 6, |
| + kPortMismatch_v6_v4 = 7, |
| + |
| + // The addresses don't match. |
| + kAddressMismatch_base = 8, |
| + kAddressMismatch_v4_v4 = 8, |
| + kAddressMismatch_v6_v6 = 9, |
| + kAddressMismatch_v4_v6 = 10, |
| + kAddressMismatch_v6_v4 = 11, |
|
Ryan Hamilton
2014/02/13 04:44:05
An alternative to consider which might make the co
wtc
2014/02/14 00:53:57
Done. (Not in the way you suggested though.)
|
| + |
| + kBoundaryValue, |
| + }; |
| + |
| + // TODO(wtc): should we report these two cases? |
|
jar (doing other things)
2014/02/13 03:24:48
This is fine IMO. You are seemingly talking to an
wtc
2014/02/14 00:53:57
Done.
|
| + if (server_hello_address.address().empty() || |
| + public_reset_address.address().empty()) { |
| + return; |
| + } |
| + |
| + bool first_ipv4 = |
| + (server_hello_address.address().size() == kIPv4AddressSize); |
| + bool second_ipv4 = |
| + (public_reset_address.address().size() == kIPv4AddressSize); |
| + int offset; |
| + if (first_ipv4 == second_ipv4) { |
| + if (first_ipv4) { |
| + offset = 0; // v4_v4 |
| + } else { |
| + offset = 1; // v6_v6 |
| + } |
| + } else { |
| + if (first_ipv4) { |
| + offset = 2; // v4_v6 |
| + } else { |
| + offset = 3; // v6_v4 |
| + } |
| + } |
| + |
| + int sample; |
| + if (server_hello_address.address() != public_reset_address.address()) { |
| + sample = kAddressMismatch_base; |
| + } else if (server_hello_address.port() != public_reset_address.port()) { |
| + sample = kPortMismatch_base; |
| + } else { |
| + sample = kAddressAndPortMatch_base; |
| + } |
| + sample += offset; |
| + HISTOGRAM_ENUMERATION("Net.QuicSession.PublicResetAddressMismatch", |
|
wtc
2014/02/13 02:04:10
Is this histogram name OK? All the histograms in t
jar (doing other things)
2014/02/13 03:24:48
Critical is the "UMA" prefix, as otherwise the his
wtc
2014/02/14 00:53:57
Done.
|
| + sample, kBoundaryValue); |
| +} |
| + |
| } // namespace |
| QuicConnectionLogger::QuicConnectionLogger(const BoundNetLog& net_log) |
| @@ -393,6 +461,8 @@ |
| void QuicConnectionLogger::OnPublicResetPacket( |
| const QuicPublicResetPacket& packet) { |
| net_log_.AddEvent(NetLog::TYPE_QUIC_SESSION_PUBLIC_RESET_PACKET_RECEIVED); |
| + UpdatePublicResetAddressMismatchHistogram(client_address_, |
| + packet.client_address); |
| } |
| void QuicConnectionLogger::OnVersionNegotiationPacket( |
| @@ -415,6 +485,15 @@ |
| net_log_.AddEvent( |
| NetLog::TYPE_QUIC_SESSION_CRYPTO_HANDSHAKE_MESSAGE_RECEIVED, |
| base::Bind(&NetLogQuicCryptoHandshakeMessageCallback, &message)); |
| + |
| + if (message.tag() == kSHLO) { |
| + StringPiece address; |
| + QuicSocketAddressCoder decoder; |
| + if (message.GetStringPiece(kCADR, &address) && |
| + decoder.Decode(address.data(), address.size())) { |
| + client_address_ = IPEndPoint(decoder.ip(), decoder.port()); |
| + } |
| + } |
| } |
| void QuicConnectionLogger::OnCryptoHandshakeMessageSent( |