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

View File

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