mirror of
https://github.com/refraction-networking/uquic.git
synced 2025-04-05 05:07:36 +03:00
fix dropping of 0-RTT packets
This commit is contained in:
parent
bed802aee5
commit
ad40c9cc83
3 changed files with 23 additions and 14 deletions
|
@ -1036,7 +1036,7 @@ var _ = Describe("SentPacketHandler", func() {
|
||||||
EncryptionLevel: protocol.Encryption0RTT,
|
EncryptionLevel: protocol.Encryption0RTT,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
for i := protocol.PacketNumber(0); i < 6; i++ {
|
for i := protocol.PacketNumber(6); i < 12; i++ {
|
||||||
handler.SentPacket(ackElicitingPacket(&Packet{PacketNumber: i}))
|
handler.SentPacket(ackElicitingPacket(&Packet{PacketNumber: i}))
|
||||||
}
|
}
|
||||||
Expect(handler.bytesInFlight).To(Equal(protocol.ByteCount(12)))
|
Expect(handler.bytesInFlight).To(Equal(protocol.ByteCount(12)))
|
||||||
|
|
|
@ -31,11 +31,12 @@ func (h *sentPacketHistory) GetPacket(p protocol.PacketNumber) *Packet {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Iterate iterates through all packets.
|
// Iterate iterates through all packets.
|
||||||
// The callback must not modify the history.
|
|
||||||
func (h *sentPacketHistory) Iterate(cb func(*Packet) (cont bool, err error)) error {
|
func (h *sentPacketHistory) Iterate(cb func(*Packet) (cont bool, err error)) error {
|
||||||
cont := true
|
cont := true
|
||||||
for el := h.packetList.Front(); cont && el != nil; el = el.Next() {
|
var next *PacketElement
|
||||||
|
for el := h.packetList.Front(); cont && el != nil; el = next {
|
||||||
var err error
|
var err error
|
||||||
|
next = el.Next()
|
||||||
cont, err = cb(&el.Value)
|
cont, err = cb(&el.Value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -45,8 +46,6 @@ func (h *sentPacketHistory) Iterate(cb func(*Packet) (cont bool, err error)) err
|
||||||
}
|
}
|
||||||
|
|
||||||
// FirstOutStanding returns the first outstanding packet.
|
// FirstOutStanding returns the first outstanding packet.
|
||||||
// It must not be modified (e.g. retransmitted).
|
|
||||||
// Use DequeueFirstPacketForRetransmission() to retransmit it.
|
|
||||||
func (h *sentPacketHistory) FirstOutstanding() *Packet {
|
func (h *sentPacketHistory) FirstOutstanding() *Packet {
|
||||||
if !h.HasOutstandingPackets() {
|
if !h.HasOutstandingPackets() {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -90,37 +90,47 @@ var _ = Describe("SentPacketHistory", func() {
|
||||||
|
|
||||||
It("iterates over all packets", func() {
|
It("iterates over all packets", func() {
|
||||||
var iterations []protocol.PacketNumber
|
var iterations []protocol.PacketNumber
|
||||||
err := hist.Iterate(func(p *Packet) (bool, error) {
|
Expect(hist.Iterate(func(p *Packet) (bool, error) {
|
||||||
iterations = append(iterations, p.PacketNumber)
|
iterations = append(iterations, p.PacketNumber)
|
||||||
return true, nil
|
return true, nil
|
||||||
})
|
})).To(Succeed())
|
||||||
Expect(err).ToNot(HaveOccurred())
|
|
||||||
Expect(iterations).To(Equal([]protocol.PacketNumber{10, 14, 18}))
|
Expect(iterations).To(Equal([]protocol.PacketNumber{10, 14, 18}))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("stops iterating", func() {
|
It("stops iterating", func() {
|
||||||
var iterations []protocol.PacketNumber
|
var iterations []protocol.PacketNumber
|
||||||
err := hist.Iterate(func(p *Packet) (bool, error) {
|
Expect(hist.Iterate(func(p *Packet) (bool, error) {
|
||||||
iterations = append(iterations, p.PacketNumber)
|
iterations = append(iterations, p.PacketNumber)
|
||||||
return p.PacketNumber != 14, nil
|
return p.PacketNumber != 14, nil
|
||||||
})
|
})).To(Succeed())
|
||||||
Expect(err).ToNot(HaveOccurred())
|
|
||||||
Expect(iterations).To(Equal([]protocol.PacketNumber{10, 14}))
|
Expect(iterations).To(Equal([]protocol.PacketNumber{10, 14}))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("returns the error", func() {
|
It("returns the error", func() {
|
||||||
testErr := errors.New("test error")
|
testErr := errors.New("test error")
|
||||||
var iterations []protocol.PacketNumber
|
var iterations []protocol.PacketNumber
|
||||||
err := hist.Iterate(func(p *Packet) (bool, error) {
|
Expect(hist.Iterate(func(p *Packet) (bool, error) {
|
||||||
iterations = append(iterations, p.PacketNumber)
|
iterations = append(iterations, p.PacketNumber)
|
||||||
if p.PacketNumber == 14 {
|
if p.PacketNumber == 14 {
|
||||||
return false, testErr
|
return false, testErr
|
||||||
}
|
}
|
||||||
return true, nil
|
return true, nil
|
||||||
})
|
})).To(MatchError(testErr))
|
||||||
Expect(err).To(MatchError(testErr))
|
|
||||||
Expect(iterations).To(Equal([]protocol.PacketNumber{10, 14}))
|
Expect(iterations).To(Equal([]protocol.PacketNumber{10, 14}))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("allows deletions", func() {
|
||||||
|
var iterations []protocol.PacketNumber
|
||||||
|
Expect(hist.Iterate(func(p *Packet) (bool, error) {
|
||||||
|
iterations = append(iterations, p.PacketNumber)
|
||||||
|
if p.PacketNumber == 14 {
|
||||||
|
Expect(hist.Remove(14)).To(Succeed())
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
|
})).To(Succeed())
|
||||||
|
expectInHistory([]protocol.PacketNumber{10, 18})
|
||||||
|
Expect(iterations).To(Equal([]protocol.PacketNumber{10, 14, 18}))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("outstanding packets", func() {
|
Context("outstanding packets", func() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue