From b35c161f2ed73003d5a33d3630c6a8a393d39f06 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Mon, 11 Feb 2019 15:30:40 +0800 Subject: [PATCH] don't ignore reordered ACKs --- internal/ackhandler/sent_packet_handler.go | 9 +-------- internal/ackhandler/sent_packet_handler_test.go | 13 ------------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/internal/ackhandler/sent_packet_handler.go b/internal/ackhandler/sent_packet_handler.go index 06c32692..806bb916 100644 --- a/internal/ackhandler/sent_packet_handler.go +++ b/internal/ackhandler/sent_packet_handler.go @@ -30,8 +30,7 @@ type sentPacketHandler struct { nextSendTime time.Time - largestAcked protocol.PacketNumber - largestReceivedWithAck protocol.PacketNumber + largestAcked protocol.PacketNumber // lowestNotConfirmedAcked is the lowest packet number that we sent an ACK for, but haven't received confirmation, that this ACK actually arrived // example: we send an ACK for packets 90-100 with packet number 20 // once we receive an ACK from the peer for packet 20, the lowestNotConfirmedAcked is 101 @@ -176,12 +175,6 @@ func (h *sentPacketHandler) ReceivedAck(ackFrame *wire.AckFrame, withPacketNumbe return qerr.Error(qerr.InvalidAckData, "Received ACK for an unsent package") } - // duplicate or out of order ACK - if withPacketNumber != 0 && withPacketNumber < h.largestReceivedWithAck { - h.logger.Debugf("Ignoring ACK frame (duplicate or out of order).") - return nil - } - h.largestReceivedWithAck = withPacketNumber h.largestAcked = utils.MaxPacketNumber(h.largestAcked, largestAcked) if !h.packetNumberGenerator.Validate(ackFrame) { diff --git a/internal/ackhandler/sent_packet_handler_test.go b/internal/ackhandler/sent_packet_handler_test.go index 951c3337..bd24120b 100644 --- a/internal/ackhandler/sent_packet_handler_test.go +++ b/internal/ackhandler/sent_packet_handler_test.go @@ -159,19 +159,6 @@ var _ = Describe("SentPacketHandler", func() { Expect(handler.largestAcked).To(Equal(protocol.PacketNumber(4))) }) - It("rejects out of order ACKs", func() { - // acks packets 0, 1, 2, 3 - ack1 := &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 0, Largest: 3}}} - ack2 := &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 0, Largest: 4}}} - err := handler.ReceivedAck(ack1, 1337, protocol.Encryption1RTT, time.Now()) - Expect(err).ToNot(HaveOccurred()) - // this wouldn't happen in practive - // a receiver wouldn't send an ACK for a lower largest acked in a packet sent later - err = handler.ReceivedAck(ack2, 1337-1, protocol.Encryption1RTT, time.Now()) - Expect(err).ToNot(HaveOccurred()) - Expect(handler.largestAcked).To(Equal(protocol.PacketNumber(3))) - }) - It("rejects ACKs with a too high LargestAcked packet number", func() { ack := &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 0, Largest: 9999}}} err := handler.ReceivedAck(ack, 1, protocol.Encryption1RTT, time.Now())