From 21746d7e06e69c8cccd4cd0a21240e15b6b56564 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 13 Jul 2016 21:57:19 +0800 Subject: [PATCH] ignore repeated ACKs in legacy SentPacketHandler ref #218 --- ackhandlerlegacy/sent_packet_handler.go | 5 +++++ ackhandlerlegacy/sent_packet_handler_test.go | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/ackhandlerlegacy/sent_packet_handler.go b/ackhandlerlegacy/sent_packet_handler.go index 3c6f7d84..0cb7e6d1 100644 --- a/ackhandlerlegacy/sent_packet_handler.go +++ b/ackhandlerlegacy/sent_packet_handler.go @@ -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 diff --git a/ackhandlerlegacy/sent_packet_handler_test.go b/ackhandlerlegacy/sent_packet_handler_test.go index f186e6f1..3d2f8752 100644 --- a/ackhandlerlegacy/sent_packet_handler_test.go +++ b/ackhandlerlegacy/sent_packet_handler_test.go @@ -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,