quic_event_logger.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef NET_QUIC_QUIC_EVENT_LOGGER_H_
  5. #define NET_QUIC_QUIC_EVENT_LOGGER_H_
  6. #include "base/memory/raw_ptr.h"
  7. #include "net/base/ip_endpoint.h"
  8. #include "net/base/net_export.h"
  9. #include "net/cert/cert_verify_result.h"
  10. #include "net/log/net_log_with_source.h"
  11. #include "net/third_party/quiche/src/quiche/quic/core/quic_connection.h"
  12. #include "net/third_party/quiche/src/quiche/quic/core/quic_packet_creator.h"
  13. #include "net/third_party/quiche/src/quiche/quic/core/quic_session.h"
  14. namespace net {
  15. // Logs QUIC-related events into the supplied NetLog. Note that while most of
  16. // the logging is done by registering this object as a debug delegate, some of
  17. // the methods have to be called manually.
  18. class NET_EXPORT_PRIVATE QuicEventLogger
  19. : public quic::QuicConnectionDebugVisitor,
  20. public quic::QuicPacketCreator::DebugDelegate {
  21. public:
  22. QuicEventLogger(quic::QuicSession* session, const NetLogWithSource& net_log);
  23. // quic::QuicPacketCreator::DebugDelegateInterface
  24. void OnFrameAddedToPacket(const quic::QuicFrame& frame) override;
  25. void OnStreamFrameCoalesced(const quic::QuicStreamFrame& frame) override;
  26. // quic::QuicConnectionDebugVisitor Interface
  27. void OnPacketSent(quic::QuicPacketNumber packet_number,
  28. quic::QuicPacketLength packet_length,
  29. bool has_crypto_handshake,
  30. quic::TransmissionType transmission_type,
  31. quic::EncryptionLevel encryption_level,
  32. const quic::QuicFrames& retransmittable_frames,
  33. const quic::QuicFrames& nonretransmittable_frames,
  34. quic::QuicTime sent_time) override;
  35. void OnIncomingAck(quic::QuicPacketNumber ack_packet_number,
  36. quic::EncryptionLevel ack_decrypted_level,
  37. const quic::QuicAckFrame& frame,
  38. quic::QuicTime ack_receive_time,
  39. quic::QuicPacketNumber largest_observed,
  40. bool rtt_updated,
  41. quic::QuicPacketNumber least_unacked_sent_packet) override;
  42. void OnPacketLoss(quic::QuicPacketNumber lost_packet_number,
  43. quic::EncryptionLevel encryption_level,
  44. quic::TransmissionType transmission_type,
  45. quic::QuicTime detection_time) override;
  46. void OnPacketReceived(const quic::QuicSocketAddress& self_address,
  47. const quic::QuicSocketAddress& peer_address,
  48. const quic::QuicEncryptedPacket& packet) override;
  49. void OnUnauthenticatedHeader(const quic::QuicPacketHeader& header) override;
  50. void OnUndecryptablePacket(quic::EncryptionLevel decryption_level,
  51. bool dropped) override;
  52. void OnAttemptingToProcessUndecryptablePacket(
  53. quic::EncryptionLevel decryption_level) override;
  54. void OnDuplicatePacket(quic::QuicPacketNumber packet_number) override;
  55. void OnPacketHeader(const quic::QuicPacketHeader& header,
  56. quic::QuicTime receive_time,
  57. quic::EncryptionLevel level) override;
  58. void OnPathChallengeFrame(const quic::QuicPathChallengeFrame& frame) override;
  59. void OnPathResponseFrame(const quic::QuicPathResponseFrame& frame) override;
  60. void OnCryptoFrame(const quic::QuicCryptoFrame& frame) override;
  61. void OnStopSendingFrame(const quic::QuicStopSendingFrame& frame) override;
  62. void OnStreamsBlockedFrame(
  63. const quic::QuicStreamsBlockedFrame& frame) override;
  64. void OnMaxStreamsFrame(const quic::QuicMaxStreamsFrame& frame) override;
  65. void OnStreamFrame(const quic::QuicStreamFrame& frame) override;
  66. void OnStopWaitingFrame(const quic::QuicStopWaitingFrame& frame) override;
  67. void OnRstStreamFrame(const quic::QuicRstStreamFrame& frame) override;
  68. void OnConnectionCloseFrame(
  69. const quic::QuicConnectionCloseFrame& frame) override;
  70. void OnWindowUpdateFrame(const quic::QuicWindowUpdateFrame& frame,
  71. const quic::QuicTime& receive_time) override;
  72. void OnBlockedFrame(const quic::QuicBlockedFrame& frame) override;
  73. void OnGoAwayFrame(const quic::QuicGoAwayFrame& frame) override;
  74. void OnPingFrame(const quic::QuicPingFrame& frame,
  75. quic::QuicTime::Delta ping_received_delay) override;
  76. void OnPaddingFrame(const quic::QuicPaddingFrame& frame) override;
  77. void OnNewConnectionIdFrame(
  78. const quic::QuicNewConnectionIdFrame& frame) override;
  79. void OnNewTokenFrame(const quic::QuicNewTokenFrame& frame) override;
  80. void OnRetireConnectionIdFrame(
  81. const quic::QuicRetireConnectionIdFrame& frame) override;
  82. void OnMessageFrame(const quic::QuicMessageFrame& frame) override;
  83. void OnHandshakeDoneFrame(const quic::QuicHandshakeDoneFrame& frame) override;
  84. void OnCoalescedPacketSent(const quic::QuicCoalescedPacket& coalesced_packet,
  85. size_t length) override;
  86. void OnPublicResetPacket(const quic::QuicPublicResetPacket& packet) override;
  87. void OnVersionNegotiationPacket(
  88. const quic::QuicVersionNegotiationPacket& packet) override;
  89. void OnConnectionClosed(const quic::QuicConnectionCloseFrame& frame,
  90. quic::ConnectionCloseSource source) override;
  91. void OnSuccessfulVersionNegotiation(
  92. const quic::ParsedQuicVersion& version) override;
  93. void OnTransportParametersSent(
  94. const quic::TransportParameters& transport_parameters) override;
  95. void OnTransportParametersReceived(
  96. const quic::TransportParameters& transport_parameters) override;
  97. void OnTransportParametersResumed(
  98. const quic::TransportParameters& transport_parameters) override;
  99. void OnZeroRttRejected(int reason) override;
  100. // Events that are not received via the visitor and have to be called manually
  101. // from the session.
  102. void OnCryptoHandshakeMessageReceived(
  103. const quic::CryptoHandshakeMessage& message);
  104. void OnCryptoHandshakeMessageSent(
  105. const quic::CryptoHandshakeMessage& message);
  106. void OnCertificateVerified(const CertVerifyResult& result);
  107. private:
  108. raw_ptr<quic::QuicSession> session_; // Unowned.
  109. NetLogWithSource net_log_;
  110. // The quic::kCADR value provided by the server in ServerHello.
  111. IPEndPoint local_address_from_shlo_;
  112. };
  113. } // namespace net
  114. #endif // NET_QUIC_QUIC_EVENT_LOGGER_H_