Documentation ¶
Index ¶
- 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 SendMode
- type SentPacketHandler
Constants ¶
This section is empty.
Variables ¶
This section is empty.
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 PacketType protocol.PacketType Frames []wire.Frame Length protocol.ByteCount EncryptionLevel protocol.EncryptionLevel SendTime time.Time // contains filtered or unexported fields }
A Packet is a packet
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 is a linked list of Packets.
func (*PacketList) Back ¶
func (l *PacketList) Back() *PacketElement
Back returns the last element of list l or nil if the list is empty.
func (*PacketList) Front ¶
func (l *PacketList) Front() *PacketElement
Front returns the first element of list l or nil if the list is empty.
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. The mark must not be nil.
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. The mark must not be nil.
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 or mark is not an element of l, or e == mark, the list is not modified. The element and mark must not be nil.
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. The element and mark must not be nil.
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. The element must not be nil.
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. The element must not be nil.
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. They must not be nil.
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. They must not be nil.
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. The element must not be nil.
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( rttStats *congestion.RTTStats, logger utils.Logger, version protocol.VersionNumber, ) ReceivedPacketHandler
NewReceivedPacketHandler creates a new receivedPacketHandler
type SendMode ¶
type SendMode uint8
The SendMode says what kind of packets can be sent.
const ( // SendNone means that no packets should be sent SendNone SendMode = iota // SendAck means an ACK-only packet should be sent SendAck // SendRetransmission means that retransmissions should be sent SendRetransmission // SendRTO means that an RTO probe packet should be sent SendRTO // SendTLP means that a TLP probe packet should be sent SendTLP // SendAny means that any packet should be sent SendAny )
type SentPacketHandler ¶
type SentPacketHandler interface { // SentPacket may modify the packet SentPacket(packet *Packet) SentPacketsAsRetransmission(packets []*Packet, retransmissionOf protocol.PacketNumber) ReceivedAck(ackFrame *wire.AckFrame, withPacketNumber protocol.PacketNumber, encLevel protocol.EncryptionLevel, recvTime time.Time) error SetHandshakeComplete() // The SendMode determines if and what kind of packets can be sent. SendMode() SendMode // 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) GetPacketNumberLen(protocol.PacketNumber) protocol.PacketNumberLen GetAlarmTimeout() time.Time OnAlarm() error }
SentPacketHandler handles ACKs received for outgoing packets
func NewSentPacketHandler ¶
func NewSentPacketHandler(rttStats *congestion.RTTStats, logger utils.Logger, version protocol.VersionNumber) SentPacketHandler
NewSentPacketHandler creates a new sentPacketHandler