forked from quic-go/quic-go
fix number of ACK blocks for gaps of 254 packets in QUIC 34 ACKs
ref #182
This commit is contained in:
@@ -312,7 +312,7 @@ func (f *AckFrameNew) numWrittenNackRanges() uint64 {
|
||||
|
||||
lastAckRange := f.AckRanges[i-1]
|
||||
gap := lastAckRange.FirstPacketNumber - ackRange.LastPacketNumber
|
||||
numRanges += 1 + uint64(gap)/0xFF
|
||||
numRanges += 1 + uint64(gap)/(0xFF+1)
|
||||
if uint64(gap)%(0xFF+1) == 0 {
|
||||
numRanges--
|
||||
}
|
||||
|
||||
@@ -244,11 +244,29 @@ var _ = Describe("AckFrame", func() {
|
||||
})
|
||||
|
||||
Context("longer ACK blocks", func() {
|
||||
It("only writes one block for 254 lost packets", func() {
|
||||
frameOrig := &AckFrameNew{
|
||||
LargestObserved: 300,
|
||||
AckRanges: []AckRange{
|
||||
AckRange{FirstPacketNumber: 20 + 254, LastPacketNumber: 300},
|
||||
AckRange{FirstPacketNumber: 1, LastPacketNumber: 19},
|
||||
},
|
||||
}
|
||||
Expect(frameOrig.numWrittenNackRanges()).To(Equal(uint64(2)))
|
||||
err := frameOrig.Write(b, 0)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
r := bytes.NewReader(b.Bytes())
|
||||
frame, err := ParseAckFrameNew(r, 0)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(frame.LargestObserved).To(Equal(frameOrig.LargestObserved))
|
||||
Expect(frame.AckRanges).To(Equal(frameOrig.AckRanges))
|
||||
})
|
||||
|
||||
It("only writes one block for 255 lost packets", func() {
|
||||
frameOrig := &AckFrameNew{
|
||||
LargestObserved: 300,
|
||||
AckRanges: []AckRange{
|
||||
AckRange{FirstPacketNumber: 275, LastPacketNumber: 300},
|
||||
AckRange{FirstPacketNumber: 20 + 255, LastPacketNumber: 300},
|
||||
AckRange{FirstPacketNumber: 1, LastPacketNumber: 19},
|
||||
},
|
||||
}
|
||||
@@ -266,7 +284,7 @@ var _ = Describe("AckFrame", func() {
|
||||
frameOrig := &AckFrameNew{
|
||||
LargestObserved: 300,
|
||||
AckRanges: []AckRange{
|
||||
AckRange{FirstPacketNumber: 276, LastPacketNumber: 300},
|
||||
AckRange{FirstPacketNumber: 20 + 256, LastPacketNumber: 300},
|
||||
AckRange{FirstPacketNumber: 1, LastPacketNumber: 19},
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user