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]
|
lastAckRange := f.AckRanges[i-1]
|
||||||
gap := lastAckRange.FirstPacketNumber - ackRange.LastPacketNumber
|
gap := lastAckRange.FirstPacketNumber - ackRange.LastPacketNumber
|
||||||
numRanges += 1 + uint64(gap)/0xFF
|
numRanges += 1 + uint64(gap)/(0xFF+1)
|
||||||
if uint64(gap)%(0xFF+1) == 0 {
|
if uint64(gap)%(0xFF+1) == 0 {
|
||||||
numRanges--
|
numRanges--
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -244,11 +244,29 @@ var _ = Describe("AckFrame", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
Context("longer ACK blocks", 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() {
|
It("only writes one block for 255 lost packets", func() {
|
||||||
frameOrig := &AckFrameNew{
|
frameOrig := &AckFrameNew{
|
||||||
LargestObserved: 300,
|
LargestObserved: 300,
|
||||||
AckRanges: []AckRange{
|
AckRanges: []AckRange{
|
||||||
AckRange{FirstPacketNumber: 275, LastPacketNumber: 300},
|
AckRange{FirstPacketNumber: 20 + 255, LastPacketNumber: 300},
|
||||||
AckRange{FirstPacketNumber: 1, LastPacketNumber: 19},
|
AckRange{FirstPacketNumber: 1, LastPacketNumber: 19},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -266,7 +284,7 @@ var _ = Describe("AckFrame", func() {
|
|||||||
frameOrig := &AckFrameNew{
|
frameOrig := &AckFrameNew{
|
||||||
LargestObserved: 300,
|
LargestObserved: 300,
|
||||||
AckRanges: []AckRange{
|
AckRanges: []AckRange{
|
||||||
AckRange{FirstPacketNumber: 276, LastPacketNumber: 300},
|
AckRange{FirstPacketNumber: 20 + 256, LastPacketNumber: 300},
|
||||||
AckRange{FirstPacketNumber: 1, LastPacketNumber: 19},
|
AckRange{FirstPacketNumber: 1, LastPacketNumber: 19},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user