github.com/sagernet/quic-go@v0.43.1-beta.1/internal/ackhandler/cc_adapter.go (about)

     1  package ackhandler
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/sagernet/quic-go/congestion"
     7  	cgInternal "github.com/sagernet/quic-go/internal/congestion"
     8  	"github.com/sagernet/quic-go/internal/protocol"
     9  )
    10  
    11  var _ cgInternal.SendAlgorithmWithDebugInfos = &ccAdapter{}
    12  
    13  type ccAdapter struct {
    14  	CC congestion.CongestionControl
    15  }
    16  
    17  func (a *ccAdapter) TimeUntilSend(bytesInFlight protocol.ByteCount) time.Time {
    18  	return a.CC.TimeUntilSend(congestion.ByteCount(bytesInFlight))
    19  }
    20  
    21  func (a *ccAdapter) HasPacingBudget(now time.Time) bool {
    22  	return a.CC.HasPacingBudget(now)
    23  }
    24  
    25  func (a *ccAdapter) OnPacketSent(sentTime time.Time, bytesInFlight protocol.ByteCount, packetNumber protocol.PacketNumber, bytes protocol.ByteCount, isRetransmittable bool) {
    26  	a.CC.OnPacketSent(sentTime, congestion.ByteCount(bytesInFlight), congestion.PacketNumber(packetNumber), congestion.ByteCount(bytes), isRetransmittable)
    27  }
    28  
    29  func (a *ccAdapter) CanSend(bytesInFlight protocol.ByteCount) bool {
    30  	return a.CC.CanSend(congestion.ByteCount(bytesInFlight))
    31  }
    32  
    33  func (a *ccAdapter) MaybeExitSlowStart() {
    34  	a.CC.MaybeExitSlowStart()
    35  }
    36  
    37  func (a *ccAdapter) OnPacketAcked(number protocol.PacketNumber, ackedBytes protocol.ByteCount, priorInFlight protocol.ByteCount, eventTime time.Time) {
    38  	a.CC.OnPacketAcked(congestion.PacketNumber(number), congestion.ByteCount(ackedBytes), congestion.ByteCount(priorInFlight), eventTime)
    39  }
    40  
    41  func (a *ccAdapter) OnCongestionEvent(number protocol.PacketNumber, lostBytes protocol.ByteCount, priorInFlight protocol.ByteCount) {
    42  	a.CC.OnCongestionEvent(congestion.PacketNumber(number), congestion.ByteCount(lostBytes), congestion.ByteCount(priorInFlight))
    43  }
    44  
    45  func (a *ccAdapter) OnRetransmissionTimeout(packetsRetransmitted bool) {
    46  	a.CC.OnRetransmissionTimeout(packetsRetransmitted)
    47  }
    48  
    49  func (a *ccAdapter) SetMaxDatagramSize(size protocol.ByteCount) {
    50  	a.CC.SetMaxDatagramSize(congestion.ByteCount(size))
    51  }
    52  
    53  func (a *ccAdapter) InSlowStart() bool {
    54  	return a.CC.InSlowStart()
    55  }
    56  
    57  func (a *ccAdapter) InRecovery() bool {
    58  	return a.CC.InRecovery()
    59  }
    60  
    61  func (a *ccAdapter) GetCongestionWindow() protocol.ByteCount {
    62  	return protocol.ByteCount(a.CC.GetCongestionWindow())
    63  }