increase legacy highestInOrderObserved properly with reordering

fixes #237
This commit is contained in:
Lucas Clemente
2016-08-04 22:47:42 +02:00
parent 29a02c01cb
commit 7d97bc22ec
2 changed files with 21 additions and 6 deletions

View File

@@ -68,16 +68,21 @@ func (h *receivedPacketHandler) ReceivedPacket(packetNumber protocol.PacketNumbe
h.largestObserved = packetNumber
}
if packetNumber == h.highestInOrderObserved+1 {
h.highestInOrderObserved = packetNumber
h.highestInOrderObservedEntropy.Add(packetNumber, entropyBit)
}
h.packetHistory[packetNumber] = packetHistoryEntry{
EntropyBit: entropyBit,
TimeReceived: time.Now(),
}
// Try to increase highestInOrderObserved as far as possible
for {
p, ok := h.packetHistory[h.highestInOrderObserved+1]
if !ok {
break
}
h.highestInOrderObserved++
h.highestInOrderObservedEntropy.Add(h.highestInOrderObserved, p.EntropyBit)
}
h.garbageCollect()
if uint32(len(h.packetHistory)) > protocol.MaxTrackedReceivedPackets {

View File

@@ -31,7 +31,8 @@ var _ = Describe("receivedPacketHandler", func() {
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(3)))
err = handler.ReceivedPacket(protocol.PacketNumber(2), false)
Expect(err).ToNot(HaveOccurred())
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2)))
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(2)))
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(3)))
})
It("rejects packets with packet number 0", func() {
@@ -417,5 +418,14 @@ var _ = Describe("receivedPacketHandler", func() {
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(2)))
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(4)))
})
It("garbage collects after receiving out-of-order packets without STOP_WAITING", func() {
handler.ReceivedPacket(2, true)
handler.ReceivedPacket(1, true)
handler.ReceivedPacket(3, true)
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(1)))
Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(2)))
Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(3)))
})
})
})