github.com/ooni/psiphon/tunnel-core@v0.0.0-20230105123940-fe12a24c96ee/oovendor/quic-go/internal/ackhandler/interfaces.go (about)

     1  package ackhandler
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/ooni/psiphon/tunnel-core/oovendor/quic-go/internal/protocol"
     7  	"github.com/ooni/psiphon/tunnel-core/oovendor/quic-go/internal/wire"
     8  )
     9  
    10  // A Packet is a packet
    11  type Packet struct {
    12  	PacketNumber    protocol.PacketNumber
    13  	Frames          []Frame
    14  	LargestAcked    protocol.PacketNumber // InvalidPacketNumber if the packet doesn't contain an ACK
    15  	Length          protocol.ByteCount
    16  	EncryptionLevel protocol.EncryptionLevel
    17  	SendTime        time.Time
    18  
    19  	IsPathMTUProbePacket bool // We don't report the loss of Path MTU probe packets to the congestion controller.
    20  
    21  	includedInBytesInFlight bool
    22  	declaredLost            bool
    23  	skippedPacket           bool
    24  }
    25  
    26  // SentPacketHandler handles ACKs received for outgoing packets
    27  type SentPacketHandler interface {
    28  	// SentPacket may modify the packet
    29  	SentPacket(packet *Packet)
    30  	ReceivedAck(ackFrame *wire.AckFrame, encLevel protocol.EncryptionLevel, recvTime time.Time) (bool /* 1-RTT packet acked */, error)
    31  	ReceivedBytes(protocol.ByteCount)
    32  	DropPackets(protocol.EncryptionLevel)
    33  	ResetForRetry() error
    34  	SetHandshakeConfirmed()
    35  
    36  	// The SendMode determines if and what kind of packets can be sent.
    37  	SendMode() SendMode
    38  	// TimeUntilSend is the time when the next packet should be sent.
    39  	// It is used for pacing packets.
    40  	TimeUntilSend() time.Time
    41  	// HasPacingBudget says if the pacer allows sending of a (full size) packet at this moment.
    42  	HasPacingBudget() bool
    43  	SetMaxDatagramSize(count protocol.ByteCount)
    44  
    45  	// only to be called once the handshake is complete
    46  	QueueProbePacket(protocol.EncryptionLevel) bool /* was a packet queued */
    47  
    48  	PeekPacketNumber(protocol.EncryptionLevel) (protocol.PacketNumber, protocol.PacketNumberLen)
    49  	PopPacketNumber(protocol.EncryptionLevel) protocol.PacketNumber
    50  
    51  	GetLossDetectionTimeout() time.Time
    52  	OnLossDetectionTimeout() error
    53  }
    54  
    55  type sentPacketTracker interface {
    56  	GetLowestPacketNotConfirmedAcked() protocol.PacketNumber
    57  	ReceivedPacket(protocol.EncryptionLevel)
    58  }
    59  
    60  // ReceivedPacketHandler handles ACKs needed to send for incoming packets
    61  type ReceivedPacketHandler interface {
    62  	IsPotentiallyDuplicate(protocol.PacketNumber, protocol.EncryptionLevel) bool
    63  	ReceivedPacket(pn protocol.PacketNumber, ecn protocol.ECN, encLevel protocol.EncryptionLevel, rcvTime time.Time, shouldInstigateAck bool) error
    64  	DropPackets(protocol.EncryptionLevel)
    65  
    66  	GetAlarmTimeout() time.Time
    67  	GetAckFrame(encLevel protocol.EncryptionLevel, onlyIfQueued bool) *wire.AckFrame
    68  }