ignore repeated ACKs in new SentPacketHandler

fixes #218
This commit is contained in:
Marten Seemann
2016-07-13 22:03:14 +08:00
parent 21746d7e06
commit 903130da20
2 changed files with 19 additions and 0 deletions

View File

@@ -159,6 +159,11 @@ func (h *sentPacketHandler) ReceivedAck(ackFrame *frames.AckFrameNew, withPacket
h.largestReceivedPacketWithAck = withPacketNumber
// ignore repeated ACK (ACKs that don't have a higher LargestAcked than the last ACK)
if ackFrame.LargestAcked <= h.LargestInOrderAcked {
return nil
}
h.LargestAcked = ackFrame.LargestAcked
// Update the RTT

View File

@@ -216,6 +216,20 @@ var _ = Describe("SentPacketHandler", func() {
Expect(err).To(MatchError(errAckForUnsentPacket))
Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(len(packets))))
})
It("ignores repeated ACKs", func() {
ack := frames.AckFrameNew{
LargestAcked: 3,
LowestAcked: 1,
}
err := handler.ReceivedAck(&ack, 1337)
Expect(err).ToNot(HaveOccurred())
Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(len(packets) - 3)))
err = handler.ReceivedAck(&ack, 1337+1)
Expect(err).ToNot(HaveOccurred())
Expect(handler.LargestAcked).To(Equal(protocol.PacketNumber(3)))
Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(len(packets) - 3)))
})
})
Context("acks and nacks the right packets", func() {