github.com/metacubex/quic-go@v0.44.1-0.20240520163451-20b689a59136/internal/congestion/interface.go (about) 1 package congestion 2 3 import ( 4 "time" 5 6 "github.com/metacubex/quic-go/congestion" 7 "github.com/metacubex/quic-go/internal/protocol" 8 ) 9 10 // A SendAlgorithm performs congestion control 11 type SendAlgorithm interface { 12 TimeUntilSend(bytesInFlight protocol.ByteCount) time.Time 13 HasPacingBudget(now time.Time) bool 14 OnPacketSent(sentTime time.Time, bytesInFlight protocol.ByteCount, packetNumber protocol.PacketNumber, bytes protocol.ByteCount, isRetransmittable bool) 15 CanSend(bytesInFlight protocol.ByteCount) bool 16 MaybeExitSlowStart() 17 OnPacketAcked(number protocol.PacketNumber, ackedBytes protocol.ByteCount, priorInFlight protocol.ByteCount, eventTime time.Time) 18 OnCongestionEvent(number protocol.PacketNumber, lostBytes protocol.ByteCount, priorInFlight protocol.ByteCount) 19 OnRetransmissionTimeout(packetsRetransmitted bool) 20 SetMaxDatagramSize(protocol.ByteCount) 21 } 22 23 type SendAlgorithmEx interface { 24 SendAlgorithm 25 OnCongestionEventEx(priorInFlight protocol.ByteCount, eventTime time.Time, ackedPackets []congestion.AckedPacketInfo, lostPackets []congestion.LostPacketInfo) 26 } 27 28 // A SendAlgorithmWithDebugInfos is a SendAlgorithm that exposes some debug infos 29 type SendAlgorithmWithDebugInfos interface { 30 SendAlgorithm 31 InSlowStart() bool 32 InRecovery() bool 33 GetCongestionWindow() protocol.ByteCount 34 }