Documentation ¶
Index ¶
- Variables
- func HasRetransmittableFrames(fs []wire.Frame) bool
- func IsFrameRetransmittable(f wire.Frame) bool
- type Packet
- type PacketElement
- type PacketList
- func (l *PacketList) Back() *PacketElement
- func (l *PacketList) Front() *PacketElement
- func (l *PacketList) Init() *PacketList
- func (l *PacketList) InsertAfter(v Packet, mark *PacketElement) *PacketElement
- func (l *PacketList) InsertBefore(v Packet, mark *PacketElement) *PacketElement
- func (l *PacketList) Len() int
- func (l *PacketList) MoveAfter(e, mark *PacketElement)
- func (l *PacketList) MoveBefore(e, mark *PacketElement)
- func (l *PacketList) MoveToBack(e *PacketElement)
- func (l *PacketList) MoveToFront(e *PacketElement)
- func (l *PacketList) PushBack(v Packet) *PacketElement
- func (l *PacketList) PushBackList(other *PacketList)
- func (l *PacketList) PushFront(v Packet) *PacketElement
- func (l *PacketList) PushFrontList(other *PacketList)
- func (l *PacketList) Remove(e *PacketElement) Packet
- type ReceivedPacketHandler
- type SentPacketHandler
Constants ¶
This section is empty.
Variables ¶
var ErrDuplicateOrOutOfOrderAck = errors.New("SentPacketHandler: Duplicate or out-of-order ACK")
ErrDuplicateOrOutOfOrderAck occurs when a duplicate or an out-of-order ACK is received
Functions ¶
func HasRetransmittableFrames ¶
HasRetransmittableFrames returns true if at least one frame is retransmittable.
func IsFrameRetransmittable ¶
IsFrameRetransmittable returns true if the frame should be retransmitted.
Types ¶
type Packet ¶
type Packet struct { PacketNumber protocol.PacketNumber Frames []wire.Frame Length protocol.ByteCount EncryptionLevel protocol.EncryptionLevel // contains filtered or unexported fields }
A Packet is a packet +gen linkedlist
func (*Packet) GetFramesForRetransmission ¶
GetFramesForRetransmission gets all the frames for retransmission
type PacketElement ¶
type PacketElement struct { // The value stored with this element. Value Packet // contains filtered or unexported fields }
PacketElement is an element of a linked list.
func (*PacketElement) Next ¶
func (e *PacketElement) Next() *PacketElement
Next returns the next list element or nil.
func (*PacketElement) Prev ¶
func (e *PacketElement) Prev() *PacketElement
Prev returns the previous list element or nil.
type PacketList ¶
type PacketList struct {
// contains filtered or unexported fields
}
PacketList represents a doubly linked list. The zero value for PacketList is an empty list ready to use.
func (*PacketList) Back ¶
func (l *PacketList) Back() *PacketElement
Back returns the last element of list l or nil.
func (*PacketList) Front ¶
func (l *PacketList) Front() *PacketElement
Front returns the first element of list l or nil.
func (*PacketList) Init ¶
func (l *PacketList) Init() *PacketList
Init initializes or clears list l.
func (*PacketList) InsertAfter ¶
func (l *PacketList) InsertAfter(v Packet, mark *PacketElement) *PacketElement
InsertAfter inserts a new element e with value v immediately after mark and returns e. If mark is not an element of l, the list is not modified.
func (*PacketList) InsertBefore ¶
func (l *PacketList) InsertBefore(v Packet, mark *PacketElement) *PacketElement
InsertBefore inserts a new element e with value v immediately before mark and returns e. If mark is not an element of l, the list is not modified.
func (*PacketList) Len ¶
func (l *PacketList) Len() int
Len returns the number of elements of list l. The complexity is O(1).
func (*PacketList) MoveAfter ¶
func (l *PacketList) MoveAfter(e, mark *PacketElement)
MoveAfter moves element e to its new position after mark. If e is not an element of l, or e == mark, the list is not modified.
func (*PacketList) MoveBefore ¶
func (l *PacketList) MoveBefore(e, mark *PacketElement)
MoveBefore moves element e to its new position before mark. If e or mark is not an element of l, or e == mark, the list is not modified.
func (*PacketList) MoveToBack ¶
func (l *PacketList) MoveToBack(e *PacketElement)
MoveToBack moves element e to the back of list l. If e is not an element of l, the list is not modified.
func (*PacketList) MoveToFront ¶
func (l *PacketList) MoveToFront(e *PacketElement)
MoveToFront moves element e to the front of list l. If e is not an element of l, the list is not modified.
func (*PacketList) PushBack ¶
func (l *PacketList) PushBack(v Packet) *PacketElement
PushBack inserts a new element e with value v at the back of list l and returns e.
func (*PacketList) PushBackList ¶
func (l *PacketList) PushBackList(other *PacketList)
PushBackList inserts a copy of an other list at the back of list l. The lists l and other may be the same.
func (*PacketList) PushFront ¶
func (l *PacketList) PushFront(v Packet) *PacketElement
PushFront inserts a new element e with value v at the front of list l and returns e.
func (*PacketList) PushFrontList ¶
func (l *PacketList) PushFrontList(other *PacketList)
PushFrontList inserts a copy of an other list at the front of list l. The lists l and other may be the same.
func (*PacketList) Remove ¶
func (l *PacketList) Remove(e *PacketElement) Packet
Remove removes e from l if e is an element of list l. It returns the element value e.Value.
type ReceivedPacketHandler ¶
type ReceivedPacketHandler interface { ReceivedPacket(packetNumber protocol.PacketNumber, rcvTime time.Time, shouldInstigateAck bool) error IgnoreBelow(protocol.PacketNumber) GetAlarmTimeout() time.Time GetAckFrame() *wire.AckFrame }
ReceivedPacketHandler handles ACKs needed to send for incoming packets
func NewReceivedPacketHandler ¶
func NewReceivedPacketHandler(version protocol.VersionNumber) ReceivedPacketHandler
NewReceivedPacketHandler creates a new receivedPacketHandler
type SentPacketHandler ¶
type SentPacketHandler interface { // SentPacket may modify the packet SentPacket(packet *Packet) error ReceivedAck(ackFrame *wire.AckFrame, withPacketNumber protocol.PacketNumber, encLevel protocol.EncryptionLevel, recvTime time.Time) error SetHandshakeComplete() // SendingAllowed says if a packet can be sent. // Sending packets might not be possible because: // * we're congestion limited // * we're tracking the maximum number of sent packets SendingAllowed() bool // TimeUntilSend is the time when the next packet should be sent. // It is used for pacing packets. TimeUntilSend() time.Time // ShouldSendNumPackets returns the number of packets that should be sent immediately. // It always returns a number greater or equal than 1. // A number greater than 1 is returned when the pacing delay is smaller than the minimum pacing delay. // Note that the number of packets is only calculated based on the pacing algorithm. // Before sending any packet, SendingAllowed() must be called to learn if we can actually send it. ShouldSendNumPackets() int GetStopWaitingFrame(force bool) *wire.StopWaitingFrame GetLowestPacketNotConfirmedAcked() protocol.PacketNumber DequeuePacketForRetransmission() (packet *Packet) GetLeastUnacked() protocol.PacketNumber GetAlarmTimeout() time.Time OnAlarm() }
SentPacketHandler handles ACKs received for outgoing packets
func NewSentPacketHandler ¶
func NewSentPacketHandler(rttStats *congestion.RTTStats) SentPacketHandler
NewSentPacketHandler creates a new sentPacketHandler