1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "net/quic/quic_event_logger.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include "base/containers/span.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_number_conversions.h"
9*6777b538SAndroid Build Coastguard Worker #include "net/cert/x509_certificate.h"
10*6777b538SAndroid Build Coastguard Worker #include "net/log/net_log_values.h"
11*6777b538SAndroid Build Coastguard Worker #include "net/quic/address_utils.h"
12*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/quic_socket_address_coder.h"
13*6777b538SAndroid Build Coastguard Worker #include "third_party/boringssl/src/include/openssl/ssl.h"
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker namespace net {
16*6777b538SAndroid Build Coastguard Worker
17*6777b538SAndroid Build Coastguard Worker namespace {
18*6777b538SAndroid Build Coastguard Worker
NetLogQuicPacketParams(const quic::QuicSocketAddress & self_address,const quic::QuicSocketAddress & peer_address,size_t packet_size)19*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicPacketParams(
20*6777b538SAndroid Build Coastguard Worker const quic::QuicSocketAddress& self_address,
21*6777b538SAndroid Build Coastguard Worker const quic::QuicSocketAddress& peer_address,
22*6777b538SAndroid Build Coastguard Worker size_t packet_size) {
23*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
24*6777b538SAndroid Build Coastguard Worker .Set("self_address", self_address.ToString())
25*6777b538SAndroid Build Coastguard Worker .Set("peer_address", peer_address.ToString())
26*6777b538SAndroid Build Coastguard Worker .Set("size", static_cast<int>(packet_size));
27*6777b538SAndroid Build Coastguard Worker }
28*6777b538SAndroid Build Coastguard Worker
NetLogQuicPacketSentParams(quic::QuicPacketNumber packet_number,quic::QuicPacketLength packet_length,quic::TransmissionType transmission_type,quic::EncryptionLevel encryption_level,quic::QuicTime sent_time,uint32_t batch_id)29*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicPacketSentParams(
30*6777b538SAndroid Build Coastguard Worker quic::QuicPacketNumber packet_number,
31*6777b538SAndroid Build Coastguard Worker quic::QuicPacketLength packet_length,
32*6777b538SAndroid Build Coastguard Worker quic::TransmissionType transmission_type,
33*6777b538SAndroid Build Coastguard Worker quic::EncryptionLevel encryption_level,
34*6777b538SAndroid Build Coastguard Worker quic::QuicTime sent_time,
35*6777b538SAndroid Build Coastguard Worker uint32_t batch_id) {
36*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
37*6777b538SAndroid Build Coastguard Worker .Set("transmission_type",
38*6777b538SAndroid Build Coastguard Worker quic::TransmissionTypeToString(transmission_type))
39*6777b538SAndroid Build Coastguard Worker .Set("packet_number", NetLogNumberValue(packet_number.ToUint64()))
40*6777b538SAndroid Build Coastguard Worker .Set("size", packet_length)
41*6777b538SAndroid Build Coastguard Worker .Set("sent_time_us", NetLogNumberValue(sent_time.ToDebuggingValue()))
42*6777b538SAndroid Build Coastguard Worker .Set("encryption_level", quic::EncryptionLevelToString(encryption_level))
43*6777b538SAndroid Build Coastguard Worker .Set("batch_id", NetLogNumberValue(batch_id));
44*6777b538SAndroid Build Coastguard Worker }
45*6777b538SAndroid Build Coastguard Worker
NetLogQuicPacketLostParams(quic::QuicPacketNumber packet_number,quic::TransmissionType transmission_type,quic::QuicTime detection_time)46*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicPacketLostParams(
47*6777b538SAndroid Build Coastguard Worker quic::QuicPacketNumber packet_number,
48*6777b538SAndroid Build Coastguard Worker quic::TransmissionType transmission_type,
49*6777b538SAndroid Build Coastguard Worker quic::QuicTime detection_time) {
50*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
51*6777b538SAndroid Build Coastguard Worker .Set("transmission_type",
52*6777b538SAndroid Build Coastguard Worker quic::TransmissionTypeToString(transmission_type))
53*6777b538SAndroid Build Coastguard Worker .Set("packet_number", NetLogNumberValue(packet_number.ToUint64()))
54*6777b538SAndroid Build Coastguard Worker .Set("detection_time_us",
55*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(detection_time.ToDebuggingValue()));
56*6777b538SAndroid Build Coastguard Worker }
57*6777b538SAndroid Build Coastguard Worker
NetLogQuicConfigProcessed(const quic::QuicSentPacketManager::DebugDelegate::SendParameters & parameters)58*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicConfigProcessed(
59*6777b538SAndroid Build Coastguard Worker const quic::QuicSentPacketManager::DebugDelegate::SendParameters&
60*6777b538SAndroid Build Coastguard Worker parameters) {
61*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
62*6777b538SAndroid Build Coastguard Worker .Set("congestion_control_type", quic::CongestionControlTypeToString(
63*6777b538SAndroid Build Coastguard Worker parameters.congestion_control_type))
64*6777b538SAndroid Build Coastguard Worker .Set("use_pacing", parameters.use_pacing)
65*6777b538SAndroid Build Coastguard Worker .Set("initial_congestion_window",
66*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(parameters.initial_congestion_window));
67*6777b538SAndroid Build Coastguard Worker }
68*6777b538SAndroid Build Coastguard Worker
NetLogQuicDuplicatePacketParams(quic::QuicPacketNumber packet_number)69*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicDuplicatePacketParams(
70*6777b538SAndroid Build Coastguard Worker quic::QuicPacketNumber packet_number) {
71*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set("packet_number",
72*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(packet_number.ToUint64()));
73*6777b538SAndroid Build Coastguard Worker }
74*6777b538SAndroid Build Coastguard Worker
NetLogReceivedQuicPacketHeaderParams(const quic::QuicPacketHeader & header,const quic::ParsedQuicVersion & session_version,const quic::QuicConnectionId & connection_id,const quic::QuicConnectionId & client_connection_id)75*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogReceivedQuicPacketHeaderParams(
76*6777b538SAndroid Build Coastguard Worker const quic::QuicPacketHeader& header,
77*6777b538SAndroid Build Coastguard Worker const quic::ParsedQuicVersion& session_version,
78*6777b538SAndroid Build Coastguard Worker const quic::QuicConnectionId& connection_id,
79*6777b538SAndroid Build Coastguard Worker const quic::QuicConnectionId& client_connection_id) {
80*6777b538SAndroid Build Coastguard Worker base::Value::Dict dict;
81*6777b538SAndroid Build Coastguard Worker quic::ParsedQuicVersion version = session_version;
82*6777b538SAndroid Build Coastguard Worker if (header.version_flag &&
83*6777b538SAndroid Build Coastguard Worker header.version != quic::ParsedQuicVersion::Unsupported()) {
84*6777b538SAndroid Build Coastguard Worker version = header.version;
85*6777b538SAndroid Build Coastguard Worker if (version != session_version) {
86*6777b538SAndroid Build Coastguard Worker dict.Set("version", quic::ParsedQuicVersionToString(version));
87*6777b538SAndroid Build Coastguard Worker }
88*6777b538SAndroid Build Coastguard Worker }
89*6777b538SAndroid Build Coastguard Worker dict.Set("connection_id", connection_id.ToString());
90*6777b538SAndroid Build Coastguard Worker if (!client_connection_id.IsEmpty()) {
91*6777b538SAndroid Build Coastguard Worker dict.Set("client_connection_id", client_connection_id.ToString());
92*6777b538SAndroid Build Coastguard Worker }
93*6777b538SAndroid Build Coastguard Worker if (header.destination_connection_id_included ==
94*6777b538SAndroid Build Coastguard Worker quic::CONNECTION_ID_PRESENT &&
95*6777b538SAndroid Build Coastguard Worker header.destination_connection_id != client_connection_id &&
96*6777b538SAndroid Build Coastguard Worker !header.destination_connection_id.IsEmpty()) {
97*6777b538SAndroid Build Coastguard Worker dict.Set("destination_connection_id",
98*6777b538SAndroid Build Coastguard Worker header.destination_connection_id.ToString());
99*6777b538SAndroid Build Coastguard Worker }
100*6777b538SAndroid Build Coastguard Worker if (header.source_connection_id_included == quic::CONNECTION_ID_PRESENT &&
101*6777b538SAndroid Build Coastguard Worker header.source_connection_id != connection_id &&
102*6777b538SAndroid Build Coastguard Worker !header.source_connection_id.IsEmpty()) {
103*6777b538SAndroid Build Coastguard Worker dict.Set("source_connection_id", header.source_connection_id.ToString());
104*6777b538SAndroid Build Coastguard Worker }
105*6777b538SAndroid Build Coastguard Worker dict.Set("packet_number", NetLogNumberValue(header.packet_number.ToUint64()));
106*6777b538SAndroid Build Coastguard Worker dict.Set("header_format", quic::PacketHeaderFormatToString(header.form));
107*6777b538SAndroid Build Coastguard Worker if (header.form == quic::IETF_QUIC_LONG_HEADER_PACKET) {
108*6777b538SAndroid Build Coastguard Worker dict.Set("long_header_type",
109*6777b538SAndroid Build Coastguard Worker quic::QuicLongHeaderTypeToString(header.long_packet_type));
110*6777b538SAndroid Build Coastguard Worker }
111*6777b538SAndroid Build Coastguard Worker return dict;
112*6777b538SAndroid Build Coastguard Worker }
113*6777b538SAndroid Build Coastguard Worker
NetLogQuicStreamFrameParams(const quic::QuicStreamFrame & frame)114*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicStreamFrameParams(
115*6777b538SAndroid Build Coastguard Worker const quic::QuicStreamFrame& frame) {
116*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
117*6777b538SAndroid Build Coastguard Worker .Set("stream_id", static_cast<int>(frame.stream_id))
118*6777b538SAndroid Build Coastguard Worker .Set("fin", frame.fin)
119*6777b538SAndroid Build Coastguard Worker .Set("offset", NetLogNumberValue(frame.offset))
120*6777b538SAndroid Build Coastguard Worker .Set("length", frame.data_length);
121*6777b538SAndroid Build Coastguard Worker }
122*6777b538SAndroid Build Coastguard Worker
NetLogQuicAckFrameParams(const quic::QuicAckFrame * frame)123*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicAckFrameParams(const quic::QuicAckFrame* frame) {
124*6777b538SAndroid Build Coastguard Worker base::Value::List missing;
125*6777b538SAndroid Build Coastguard Worker quic::QuicPacketNumber smallest_observed;
126*6777b538SAndroid Build Coastguard Worker if (!frame->packets.Empty()) {
127*6777b538SAndroid Build Coastguard Worker // V34 and above express acked packets, but only print
128*6777b538SAndroid Build Coastguard Worker // missing packets, because it's typically a shorter list.
129*6777b538SAndroid Build Coastguard Worker smallest_observed = frame->packets.Min();
130*6777b538SAndroid Build Coastguard Worker for (quic::QuicPacketNumber packet = smallest_observed;
131*6777b538SAndroid Build Coastguard Worker packet < frame->largest_acked; ++packet) {
132*6777b538SAndroid Build Coastguard Worker if (!frame->packets.Contains(packet)) {
133*6777b538SAndroid Build Coastguard Worker missing.Append(NetLogNumberValue(packet.ToUint64()));
134*6777b538SAndroid Build Coastguard Worker }
135*6777b538SAndroid Build Coastguard Worker }
136*6777b538SAndroid Build Coastguard Worker } else {
137*6777b538SAndroid Build Coastguard Worker smallest_observed = frame->largest_acked;
138*6777b538SAndroid Build Coastguard Worker }
139*6777b538SAndroid Build Coastguard Worker
140*6777b538SAndroid Build Coastguard Worker base::Value::List received;
141*6777b538SAndroid Build Coastguard Worker for (const auto& packet_time : frame->received_packet_times) {
142*6777b538SAndroid Build Coastguard Worker received.Append(
143*6777b538SAndroid Build Coastguard Worker base::Value::Dict()
144*6777b538SAndroid Build Coastguard Worker .Set("packet_number",
145*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(packet_time.first.ToUint64()))
146*6777b538SAndroid Build Coastguard Worker .Set("received",
147*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(packet_time.second.ToDebuggingValue())));
148*6777b538SAndroid Build Coastguard Worker }
149*6777b538SAndroid Build Coastguard Worker
150*6777b538SAndroid Build Coastguard Worker base::Value::Dict rv;
151*6777b538SAndroid Build Coastguard Worker rv.Set("largest_observed",
152*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(frame->largest_acked.ToUint64()));
153*6777b538SAndroid Build Coastguard Worker rv.Set("delta_time_largest_observed_us",
154*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(frame->ack_delay_time.ToMicroseconds()));
155*6777b538SAndroid Build Coastguard Worker rv.Set("smallest_observed", NetLogNumberValue(smallest_observed.ToUint64()));
156*6777b538SAndroid Build Coastguard Worker rv.Set("missing_packets", std::move(missing));
157*6777b538SAndroid Build Coastguard Worker rv.Set("received_packet_times", std::move(received));
158*6777b538SAndroid Build Coastguard Worker if (frame->ecn_counters.has_value()) {
159*6777b538SAndroid Build Coastguard Worker rv.Set("ECT0", NetLogNumberValue(frame->ecn_counters->ect0));
160*6777b538SAndroid Build Coastguard Worker rv.Set("ECT1", NetLogNumberValue(frame->ecn_counters->ect1));
161*6777b538SAndroid Build Coastguard Worker rv.Set("CE", NetLogNumberValue(frame->ecn_counters->ce));
162*6777b538SAndroid Build Coastguard Worker }
163*6777b538SAndroid Build Coastguard Worker return rv;
164*6777b538SAndroid Build Coastguard Worker }
165*6777b538SAndroid Build Coastguard Worker
NetLogQuicRstStreamFrameParams(const quic::QuicRstStreamFrame * frame)166*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicRstStreamFrameParams(
167*6777b538SAndroid Build Coastguard Worker const quic::QuicRstStreamFrame* frame) {
168*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
169*6777b538SAndroid Build Coastguard Worker .Set("stream_id", static_cast<int>(frame->stream_id))
170*6777b538SAndroid Build Coastguard Worker .Set("quic_rst_stream_error", static_cast<int>(frame->error_code))
171*6777b538SAndroid Build Coastguard Worker .Set("ietf_error_code", static_cast<int>(frame->ietf_error_code))
172*6777b538SAndroid Build Coastguard Worker .Set("offset", NetLogNumberValue(frame->byte_offset));
173*6777b538SAndroid Build Coastguard Worker }
174*6777b538SAndroid Build Coastguard Worker
NetLogQuicConnectionCloseFrameParams(const quic::QuicConnectionCloseFrame * frame)175*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicConnectionCloseFrameParams(
176*6777b538SAndroid Build Coastguard Worker const quic::QuicConnectionCloseFrame* frame) {
177*6777b538SAndroid Build Coastguard Worker base::Value::Dict dict;
178*6777b538SAndroid Build Coastguard Worker dict.Set("quic_error", static_cast<int>(frame->quic_error_code));
179*6777b538SAndroid Build Coastguard Worker if (frame->wire_error_code != frame->quic_error_code) {
180*6777b538SAndroid Build Coastguard Worker dict.Set("quic_wire_error", static_cast<int>(frame->wire_error_code));
181*6777b538SAndroid Build Coastguard Worker }
182*6777b538SAndroid Build Coastguard Worker std::string close_type;
183*6777b538SAndroid Build Coastguard Worker switch (frame->close_type) {
184*6777b538SAndroid Build Coastguard Worker case quic::GOOGLE_QUIC_CONNECTION_CLOSE:
185*6777b538SAndroid Build Coastguard Worker close_type = "gQUIC";
186*6777b538SAndroid Build Coastguard Worker break;
187*6777b538SAndroid Build Coastguard Worker case quic::IETF_QUIC_TRANSPORT_CONNECTION_CLOSE:
188*6777b538SAndroid Build Coastguard Worker close_type = "Transport";
189*6777b538SAndroid Build Coastguard Worker break;
190*6777b538SAndroid Build Coastguard Worker case quic::IETF_QUIC_APPLICATION_CONNECTION_CLOSE:
191*6777b538SAndroid Build Coastguard Worker close_type = "Application";
192*6777b538SAndroid Build Coastguard Worker break;
193*6777b538SAndroid Build Coastguard Worker }
194*6777b538SAndroid Build Coastguard Worker dict.Set("close_type", close_type);
195*6777b538SAndroid Build Coastguard Worker if (frame->transport_close_frame_type != 0) {
196*6777b538SAndroid Build Coastguard Worker dict.Set("transport_close_frame_type",
197*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(frame->transport_close_frame_type));
198*6777b538SAndroid Build Coastguard Worker }
199*6777b538SAndroid Build Coastguard Worker dict.Set("details", frame->error_details);
200*6777b538SAndroid Build Coastguard Worker return dict;
201*6777b538SAndroid Build Coastguard Worker }
202*6777b538SAndroid Build Coastguard Worker
NetLogQuicWindowUpdateFrameParams(const quic::QuicWindowUpdateFrame & frame)203*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicWindowUpdateFrameParams(
204*6777b538SAndroid Build Coastguard Worker const quic::QuicWindowUpdateFrame& frame) {
205*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
206*6777b538SAndroid Build Coastguard Worker .Set("stream_id", static_cast<int>(frame.stream_id))
207*6777b538SAndroid Build Coastguard Worker .Set("byte_offset", NetLogNumberValue(frame.max_data));
208*6777b538SAndroid Build Coastguard Worker }
209*6777b538SAndroid Build Coastguard Worker
NetLogQuicBlockedFrameParams(const quic::QuicBlockedFrame & frame)210*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicBlockedFrameParams(
211*6777b538SAndroid Build Coastguard Worker const quic::QuicBlockedFrame& frame) {
212*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set("stream_id",
213*6777b538SAndroid Build Coastguard Worker static_cast<int>(frame.stream_id));
214*6777b538SAndroid Build Coastguard Worker }
215*6777b538SAndroid Build Coastguard Worker
NetLogQuicGoAwayFrameParams(const quic::QuicGoAwayFrame * frame)216*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicGoAwayFrameParams(
217*6777b538SAndroid Build Coastguard Worker const quic::QuicGoAwayFrame* frame) {
218*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
219*6777b538SAndroid Build Coastguard Worker .Set("quic_error", static_cast<int>(frame->error_code))
220*6777b538SAndroid Build Coastguard Worker .Set("last_good_stream_id", static_cast<int>(frame->last_good_stream_id))
221*6777b538SAndroid Build Coastguard Worker .Set("reason_phrase", frame->reason_phrase);
222*6777b538SAndroid Build Coastguard Worker }
223*6777b538SAndroid Build Coastguard Worker
NetLogQuicStopWaitingFrameParams(const quic::QuicStopWaitingFrame * frame)224*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicStopWaitingFrameParams(
225*6777b538SAndroid Build Coastguard Worker const quic::QuicStopWaitingFrame* frame) {
226*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set(
227*6777b538SAndroid Build Coastguard Worker "least_unacked", NetLogNumberValue(frame->least_unacked.ToUint64()));
228*6777b538SAndroid Build Coastguard Worker }
229*6777b538SAndroid Build Coastguard Worker
NetLogQuicVersionNegotiationPacketParams(const quic::QuicVersionNegotiationPacket * packet)230*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicVersionNegotiationPacketParams(
231*6777b538SAndroid Build Coastguard Worker const quic::QuicVersionNegotiationPacket* packet) {
232*6777b538SAndroid Build Coastguard Worker base::Value::List versions;
233*6777b538SAndroid Build Coastguard Worker for (const auto& version : packet->versions) {
234*6777b538SAndroid Build Coastguard Worker versions.Append(ParsedQuicVersionToString(version));
235*6777b538SAndroid Build Coastguard Worker }
236*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set("versions", std::move(versions));
237*6777b538SAndroid Build Coastguard Worker }
238*6777b538SAndroid Build Coastguard Worker
NetLogQuicPathData(const quic::QuicPathFrameBuffer & buffer)239*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicPathData(const quic::QuicPathFrameBuffer& buffer) {
240*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set("data", NetLogBinaryValue(buffer));
241*6777b538SAndroid Build Coastguard Worker }
242*6777b538SAndroid Build Coastguard Worker
NetLogQuicCryptoHandshakeMessageParams(const quic::CryptoHandshakeMessage * message)243*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicCryptoHandshakeMessageParams(
244*6777b538SAndroid Build Coastguard Worker const quic::CryptoHandshakeMessage* message) {
245*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set("quic_crypto_handshake_message",
246*6777b538SAndroid Build Coastguard Worker message->DebugString());
247*6777b538SAndroid Build Coastguard Worker }
248*6777b538SAndroid Build Coastguard Worker
NetLogQuicTransportParametersParams(const quic::TransportParameters & transport_parameters)249*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicTransportParametersParams(
250*6777b538SAndroid Build Coastguard Worker const quic::TransportParameters& transport_parameters) {
251*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set("quic_transport_parameters",
252*6777b538SAndroid Build Coastguard Worker transport_parameters.ToString());
253*6777b538SAndroid Build Coastguard Worker }
254*6777b538SAndroid Build Coastguard Worker
NetLogQuicZeroRttRejectReason(int reason)255*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicZeroRttRejectReason(int reason) {
256*6777b538SAndroid Build Coastguard Worker base::Value::Dict dict;
257*6777b538SAndroid Build Coastguard Worker const char* reason_detail = SSL_early_data_reason_string(
258*6777b538SAndroid Build Coastguard Worker static_cast<ssl_early_data_reason_t>(reason));
259*6777b538SAndroid Build Coastguard Worker if (reason_detail) {
260*6777b538SAndroid Build Coastguard Worker dict.Set("reason", reason_detail);
261*6777b538SAndroid Build Coastguard Worker } else {
262*6777b538SAndroid Build Coastguard Worker dict.Set("reason", "Unknown reason " + base::NumberToString(reason));
263*6777b538SAndroid Build Coastguard Worker }
264*6777b538SAndroid Build Coastguard Worker return dict;
265*6777b538SAndroid Build Coastguard Worker }
266*6777b538SAndroid Build Coastguard Worker
NetLogQuicOnConnectionClosedParams(quic::QuicErrorCode error,std::string error_details,quic::ConnectionCloseSource source)267*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicOnConnectionClosedParams(
268*6777b538SAndroid Build Coastguard Worker quic::QuicErrorCode error,
269*6777b538SAndroid Build Coastguard Worker std::string error_details,
270*6777b538SAndroid Build Coastguard Worker quic::ConnectionCloseSource source) {
271*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
272*6777b538SAndroid Build Coastguard Worker .Set("quic_error", static_cast<int>(error))
273*6777b538SAndroid Build Coastguard Worker .Set("details", error_details)
274*6777b538SAndroid Build Coastguard Worker .Set("from_peer",
275*6777b538SAndroid Build Coastguard Worker source == quic::ConnectionCloseSource::FROM_PEER ? true : false);
276*6777b538SAndroid Build Coastguard Worker }
277*6777b538SAndroid Build Coastguard Worker
NetLogQuicCertificateVerifiedParams(scoped_refptr<X509Certificate> cert)278*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicCertificateVerifiedParams(
279*6777b538SAndroid Build Coastguard Worker scoped_refptr<X509Certificate> cert) {
280*6777b538SAndroid Build Coastguard Worker // Only the subjects are logged so that we can investigate connection pooling.
281*6777b538SAndroid Build Coastguard Worker // More fields could be logged in the future.
282*6777b538SAndroid Build Coastguard Worker std::vector<std::string> dns_names;
283*6777b538SAndroid Build Coastguard Worker cert->GetSubjectAltName(&dns_names, nullptr);
284*6777b538SAndroid Build Coastguard Worker base::Value::List subjects;
285*6777b538SAndroid Build Coastguard Worker for (auto& dns_name : dns_names) {
286*6777b538SAndroid Build Coastguard Worker subjects.Append(std::move(dns_name));
287*6777b538SAndroid Build Coastguard Worker }
288*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set("subjects", std::move(subjects));
289*6777b538SAndroid Build Coastguard Worker }
290*6777b538SAndroid Build Coastguard Worker
NetLogQuicCryptoFrameParams(const quic::QuicCryptoFrame * frame,bool has_buffer)291*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicCryptoFrameParams(
292*6777b538SAndroid Build Coastguard Worker const quic::QuicCryptoFrame* frame,
293*6777b538SAndroid Build Coastguard Worker bool has_buffer) {
294*6777b538SAndroid Build Coastguard Worker auto dict =
295*6777b538SAndroid Build Coastguard Worker base::Value::Dict()
296*6777b538SAndroid Build Coastguard Worker .Set("encryption_level", quic::EncryptionLevelToString(frame->level))
297*6777b538SAndroid Build Coastguard Worker .Set("data_length", frame->data_length)
298*6777b538SAndroid Build Coastguard Worker .Set("offset", NetLogNumberValue(frame->offset));
299*6777b538SAndroid Build Coastguard Worker if (has_buffer) {
300*6777b538SAndroid Build Coastguard Worker dict.Set("bytes", NetLogBinaryValue(
301*6777b538SAndroid Build Coastguard Worker reinterpret_cast<const void*>(frame->data_buffer),
302*6777b538SAndroid Build Coastguard Worker frame->data_length));
303*6777b538SAndroid Build Coastguard Worker }
304*6777b538SAndroid Build Coastguard Worker return dict;
305*6777b538SAndroid Build Coastguard Worker }
306*6777b538SAndroid Build Coastguard Worker
NetLogQuicStopSendingFrameParams(const quic::QuicStopSendingFrame & frame)307*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicStopSendingFrameParams(
308*6777b538SAndroid Build Coastguard Worker const quic::QuicStopSendingFrame& frame) {
309*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
310*6777b538SAndroid Build Coastguard Worker .Set("stream_id", static_cast<int>(frame.stream_id))
311*6777b538SAndroid Build Coastguard Worker .Set("quic_rst_stream_error", static_cast<int>(frame.error_code))
312*6777b538SAndroid Build Coastguard Worker .Set("ietf_error_code", static_cast<int>(frame.ietf_error_code));
313*6777b538SAndroid Build Coastguard Worker }
314*6777b538SAndroid Build Coastguard Worker
NetLogQuicStreamsBlockedFrameParams(const quic::QuicStreamsBlockedFrame & frame)315*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicStreamsBlockedFrameParams(
316*6777b538SAndroid Build Coastguard Worker const quic::QuicStreamsBlockedFrame& frame) {
317*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
318*6777b538SAndroid Build Coastguard Worker .Set("stream_count", static_cast<int>(frame.stream_count))
319*6777b538SAndroid Build Coastguard Worker .Set("is_unidirectional", frame.unidirectional);
320*6777b538SAndroid Build Coastguard Worker }
321*6777b538SAndroid Build Coastguard Worker
NetLogQuicMaxStreamsFrameParams(const quic::QuicMaxStreamsFrame & frame)322*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicMaxStreamsFrameParams(
323*6777b538SAndroid Build Coastguard Worker const quic::QuicMaxStreamsFrame& frame) {
324*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
325*6777b538SAndroid Build Coastguard Worker .Set("stream_count", static_cast<int>(frame.stream_count))
326*6777b538SAndroid Build Coastguard Worker .Set("is_unidirectional", frame.unidirectional);
327*6777b538SAndroid Build Coastguard Worker }
328*6777b538SAndroid Build Coastguard Worker
NetLogQuicNewConnectionIdFrameParams(const quic::QuicNewConnectionIdFrame * frame)329*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicNewConnectionIdFrameParams(
330*6777b538SAndroid Build Coastguard Worker const quic::QuicNewConnectionIdFrame* frame) {
331*6777b538SAndroid Build Coastguard Worker return base::Value::Dict()
332*6777b538SAndroid Build Coastguard Worker .Set("connection_id", frame->connection_id.ToString())
333*6777b538SAndroid Build Coastguard Worker .Set("sequence_number", NetLogNumberValue(frame->sequence_number))
334*6777b538SAndroid Build Coastguard Worker .Set("retire_prior_to", NetLogNumberValue(frame->retire_prior_to));
335*6777b538SAndroid Build Coastguard Worker }
336*6777b538SAndroid Build Coastguard Worker
NetLogQuicRetireConnectionIdFrameParams(const quic::QuicRetireConnectionIdFrame * frame)337*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicRetireConnectionIdFrameParams(
338*6777b538SAndroid Build Coastguard Worker const quic::QuicRetireConnectionIdFrame* frame) {
339*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set("sequence_number",
340*6777b538SAndroid Build Coastguard Worker NetLogNumberValue(frame->sequence_number));
341*6777b538SAndroid Build Coastguard Worker }
342*6777b538SAndroid Build Coastguard Worker
NetLogQuicNewTokenFrameParams(const quic::QuicNewTokenFrame * frame)343*6777b538SAndroid Build Coastguard Worker base::Value::Dict NetLogQuicNewTokenFrameParams(
344*6777b538SAndroid Build Coastguard Worker const quic::QuicNewTokenFrame* frame) {
345*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set(
346*6777b538SAndroid Build Coastguard Worker "token",
347*6777b538SAndroid Build Coastguard Worker NetLogBinaryValue(reinterpret_cast<const void*>(frame->token.data()),
348*6777b538SAndroid Build Coastguard Worker frame->token.length()));
349*6777b538SAndroid Build Coastguard Worker }
350*6777b538SAndroid Build Coastguard Worker
351*6777b538SAndroid Build Coastguard Worker } // namespace
352*6777b538SAndroid Build Coastguard Worker
QuicEventLogger(quic::QuicSession * session,const NetLogWithSource & net_log)353*6777b538SAndroid Build Coastguard Worker QuicEventLogger::QuicEventLogger(quic::QuicSession* session,
354*6777b538SAndroid Build Coastguard Worker const NetLogWithSource& net_log)
355*6777b538SAndroid Build Coastguard Worker : session_(session), net_log_(net_log) {}
356*6777b538SAndroid Build Coastguard Worker
OnFrameAddedToPacket(const quic::QuicFrame & frame)357*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnFrameAddedToPacket(const quic::QuicFrame& frame) {
358*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing())
359*6777b538SAndroid Build Coastguard Worker return;
360*6777b538SAndroid Build Coastguard Worker switch (frame.type) {
361*6777b538SAndroid Build Coastguard Worker case quic::PADDING_FRAME:
362*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
363*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_PADDING_FRAME_SENT, "num_padding_bytes",
364*6777b538SAndroid Build Coastguard Worker frame.padding_frame.num_padding_bytes);
365*6777b538SAndroid Build Coastguard Worker break;
366*6777b538SAndroid Build Coastguard Worker case quic::STREAM_FRAME:
367*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_STREAM_FRAME_SENT, [&] {
368*6777b538SAndroid Build Coastguard Worker return NetLogQuicStreamFrameParams(frame.stream_frame);
369*6777b538SAndroid Build Coastguard Worker });
370*6777b538SAndroid Build Coastguard Worker break;
371*6777b538SAndroid Build Coastguard Worker case quic::ACK_FRAME: {
372*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_ACK_FRAME_SENT, [&] {
373*6777b538SAndroid Build Coastguard Worker return NetLogQuicAckFrameParams(frame.ack_frame);
374*6777b538SAndroid Build Coastguard Worker });
375*6777b538SAndroid Build Coastguard Worker break;
376*6777b538SAndroid Build Coastguard Worker }
377*6777b538SAndroid Build Coastguard Worker case quic::RST_STREAM_FRAME:
378*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
379*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_RST_STREAM_FRAME_SENT, [&] {
380*6777b538SAndroid Build Coastguard Worker return NetLogQuicRstStreamFrameParams(frame.rst_stream_frame);
381*6777b538SAndroid Build Coastguard Worker });
382*6777b538SAndroid Build Coastguard Worker break;
383*6777b538SAndroid Build Coastguard Worker case quic::CONNECTION_CLOSE_FRAME:
384*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
385*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_CONNECTION_CLOSE_FRAME_SENT, [&] {
386*6777b538SAndroid Build Coastguard Worker return NetLogQuicConnectionCloseFrameParams(
387*6777b538SAndroid Build Coastguard Worker frame.connection_close_frame);
388*6777b538SAndroid Build Coastguard Worker });
389*6777b538SAndroid Build Coastguard Worker break;
390*6777b538SAndroid Build Coastguard Worker case quic::GOAWAY_FRAME:
391*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_GOAWAY_FRAME_SENT, [&] {
392*6777b538SAndroid Build Coastguard Worker return NetLogQuicGoAwayFrameParams(frame.goaway_frame);
393*6777b538SAndroid Build Coastguard Worker });
394*6777b538SAndroid Build Coastguard Worker break;
395*6777b538SAndroid Build Coastguard Worker case quic::WINDOW_UPDATE_FRAME:
396*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
397*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_WINDOW_UPDATE_FRAME_SENT, [&] {
398*6777b538SAndroid Build Coastguard Worker return NetLogQuicWindowUpdateFrameParams(frame.window_update_frame);
399*6777b538SAndroid Build Coastguard Worker });
400*6777b538SAndroid Build Coastguard Worker break;
401*6777b538SAndroid Build Coastguard Worker case quic::BLOCKED_FRAME:
402*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_BLOCKED_FRAME_SENT, [&] {
403*6777b538SAndroid Build Coastguard Worker return NetLogQuicBlockedFrameParams(frame.blocked_frame);
404*6777b538SAndroid Build Coastguard Worker });
405*6777b538SAndroid Build Coastguard Worker break;
406*6777b538SAndroid Build Coastguard Worker case quic::STOP_WAITING_FRAME:
407*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
408*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_STOP_WAITING_FRAME_SENT, [&] {
409*6777b538SAndroid Build Coastguard Worker return NetLogQuicStopWaitingFrameParams(&frame.stop_waiting_frame);
410*6777b538SAndroid Build Coastguard Worker });
411*6777b538SAndroid Build Coastguard Worker break;
412*6777b538SAndroid Build Coastguard Worker case quic::PING_FRAME:
413*6777b538SAndroid Build Coastguard Worker // PingFrame has no contents to log, so just record that it was sent.
414*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PING_FRAME_SENT);
415*6777b538SAndroid Build Coastguard Worker break;
416*6777b538SAndroid Build Coastguard Worker case quic::MTU_DISCOVERY_FRAME:
417*6777b538SAndroid Build Coastguard Worker // MtuDiscoveryFrame is PingFrame on wire, it does not have any payload.
418*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_MTU_DISCOVERY_FRAME_SENT);
419*6777b538SAndroid Build Coastguard Worker break;
420*6777b538SAndroid Build Coastguard Worker case quic::NEW_CONNECTION_ID_FRAME:
421*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
422*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_NEW_CONNECTION_ID_FRAME_SENT, [&] {
423*6777b538SAndroid Build Coastguard Worker return NetLogQuicNewConnectionIdFrameParams(
424*6777b538SAndroid Build Coastguard Worker frame.new_connection_id_frame);
425*6777b538SAndroid Build Coastguard Worker });
426*6777b538SAndroid Build Coastguard Worker break;
427*6777b538SAndroid Build Coastguard Worker case quic::MAX_STREAMS_FRAME:
428*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
429*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_MAX_STREAMS_FRAME_SENT, [&] {
430*6777b538SAndroid Build Coastguard Worker return NetLogQuicMaxStreamsFrameParams(frame.max_streams_frame);
431*6777b538SAndroid Build Coastguard Worker });
432*6777b538SAndroid Build Coastguard Worker break;
433*6777b538SAndroid Build Coastguard Worker case quic::STREAMS_BLOCKED_FRAME:
434*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
435*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_STREAMS_BLOCKED_FRAME_SENT, [&] {
436*6777b538SAndroid Build Coastguard Worker return NetLogQuicStreamsBlockedFrameParams(
437*6777b538SAndroid Build Coastguard Worker frame.streams_blocked_frame);
438*6777b538SAndroid Build Coastguard Worker });
439*6777b538SAndroid Build Coastguard Worker break;
440*6777b538SAndroid Build Coastguard Worker case quic::PATH_RESPONSE_FRAME:
441*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
442*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_PATH_RESPONSE_FRAME_SENT, [&] {
443*6777b538SAndroid Build Coastguard Worker return NetLogQuicPathData(frame.path_response_frame.data_buffer);
444*6777b538SAndroid Build Coastguard Worker });
445*6777b538SAndroid Build Coastguard Worker break;
446*6777b538SAndroid Build Coastguard Worker case quic::PATH_CHALLENGE_FRAME:
447*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
448*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_PATH_CHALLENGE_FRAME_SENT, [&] {
449*6777b538SAndroid Build Coastguard Worker return NetLogQuicPathData(frame.path_challenge_frame.data_buffer);
450*6777b538SAndroid Build Coastguard Worker });
451*6777b538SAndroid Build Coastguard Worker break;
452*6777b538SAndroid Build Coastguard Worker case quic::STOP_SENDING_FRAME:
453*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
454*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_STOP_SENDING_FRAME_SENT, [&] {
455*6777b538SAndroid Build Coastguard Worker return NetLogQuicStopSendingFrameParams(frame.stop_sending_frame);
456*6777b538SAndroid Build Coastguard Worker });
457*6777b538SAndroid Build Coastguard Worker break;
458*6777b538SAndroid Build Coastguard Worker case quic::MESSAGE_FRAME:
459*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
460*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_MESSAGE_FRAME_SENT, "message_length",
461*6777b538SAndroid Build Coastguard Worker frame.message_frame->message_length);
462*6777b538SAndroid Build Coastguard Worker break;
463*6777b538SAndroid Build Coastguard Worker case quic::CRYPTO_FRAME:
464*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_CRYPTO_FRAME_SENT, [&] {
465*6777b538SAndroid Build Coastguard Worker return NetLogQuicCryptoFrameParams(frame.crypto_frame,
466*6777b538SAndroid Build Coastguard Worker /*has_buffer = */ false);
467*6777b538SAndroid Build Coastguard Worker });
468*6777b538SAndroid Build Coastguard Worker break;
469*6777b538SAndroid Build Coastguard Worker case quic::NEW_TOKEN_FRAME:
470*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
471*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_NEW_TOKEN_FRAME_SENT,
472*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicNewTokenFrameParams(frame.new_token_frame); });
473*6777b538SAndroid Build Coastguard Worker break;
474*6777b538SAndroid Build Coastguard Worker case quic::RETIRE_CONNECTION_ID_FRAME:
475*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
476*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_RETIRE_CONNECTION_ID_FRAME_SENT, [&] {
477*6777b538SAndroid Build Coastguard Worker return NetLogQuicRetireConnectionIdFrameParams(
478*6777b538SAndroid Build Coastguard Worker frame.retire_connection_id_frame);
479*6777b538SAndroid Build Coastguard Worker });
480*6777b538SAndroid Build Coastguard Worker break;
481*6777b538SAndroid Build Coastguard Worker default:
482*6777b538SAndroid Build Coastguard Worker DCHECK(false) << "Illegal frame type: " << frame.type;
483*6777b538SAndroid Build Coastguard Worker }
484*6777b538SAndroid Build Coastguard Worker }
485*6777b538SAndroid Build Coastguard Worker
OnStreamFrameCoalesced(const quic::QuicStreamFrame & frame)486*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnStreamFrameCoalesced(
487*6777b538SAndroid Build Coastguard Worker const quic::QuicStreamFrame& frame) {
488*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_STREAM_FRAME_COALESCED,
489*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicStreamFrameParams(frame); });
490*6777b538SAndroid Build Coastguard Worker }
491*6777b538SAndroid Build Coastguard Worker
OnPacketSent(quic::QuicPacketNumber packet_number,quic::QuicPacketLength packet_length,bool,quic::TransmissionType transmission_type,quic::EncryptionLevel encryption_level,const quic::QuicFrames &,const quic::QuicFrames &,quic::QuicTime sent_time,uint32_t batch_id)492*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnPacketSent(
493*6777b538SAndroid Build Coastguard Worker quic::QuicPacketNumber packet_number,
494*6777b538SAndroid Build Coastguard Worker quic::QuicPacketLength packet_length,
495*6777b538SAndroid Build Coastguard Worker bool /*has_crypto_handshake*/,
496*6777b538SAndroid Build Coastguard Worker quic::TransmissionType transmission_type,
497*6777b538SAndroid Build Coastguard Worker quic::EncryptionLevel encryption_level,
498*6777b538SAndroid Build Coastguard Worker const quic::QuicFrames& /*retransmittable_frames*/,
499*6777b538SAndroid Build Coastguard Worker const quic::QuicFrames& /*nonretransmittable_frames*/,
500*6777b538SAndroid Build Coastguard Worker quic::QuicTime sent_time,
501*6777b538SAndroid Build Coastguard Worker uint32_t batch_id) {
502*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PACKET_SENT, [&] {
503*6777b538SAndroid Build Coastguard Worker return NetLogQuicPacketSentParams(packet_number, packet_length,
504*6777b538SAndroid Build Coastguard Worker transmission_type, encryption_level,
505*6777b538SAndroid Build Coastguard Worker sent_time, batch_id);
506*6777b538SAndroid Build Coastguard Worker });
507*6777b538SAndroid Build Coastguard Worker }
508*6777b538SAndroid Build Coastguard Worker
OnIncomingAck(quic::QuicPacketNumber ack_packet_number,quic::EncryptionLevel,const quic::QuicAckFrame & frame,quic::QuicTime ack_receive_time,quic::QuicPacketNumber largest_observed,bool rtt_updated,quic::QuicPacketNumber least_unacked_sent_packet)509*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnIncomingAck(
510*6777b538SAndroid Build Coastguard Worker quic::QuicPacketNumber ack_packet_number,
511*6777b538SAndroid Build Coastguard Worker quic::EncryptionLevel /*ack_decrypted_level*/,
512*6777b538SAndroid Build Coastguard Worker const quic::QuicAckFrame& frame,
513*6777b538SAndroid Build Coastguard Worker quic::QuicTime ack_receive_time,
514*6777b538SAndroid Build Coastguard Worker quic::QuicPacketNumber largest_observed,
515*6777b538SAndroid Build Coastguard Worker bool rtt_updated,
516*6777b538SAndroid Build Coastguard Worker quic::QuicPacketNumber least_unacked_sent_packet) {
517*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_ACK_FRAME_RECEIVED,
518*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicAckFrameParams(&frame); });
519*6777b538SAndroid Build Coastguard Worker }
520*6777b538SAndroid Build Coastguard Worker
OnPacketLoss(quic::QuicPacketNumber lost_packet_number,quic::EncryptionLevel,quic::TransmissionType transmission_type,quic::QuicTime detection_time)521*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnPacketLoss(quic::QuicPacketNumber lost_packet_number,
522*6777b538SAndroid Build Coastguard Worker quic::EncryptionLevel /*encryption_level*/,
523*6777b538SAndroid Build Coastguard Worker quic::TransmissionType transmission_type,
524*6777b538SAndroid Build Coastguard Worker quic::QuicTime detection_time) {
525*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PACKET_LOST, [&] {
526*6777b538SAndroid Build Coastguard Worker return NetLogQuicPacketLostParams(lost_packet_number, transmission_type,
527*6777b538SAndroid Build Coastguard Worker detection_time);
528*6777b538SAndroid Build Coastguard Worker });
529*6777b538SAndroid Build Coastguard Worker }
530*6777b538SAndroid Build Coastguard Worker
OnConfigProcessed(const quic::QuicSentPacketManager::DebugDelegate::SendParameters & parameters)531*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnConfigProcessed(
532*6777b538SAndroid Build Coastguard Worker const quic::QuicSentPacketManager::DebugDelegate::SendParameters&
533*6777b538SAndroid Build Coastguard Worker parameters) {
534*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_CONGESTION_CONTROL_CONFIGURED,
535*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicConfigProcessed(parameters); });
536*6777b538SAndroid Build Coastguard Worker }
537*6777b538SAndroid Build Coastguard Worker
OnPacketReceived(const quic::QuicSocketAddress & self_address,const quic::QuicSocketAddress & peer_address,const quic::QuicEncryptedPacket & packet)538*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnPacketReceived(
539*6777b538SAndroid Build Coastguard Worker const quic::QuicSocketAddress& self_address,
540*6777b538SAndroid Build Coastguard Worker const quic::QuicSocketAddress& peer_address,
541*6777b538SAndroid Build Coastguard Worker const quic::QuicEncryptedPacket& packet) {
542*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PACKET_RECEIVED, [&] {
543*6777b538SAndroid Build Coastguard Worker return NetLogQuicPacketParams(self_address, peer_address, packet.length());
544*6777b538SAndroid Build Coastguard Worker });
545*6777b538SAndroid Build Coastguard Worker }
546*6777b538SAndroid Build Coastguard Worker
OnUnauthenticatedHeader(const quic::QuicPacketHeader & header)547*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnUnauthenticatedHeader(
548*6777b538SAndroid Build Coastguard Worker const quic::QuicPacketHeader& header) {
549*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
550*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_UNAUTHENTICATED_PACKET_HEADER_RECEIVED,
551*6777b538SAndroid Build Coastguard Worker [&] {
552*6777b538SAndroid Build Coastguard Worker return NetLogReceivedQuicPacketHeaderParams(
553*6777b538SAndroid Build Coastguard Worker header, session_->version(),
554*6777b538SAndroid Build Coastguard Worker session_->connection()->connection_id(),
555*6777b538SAndroid Build Coastguard Worker session_->connection()->client_connection_id());
556*6777b538SAndroid Build Coastguard Worker });
557*6777b538SAndroid Build Coastguard Worker }
558*6777b538SAndroid Build Coastguard Worker
OnUndecryptablePacket(quic::EncryptionLevel decryption_level,bool dropped)559*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnUndecryptablePacket(
560*6777b538SAndroid Build Coastguard Worker quic::EncryptionLevel decryption_level,
561*6777b538SAndroid Build Coastguard Worker bool dropped) {
562*6777b538SAndroid Build Coastguard Worker if (dropped) {
563*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithStringParams(
564*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_DROPPED_UNDECRYPTABLE_PACKET,
565*6777b538SAndroid Build Coastguard Worker "encryption_level", quic::EncryptionLevelToString(decryption_level));
566*6777b538SAndroid Build Coastguard Worker return;
567*6777b538SAndroid Build Coastguard Worker }
568*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithStringParams(
569*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_BUFFERED_UNDECRYPTABLE_PACKET,
570*6777b538SAndroid Build Coastguard Worker "encryption_level", quic::EncryptionLevelToString(decryption_level));
571*6777b538SAndroid Build Coastguard Worker }
572*6777b538SAndroid Build Coastguard Worker
OnAttemptingToProcessUndecryptablePacket(quic::EncryptionLevel decryption_level)573*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnAttemptingToProcessUndecryptablePacket(
574*6777b538SAndroid Build Coastguard Worker quic::EncryptionLevel decryption_level) {
575*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithStringParams(
576*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_ATTEMPTING_TO_PROCESS_UNDECRYPTABLE_PACKET,
577*6777b538SAndroid Build Coastguard Worker "encryption_level", quic::EncryptionLevelToString(decryption_level));
578*6777b538SAndroid Build Coastguard Worker }
579*6777b538SAndroid Build Coastguard Worker
OnDuplicatePacket(quic::QuicPacketNumber packet_number)580*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnDuplicatePacket(quic::QuicPacketNumber packet_number) {
581*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
582*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_DUPLICATE_PACKET_RECEIVED,
583*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicDuplicatePacketParams(packet_number); });
584*6777b538SAndroid Build Coastguard Worker }
585*6777b538SAndroid Build Coastguard Worker
OnPacketHeader(const quic::QuicPacketHeader & header,quic::QuicTime,quic::EncryptionLevel)586*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnPacketHeader(const quic::QuicPacketHeader& header,
587*6777b538SAndroid Build Coastguard Worker quic::QuicTime /*receive_time*/,
588*6777b538SAndroid Build Coastguard Worker quic::EncryptionLevel /*level*/) {
589*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PACKET_AUTHENTICATED);
590*6777b538SAndroid Build Coastguard Worker }
591*6777b538SAndroid Build Coastguard Worker
OnStreamFrame(const quic::QuicStreamFrame & frame)592*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnStreamFrame(const quic::QuicStreamFrame& frame) {
593*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_STREAM_FRAME_RECEIVED,
594*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicStreamFrameParams(frame); });
595*6777b538SAndroid Build Coastguard Worker }
596*6777b538SAndroid Build Coastguard Worker
OnPathChallengeFrame(const quic::QuicPathChallengeFrame & frame)597*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnPathChallengeFrame(
598*6777b538SAndroid Build Coastguard Worker const quic::QuicPathChallengeFrame& frame) {
599*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PATH_CHALLENGE_FRAME_RECEIVED,
600*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicPathData(frame.data_buffer); });
601*6777b538SAndroid Build Coastguard Worker }
602*6777b538SAndroid Build Coastguard Worker
OnPathResponseFrame(const quic::QuicPathResponseFrame & frame)603*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnPathResponseFrame(
604*6777b538SAndroid Build Coastguard Worker const quic::QuicPathResponseFrame& frame) {
605*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PATH_RESPONSE_FRAME_RECEIVED,
606*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicPathData(frame.data_buffer); });
607*6777b538SAndroid Build Coastguard Worker }
608*6777b538SAndroid Build Coastguard Worker
OnCryptoFrame(const quic::QuicCryptoFrame & frame)609*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnCryptoFrame(const quic::QuicCryptoFrame& frame) {
610*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_CRYPTO_FRAME_RECEIVED, [&] {
611*6777b538SAndroid Build Coastguard Worker return NetLogQuicCryptoFrameParams(&frame, /*has_buffer = */ true);
612*6777b538SAndroid Build Coastguard Worker });
613*6777b538SAndroid Build Coastguard Worker }
614*6777b538SAndroid Build Coastguard Worker
OnStopSendingFrame(const quic::QuicStopSendingFrame & frame)615*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnStopSendingFrame(
616*6777b538SAndroid Build Coastguard Worker const quic::QuicStopSendingFrame& frame) {
617*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_STOP_SENDING_FRAME_RECEIVED,
618*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicStopSendingFrameParams(frame); });
619*6777b538SAndroid Build Coastguard Worker }
620*6777b538SAndroid Build Coastguard Worker
OnStreamsBlockedFrame(const quic::QuicStreamsBlockedFrame & frame)621*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnStreamsBlockedFrame(
622*6777b538SAndroid Build Coastguard Worker const quic::QuicStreamsBlockedFrame& frame) {
623*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
624*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_STREAMS_BLOCKED_FRAME_RECEIVED,
625*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicStreamsBlockedFrameParams(frame); });
626*6777b538SAndroid Build Coastguard Worker }
627*6777b538SAndroid Build Coastguard Worker
OnMaxStreamsFrame(const quic::QuicMaxStreamsFrame & frame)628*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnMaxStreamsFrame(
629*6777b538SAndroid Build Coastguard Worker const quic::QuicMaxStreamsFrame& frame) {
630*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_MAX_STREAMS_FRAME_RECEIVED,
631*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicMaxStreamsFrameParams(frame); });
632*6777b538SAndroid Build Coastguard Worker }
633*6777b538SAndroid Build Coastguard Worker
OnRstStreamFrame(const quic::QuicRstStreamFrame & frame)634*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnRstStreamFrame(const quic::QuicRstStreamFrame& frame) {
635*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_RST_STREAM_FRAME_RECEIVED,
636*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicRstStreamFrameParams(&frame); });
637*6777b538SAndroid Build Coastguard Worker }
638*6777b538SAndroid Build Coastguard Worker
OnConnectionCloseFrame(const quic::QuicConnectionCloseFrame & frame)639*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnConnectionCloseFrame(
640*6777b538SAndroid Build Coastguard Worker const quic::QuicConnectionCloseFrame& frame) {
641*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
642*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_CONNECTION_CLOSE_FRAME_RECEIVED,
643*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicConnectionCloseFrameParams(&frame); });
644*6777b538SAndroid Build Coastguard Worker }
645*6777b538SAndroid Build Coastguard Worker
OnWindowUpdateFrame(const quic::QuicWindowUpdateFrame & frame,const quic::QuicTime & receive_time)646*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnWindowUpdateFrame(
647*6777b538SAndroid Build Coastguard Worker const quic::QuicWindowUpdateFrame& frame,
648*6777b538SAndroid Build Coastguard Worker const quic::QuicTime& receive_time) {
649*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_WINDOW_UPDATE_FRAME_RECEIVED,
650*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicWindowUpdateFrameParams(frame); });
651*6777b538SAndroid Build Coastguard Worker }
652*6777b538SAndroid Build Coastguard Worker
OnBlockedFrame(const quic::QuicBlockedFrame & frame)653*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnBlockedFrame(const quic::QuicBlockedFrame& frame) {
654*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_BLOCKED_FRAME_RECEIVED,
655*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicBlockedFrameParams(frame); });
656*6777b538SAndroid Build Coastguard Worker }
657*6777b538SAndroid Build Coastguard Worker
OnGoAwayFrame(const quic::QuicGoAwayFrame & frame)658*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnGoAwayFrame(const quic::QuicGoAwayFrame& frame) {
659*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_GOAWAY_FRAME_RECEIVED,
660*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicGoAwayFrameParams(&frame); });
661*6777b538SAndroid Build Coastguard Worker }
662*6777b538SAndroid Build Coastguard Worker
OnPingFrame(const quic::QuicPingFrame & frame,quic::QuicTime::Delta)663*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnPingFrame(
664*6777b538SAndroid Build Coastguard Worker const quic::QuicPingFrame& frame,
665*6777b538SAndroid Build Coastguard Worker quic::QuicTime::Delta /*ping_received_delay*/) {
666*6777b538SAndroid Build Coastguard Worker // PingFrame has no contents to log, so just record that it was received.
667*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PING_FRAME_RECEIVED);
668*6777b538SAndroid Build Coastguard Worker }
669*6777b538SAndroid Build Coastguard Worker
OnPaddingFrame(const quic::QuicPaddingFrame & frame)670*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnPaddingFrame(const quic::QuicPaddingFrame& frame) {
671*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
672*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_PADDING_FRAME_RECEIVED, "num_padding_bytes",
673*6777b538SAndroid Build Coastguard Worker frame.num_padding_bytes);
674*6777b538SAndroid Build Coastguard Worker }
675*6777b538SAndroid Build Coastguard Worker
OnNewConnectionIdFrame(const quic::QuicNewConnectionIdFrame & frame)676*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnNewConnectionIdFrame(
677*6777b538SAndroid Build Coastguard Worker const quic::QuicNewConnectionIdFrame& frame) {
678*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
679*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_NEW_CONNECTION_ID_FRAME_RECEIVED,
680*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicNewConnectionIdFrameParams(&frame); });
681*6777b538SAndroid Build Coastguard Worker }
682*6777b538SAndroid Build Coastguard Worker
OnNewTokenFrame(const quic::QuicNewTokenFrame & frame)683*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnNewTokenFrame(const quic::QuicNewTokenFrame& frame) {
684*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_NEW_TOKEN_FRAME_RECEIVED,
685*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicNewTokenFrameParams(&frame); });
686*6777b538SAndroid Build Coastguard Worker }
687*6777b538SAndroid Build Coastguard Worker
OnRetireConnectionIdFrame(const quic::QuicRetireConnectionIdFrame & frame)688*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnRetireConnectionIdFrame(
689*6777b538SAndroid Build Coastguard Worker const quic::QuicRetireConnectionIdFrame& frame) {
690*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
691*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_RETIRE_CONNECTION_ID_FRAME_RECEIVED,
692*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicRetireConnectionIdFrameParams(&frame); });
693*6777b538SAndroid Build Coastguard Worker }
694*6777b538SAndroid Build Coastguard Worker
OnMessageFrame(const quic::QuicMessageFrame & frame)695*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnMessageFrame(const quic::QuicMessageFrame& frame) {
696*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithIntParams(
697*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_MESSAGE_FRAME_RECEIVED, "message_length",
698*6777b538SAndroid Build Coastguard Worker frame.message_length);
699*6777b538SAndroid Build Coastguard Worker }
700*6777b538SAndroid Build Coastguard Worker
OnHandshakeDoneFrame(const quic::QuicHandshakeDoneFrame & frame)701*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnHandshakeDoneFrame(
702*6777b538SAndroid Build Coastguard Worker const quic::QuicHandshakeDoneFrame& frame) {
703*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
704*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_HANDSHAKE_DONE_FRAME_RECEIVED);
705*6777b538SAndroid Build Coastguard Worker }
706*6777b538SAndroid Build Coastguard Worker
OnCoalescedPacketSent(const quic::QuicCoalescedPacket & coalesced_packet,size_t length)707*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnCoalescedPacketSent(
708*6777b538SAndroid Build Coastguard Worker const quic::QuicCoalescedPacket& coalesced_packet,
709*6777b538SAndroid Build Coastguard Worker size_t length) {
710*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithStringParams(
711*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_COALESCED_PACKET_SENT, "info",
712*6777b538SAndroid Build Coastguard Worker coalesced_packet.ToString(length));
713*6777b538SAndroid Build Coastguard Worker }
714*6777b538SAndroid Build Coastguard Worker
OnVersionNegotiationPacket(const quic::QuicVersionNegotiationPacket & packet)715*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnVersionNegotiationPacket(
716*6777b538SAndroid Build Coastguard Worker const quic::QuicVersionNegotiationPacket& packet) {
717*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
718*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_VERSION_NEGOTIATION_PACKET_RECEIVED,
719*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicVersionNegotiationPacketParams(&packet); });
720*6777b538SAndroid Build Coastguard Worker }
721*6777b538SAndroid Build Coastguard Worker
OnCryptoHandshakeMessageReceived(const quic::CryptoHandshakeMessage & message)722*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnCryptoHandshakeMessageReceived(
723*6777b538SAndroid Build Coastguard Worker const quic::CryptoHandshakeMessage& message) {
724*6777b538SAndroid Build Coastguard Worker if (message.tag() == quic::kSHLO) {
725*6777b538SAndroid Build Coastguard Worker std::string_view address;
726*6777b538SAndroid Build Coastguard Worker quic::QuicSocketAddressCoder decoder;
727*6777b538SAndroid Build Coastguard Worker if (message.GetStringPiece(quic::kCADR, &address) &&
728*6777b538SAndroid Build Coastguard Worker decoder.Decode(address.data(), address.size())) {
729*6777b538SAndroid Build Coastguard Worker local_address_from_shlo_ =
730*6777b538SAndroid Build Coastguard Worker IPEndPoint(ToIPAddress(decoder.ip()), decoder.port());
731*6777b538SAndroid Build Coastguard Worker }
732*6777b538SAndroid Build Coastguard Worker }
733*6777b538SAndroid Build Coastguard Worker
734*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
735*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_CRYPTO_HANDSHAKE_MESSAGE_RECEIVED,
736*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicCryptoHandshakeMessageParams(&message); });
737*6777b538SAndroid Build Coastguard Worker }
738*6777b538SAndroid Build Coastguard Worker
OnCryptoHandshakeMessageSent(const quic::CryptoHandshakeMessage & message)739*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnCryptoHandshakeMessageSent(
740*6777b538SAndroid Build Coastguard Worker const quic::CryptoHandshakeMessage& message) {
741*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
742*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_CRYPTO_HANDSHAKE_MESSAGE_SENT,
743*6777b538SAndroid Build Coastguard Worker [&] { return NetLogQuicCryptoHandshakeMessageParams(&message); });
744*6777b538SAndroid Build Coastguard Worker }
745*6777b538SAndroid Build Coastguard Worker
OnConnectionClosed(const quic::QuicConnectionCloseFrame & frame,quic::ConnectionCloseSource source)746*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnConnectionClosed(
747*6777b538SAndroid Build Coastguard Worker const quic::QuicConnectionCloseFrame& frame,
748*6777b538SAndroid Build Coastguard Worker quic::ConnectionCloseSource source) {
749*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_CLOSED, [&] {
750*6777b538SAndroid Build Coastguard Worker return NetLogQuicOnConnectionClosedParams(frame.quic_error_code,
751*6777b538SAndroid Build Coastguard Worker frame.error_details, source);
752*6777b538SAndroid Build Coastguard Worker });
753*6777b538SAndroid Build Coastguard Worker }
754*6777b538SAndroid Build Coastguard Worker
OnSuccessfulVersionNegotiation(const quic::ParsedQuicVersion & version)755*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnSuccessfulVersionNegotiation(
756*6777b538SAndroid Build Coastguard Worker const quic::ParsedQuicVersion& version) {
757*6777b538SAndroid Build Coastguard Worker if (!net_log_.IsCapturing())
758*6777b538SAndroid Build Coastguard Worker return;
759*6777b538SAndroid Build Coastguard Worker std::string quic_version = quic::ParsedQuicVersionToString(version);
760*6777b538SAndroid Build Coastguard Worker net_log_.AddEventWithStringParams(
761*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_VERSION_NEGOTIATED, "version",
762*6777b538SAndroid Build Coastguard Worker quic_version);
763*6777b538SAndroid Build Coastguard Worker }
764*6777b538SAndroid Build Coastguard Worker
OnCertificateVerified(const CertVerifyResult & result)765*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnCertificateVerified(const CertVerifyResult& result) {
766*6777b538SAndroid Build Coastguard Worker if (result.cert_status == CERT_STATUS_INVALID) {
767*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_CERTIFICATE_VERIFY_FAILED);
768*6777b538SAndroid Build Coastguard Worker return;
769*6777b538SAndroid Build Coastguard Worker }
770*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_CERTIFICATE_VERIFIED, [&] {
771*6777b538SAndroid Build Coastguard Worker return NetLogQuicCertificateVerifiedParams(result.verified_cert);
772*6777b538SAndroid Build Coastguard Worker });
773*6777b538SAndroid Build Coastguard Worker }
774*6777b538SAndroid Build Coastguard Worker
OnTransportParametersSent(const quic::TransportParameters & transport_parameters)775*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnTransportParametersSent(
776*6777b538SAndroid Build Coastguard Worker const quic::TransportParameters& transport_parameters) {
777*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
778*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_TRANSPORT_PARAMETERS_SENT, [&] {
779*6777b538SAndroid Build Coastguard Worker return NetLogQuicTransportParametersParams(transport_parameters);
780*6777b538SAndroid Build Coastguard Worker });
781*6777b538SAndroid Build Coastguard Worker }
782*6777b538SAndroid Build Coastguard Worker
OnTransportParametersReceived(const quic::TransportParameters & transport_parameters)783*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnTransportParametersReceived(
784*6777b538SAndroid Build Coastguard Worker const quic::TransportParameters& transport_parameters) {
785*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
786*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_TRANSPORT_PARAMETERS_RECEIVED, [&] {
787*6777b538SAndroid Build Coastguard Worker return NetLogQuicTransportParametersParams(transport_parameters);
788*6777b538SAndroid Build Coastguard Worker });
789*6777b538SAndroid Build Coastguard Worker }
790*6777b538SAndroid Build Coastguard Worker
OnTransportParametersResumed(const quic::TransportParameters & transport_parameters)791*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnTransportParametersResumed(
792*6777b538SAndroid Build Coastguard Worker const quic::TransportParameters& transport_parameters) {
793*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(
794*6777b538SAndroid Build Coastguard Worker NetLogEventType::QUIC_SESSION_TRANSPORT_PARAMETERS_RESUMED, [&] {
795*6777b538SAndroid Build Coastguard Worker return NetLogQuicTransportParametersParams(transport_parameters);
796*6777b538SAndroid Build Coastguard Worker });
797*6777b538SAndroid Build Coastguard Worker }
798*6777b538SAndroid Build Coastguard Worker
OnZeroRttRejected(int reason)799*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnZeroRttRejected(int reason) {
800*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::QUIC_SESSION_ZERO_RTT_REJECTED,
801*6777b538SAndroid Build Coastguard Worker [reason] { return NetLogQuicZeroRttRejectReason(reason); });
802*6777b538SAndroid Build Coastguard Worker }
803*6777b538SAndroid Build Coastguard Worker
OnEncryptedClientHelloSent(std::string_view client_hello)804*6777b538SAndroid Build Coastguard Worker void QuicEventLogger::OnEncryptedClientHelloSent(
805*6777b538SAndroid Build Coastguard Worker std::string_view client_hello) {
806*6777b538SAndroid Build Coastguard Worker net_log_.AddEvent(NetLogEventType::SSL_ENCRYPTED_CLIENT_HELLO, [&] {
807*6777b538SAndroid Build Coastguard Worker return base::Value::Dict().Set(
808*6777b538SAndroid Build Coastguard Worker "bytes", NetLogBinaryValue(base::as_byte_span(client_hello)));
809*6777b538SAndroid Build Coastguard Worker });
810*6777b538SAndroid Build Coastguard Worker }
811*6777b538SAndroid Build Coastguard Worker
812*6777b538SAndroid Build Coastguard Worker } // namespace net
813