package ackhandler
import (
"github.com/quic-go/quic-go/internal/protocol"
"github.com/quic-go/quic-go/internal/utils"
)
type packetNumberGenerator interface {
Peek() protocol .PacketNumber
Pop() (skipped bool , _ protocol .PacketNumber )
}
type sequentialPacketNumberGenerator struct {
next protocol .PacketNumber
}
var _ packetNumberGenerator = &sequentialPacketNumberGenerator {}
func newSequentialPacketNumberGenerator(initial protocol .PacketNumber ) packetNumberGenerator {
return &sequentialPacketNumberGenerator {next : initial }
}
func (p *sequentialPacketNumberGenerator ) Peek () protocol .PacketNumber {
return p .next
}
func (p *sequentialPacketNumberGenerator ) Pop () (bool , protocol .PacketNumber ) {
next := p .next
p .next ++
return false , next
}
type skippingPacketNumberGenerator struct {
period protocol .PacketNumber
maxPeriod protocol .PacketNumber
next protocol .PacketNumber
nextToSkip protocol .PacketNumber
rng utils .Rand
}
var _ packetNumberGenerator = &skippingPacketNumberGenerator {}
func newSkippingPacketNumberGenerator(initial , initialPeriod , maxPeriod protocol .PacketNumber ) packetNumberGenerator {
g := &skippingPacketNumberGenerator {
next : initial ,
period : initialPeriod ,
maxPeriod : maxPeriod ,
}
g .generateNewSkip ()
return g
}
func (p *skippingPacketNumberGenerator ) Peek () protocol .PacketNumber {
if p .next == p .nextToSkip {
return p .next + 1
}
return p .next
}
func (p *skippingPacketNumberGenerator ) Pop () (bool , protocol .PacketNumber ) {
next := p .next
if p .next == p .nextToSkip {
next ++
p .next += 2
p .generateNewSkip ()
return true , next
}
p .next ++
return false , next
}
func (p *skippingPacketNumberGenerator ) generateNewSkip () {
p .nextToSkip = p .next + 3 + protocol .PacketNumber (p .rng .Int31n (int32 (2 *p .period )))
p .period = min (2 *p .period , p .maxPeriod )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .