forked from quic-go/quic-go
calculate correct MinLength for QUIC 34 ACK frames with ACK ranges
ref #182
This commit is contained in:
@@ -237,12 +237,17 @@ func (f *AckFrameNew) MinLength(version protocol.VersionNumber) (protocol.ByteCo
|
||||
length = 1 + 2 + 1 + 1 + 4 // 1 TypeByte, 2 ACK delay time, 1 Num Timestamp, 1 Delta Largest Observed, 4 FirstTimestamp
|
||||
length += protocol.ByteCount(protocol.GetPacketNumberLength(f.LargestObserved))
|
||||
// for the first ACK block length
|
||||
length += protocol.ByteCount(protocol.PacketNumberLen6)
|
||||
|
||||
missingSequenceNumberDeltaLen := protocol.ByteCount(protocol.PacketNumberLen6)
|
||||
|
||||
if f.HasMissingRanges() {
|
||||
length += (1 + missingSequenceNumberDeltaLen) * protocol.ByteCount(len(f.AckRanges))
|
||||
} else {
|
||||
length += missingSequenceNumberDeltaLen
|
||||
}
|
||||
|
||||
length += (1 + 2) * 0 /* TODO: num_timestamps */
|
||||
if f.HasMissingRanges() {
|
||||
panic("NACKs not yet implemented")
|
||||
}
|
||||
|
||||
return length, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -249,7 +249,8 @@ var _ = Describe("AckFrame", func() {
|
||||
f := &AckFrameNew{
|
||||
LargestObserved: 1,
|
||||
}
|
||||
f.Write(b, 0)
|
||||
err := f.Write(b, 0)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(f.MinLength(0)).To(Equal(protocol.ByteCount(b.Len())))
|
||||
})
|
||||
|
||||
@@ -257,7 +258,22 @@ var _ = Describe("AckFrame", func() {
|
||||
f := &AckFrameNew{
|
||||
LargestObserved: 0xDEADBEEFCAFE,
|
||||
}
|
||||
f.Write(b, 0)
|
||||
err := f.Write(b, 0)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(f.MinLength(0)).To(Equal(protocol.ByteCount(b.Len())))
|
||||
})
|
||||
|
||||
It("has the proper min length for an ACK with missing packets", func() {
|
||||
f := &AckFrameNew{
|
||||
LargestObserved: 2000,
|
||||
AckRanges: []AckRange{
|
||||
AckRange{FirstPacketNumber: 1000, LastPacketNumber: 2000},
|
||||
AckRange{FirstPacketNumber: 50, LastPacketNumber: 900},
|
||||
AckRange{FirstPacketNumber: 1, LastPacketNumber: 23},
|
||||
},
|
||||
}
|
||||
err := f.Write(b, 0)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(f.MinLength(0)).To(Equal(protocol.ByteCount(b.Len())))
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user