fix number of ACK blocks for gaps of 254 packets in QUIC 34 ACKs

ref #182
This commit is contained in:
Marten Seemann
2016-06-21 14:20:21 +07:00
parent 74ac98e7a5
commit 4e183194c1
2 changed files with 21 additions and 3 deletions

View File

@@ -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--
}

View File

@@ -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},
},
}