ignore repeated ACKs in legacy SentPacketHandler

ref #218
This commit is contained in:
Marten Seemann
2016-07-13 21:57:19 +08:00
parent 38098954f4
commit 21746d7e06
2 changed files with 18 additions and 0 deletions

View File

@@ -184,6 +184,11 @@ func (h *sentPacketHandler) ReceivedAck(ackFrame *frames.AckFrameLegacy, withPac
h.largestReceivedPacketWithAck = withPacketNumber
// ignore repeated ACK (ACKs that don't have a higher LargestObserved than the last ACK)
if ackFrame.LargestObserved <= h.highestInOrderAckedPacketNumber {
return nil
}
expectedEntropy, err := h.calculateExpectedEntropy(ackFrame)
if err != nil {
return err

View File

@@ -375,6 +375,19 @@ var _ = Describe("SentPacketHandler", func() {
Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(3)))
})
It("ignores repeated ACKs", func() {
ack := frames.AckFrameLegacy{
LargestObserved: 3,
}
err := handler.ReceivedAck(&ack, 1337)
Expect(err).ToNot(HaveOccurred())
Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(3)))
err = handler.ReceivedAck(&ack, 1337+1)
Expect(err).ToNot(HaveOccurred())
Expect(handler.LargestObserved).To(Equal(protocol.PacketNumber(3)))
Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(3)))
})
It("rejects ACKs with a too high LargestObserved packet number", func() {
ack := frames.AckFrameLegacy{
LargestObserved: packets[len(packets)-1].PacketNumber + 1337,