From d25976c083f9c0301c69121e13a2109074234c40 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Thu, 7 Jul 2016 23:20:22 +0800 Subject: [PATCH] NACK packets below the LowestAcked in new SentPacketHandler fixes #204 --- ackhandlernew/sent_packet_handler.go | 11 +++++++++++ ackhandlernew/sent_packet_handler_test.go | 15 +++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/ackhandlernew/sent_packet_handler.go b/ackhandlernew/sent_packet_handler.go index dffd44074..b2d08fbf0 100644 --- a/ackhandlernew/sent_packet_handler.go +++ b/ackhandlernew/sent_packet_handler.go @@ -168,6 +168,17 @@ func (h *sentPacketHandler) ReceivedAck(ackFrame *frames.AckFrameNew, withPacket var ackedPackets congestion.PacketVector var lostPackets congestion.PacketVector + // NACK packets below the LowestAcked + for i := h.LargestInOrderAcked; i < ackFrame.LowestAcked; i++ { + p, err := h.nackPacket(i) + if err != nil { + return err + } + if p != nil { + lostPackets = append(lostPackets, congestion.PacketInfo{Number: p.PacketNumber, Length: p.Length}) + } + } + ackRangeIndex := 0 for i := ackFrame.LowestAcked; i <= ackFrame.LargestAcked; i++ { if ackFrame.HasMissingRanges() { diff --git a/ackhandlernew/sent_packet_handler_test.go b/ackhandlernew/sent_packet_handler_test.go index 6e427dcbe..c705148fe 100644 --- a/ackhandlernew/sent_packet_handler_test.go +++ b/ackhandlernew/sent_packet_handler_test.go @@ -247,7 +247,6 @@ var _ = Describe("SentPacketHandler", func() { Expect(err).ToNot(HaveOccurred()) Expect(handler.LargestInOrderAcked).To(Equal(protocol.PacketNumber(0))) Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(1))) - Expect(handler.packetHistory[1].MissingReports).To(BeZero()) for i := 2; i <= 8; i++ { Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(i))) } @@ -270,7 +269,6 @@ var _ = Describe("SentPacketHandler", func() { Expect(err).ToNot(HaveOccurred()) Expect(handler.LargestInOrderAcked).To(Equal(protocol.PacketNumber(0))) Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(1))) - Expect(handler.packetHistory[1].MissingReports).To(BeZero()) for i := 2; i <= 3; i++ { Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(i))) } @@ -285,6 +283,19 @@ var _ = Describe("SentPacketHandler", func() { Expect(handler.packetHistory[10].MissingReports).To(BeZero()) }) + It("NACKs packets below the LowestAcked", func() { + ack := frames.AckFrameNew{ + LargestAcked: 8, + LowestAcked: 3, + } + err := handler.ReceivedAck(&ack, 1) + Expect(err).ToNot(HaveOccurred()) + Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(1))) + Expect(handler.packetHistory[1].MissingReports).To(Equal(uint8(1))) + Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(2))) + Expect(handler.packetHistory[2].MissingReports).To(Equal(uint8(1))) + }) + It("handles an ACK with multiple missing packet ranges", func() { ack := frames.AckFrameNew{ LargestAcked: 9,