interface.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. // Package logging defines a logging interface for quic-go.
  2. // This package should not be considered stable
  3. package logging
  4. import (
  5. "net"
  6. "time"
  7. "github.com/Psiphon-Labs/quic-go/internal/protocol"
  8. "github.com/Psiphon-Labs/quic-go/internal/qerr"
  9. "github.com/Psiphon-Labs/quic-go/internal/utils"
  10. "github.com/Psiphon-Labs/quic-go/internal/wire"
  11. )
  12. type (
  13. // A ByteCount is used to count bytes.
  14. ByteCount = protocol.ByteCount
  15. // A ConnectionID is a QUIC Connection ID.
  16. ConnectionID = protocol.ConnectionID
  17. // An ArbitraryLenConnectionID is a QUIC Connection ID that can be up to 255 bytes long.
  18. ArbitraryLenConnectionID = protocol.ArbitraryLenConnectionID
  19. // The EncryptionLevel is the encryption level of a packet.
  20. EncryptionLevel = protocol.EncryptionLevel
  21. // The KeyPhase is the key phase of the 1-RTT keys.
  22. KeyPhase = protocol.KeyPhase
  23. // The KeyPhaseBit is the value of the key phase bit of the 1-RTT packets.
  24. KeyPhaseBit = protocol.KeyPhaseBit
  25. // The PacketNumber is the packet number of a packet.
  26. PacketNumber = protocol.PacketNumber
  27. // The Perspective is the role of a QUIC endpoint (client or server).
  28. Perspective = protocol.Perspective
  29. // A StatelessResetToken is a stateless reset token.
  30. StatelessResetToken = protocol.StatelessResetToken
  31. // The StreamID is the stream ID.
  32. StreamID = protocol.StreamID
  33. // The StreamNum is the number of the stream.
  34. StreamNum = protocol.StreamNum
  35. // The StreamType is the type of the stream (unidirectional or bidirectional).
  36. StreamType = protocol.StreamType
  37. // The VersionNumber is the QUIC version.
  38. VersionNumber = protocol.VersionNumber
  39. // The Header is the QUIC packet header, before removing header protection.
  40. Header = wire.Header
  41. // The ExtendedHeader is the QUIC Long Header packet header, after removing header protection.
  42. ExtendedHeader = wire.ExtendedHeader
  43. // The TransportParameters are QUIC transport parameters.
  44. TransportParameters = wire.TransportParameters
  45. // The PreferredAddress is the preferred address sent in the transport parameters.
  46. PreferredAddress = wire.PreferredAddress
  47. // A TransportError is a transport-level error code.
  48. TransportError = qerr.TransportErrorCode
  49. // An ApplicationError is an application-defined error code.
  50. ApplicationError = qerr.TransportErrorCode
  51. // The RTTStats contain statistics used by the congestion controller.
  52. RTTStats = utils.RTTStats
  53. )
  54. const (
  55. // KeyPhaseZero is key phase bit 0
  56. KeyPhaseZero KeyPhaseBit = protocol.KeyPhaseZero
  57. // KeyPhaseOne is key phase bit 1
  58. KeyPhaseOne KeyPhaseBit = protocol.KeyPhaseOne
  59. )
  60. const (
  61. // PerspectiveServer is used for a QUIC server
  62. PerspectiveServer Perspective = protocol.PerspectiveServer
  63. // PerspectiveClient is used for a QUIC client
  64. PerspectiveClient Perspective = protocol.PerspectiveClient
  65. )
  66. const (
  67. // EncryptionInitial is the Initial encryption level
  68. EncryptionInitial EncryptionLevel = protocol.EncryptionInitial
  69. // EncryptionHandshake is the Handshake encryption level
  70. EncryptionHandshake EncryptionLevel = protocol.EncryptionHandshake
  71. // Encryption1RTT is the 1-RTT encryption level
  72. Encryption1RTT EncryptionLevel = protocol.Encryption1RTT
  73. // Encryption0RTT is the 0-RTT encryption level
  74. Encryption0RTT EncryptionLevel = protocol.Encryption0RTT
  75. )
  76. const (
  77. // StreamTypeUni is a unidirectional stream
  78. StreamTypeUni = protocol.StreamTypeUni
  79. // StreamTypeBidi is a bidirectional stream
  80. StreamTypeBidi = protocol.StreamTypeBidi
  81. )
  82. // The ShortHeader is the QUIC Short Header packet header, after removing header protection.
  83. type ShortHeader struct {
  84. DestConnectionID ConnectionID
  85. PacketNumber PacketNumber
  86. PacketNumberLen protocol.PacketNumberLen
  87. KeyPhase KeyPhaseBit
  88. }
  89. // A Tracer traces events.
  90. type Tracer interface {
  91. SentPacket(net.Addr, *Header, ByteCount, []Frame)
  92. SentVersionNegotiationPacket(_ net.Addr, dest, src ArbitraryLenConnectionID, _ []VersionNumber)
  93. DroppedPacket(net.Addr, PacketType, ByteCount, PacketDropReason)
  94. }
  95. // A ConnectionTracer records events.
  96. type ConnectionTracer interface {
  97. StartedConnection(local, remote net.Addr, srcConnID, destConnID ConnectionID)
  98. NegotiatedVersion(chosen VersionNumber, clientVersions, serverVersions []VersionNumber)
  99. ClosedConnection(error)
  100. SentTransportParameters(*TransportParameters)
  101. ReceivedTransportParameters(*TransportParameters)
  102. RestoredTransportParameters(parameters *TransportParameters) // for 0-RTT
  103. SentLongHeaderPacket(hdr *ExtendedHeader, size ByteCount, ack *AckFrame, frames []Frame)
  104. SentShortHeaderPacket(hdr *ShortHeader, size ByteCount, ack *AckFrame, frames []Frame)
  105. ReceivedVersionNegotiationPacket(dest, src ArbitraryLenConnectionID, _ []VersionNumber)
  106. ReceivedRetry(*Header)
  107. ReceivedLongHeaderPacket(hdr *ExtendedHeader, size ByteCount, frames []Frame)
  108. ReceivedShortHeaderPacket(hdr *ShortHeader, size ByteCount, frames []Frame)
  109. BufferedPacket(PacketType, ByteCount)
  110. DroppedPacket(PacketType, ByteCount, PacketDropReason)
  111. UpdatedMetrics(rttStats *RTTStats, cwnd, bytesInFlight ByteCount, packetsInFlight int)
  112. AcknowledgedPacket(EncryptionLevel, PacketNumber)
  113. LostPacket(EncryptionLevel, PacketNumber, PacketLossReason)
  114. UpdatedCongestionState(CongestionState)
  115. UpdatedPTOCount(value uint32)
  116. UpdatedKeyFromTLS(EncryptionLevel, Perspective)
  117. UpdatedKey(generation KeyPhase, remote bool)
  118. DroppedEncryptionLevel(EncryptionLevel)
  119. DroppedKey(generation KeyPhase)
  120. SetLossTimer(TimerType, EncryptionLevel, time.Time)
  121. LossTimerExpired(TimerType, EncryptionLevel)
  122. LossTimerCanceled()
  123. // Close is called when the connection is closed.
  124. Close()
  125. Debug(name, msg string)
  126. }