From 07419c25c5b7d6fe8c250c41a0649fc5f063c463 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Fri, 22 Apr 2016 15:05:55 +0700 Subject: [PATCH] use old AckHandler to fulfil IncomingPacketAckHandler interface --- ackhandler/ack_handler.go | 55 ------------------ ackhandler/incoming_packet_ack_handler.go | 57 +++++++++++++++++++ ...go => incoming_packet_ack_handler_test.go} | 43 +++++++------- 3 files changed, 79 insertions(+), 76 deletions(-) delete mode 100644 ackhandler/ack_handler.go create mode 100644 ackhandler/incoming_packet_ack_handler.go rename ackhandler/{ack_handler_test.go => incoming_packet_ack_handler_test.go} (63%) diff --git a/ackhandler/ack_handler.go b/ackhandler/ack_handler.go deleted file mode 100644 index a7ca1b30..00000000 --- a/ackhandler/ack_handler.go +++ /dev/null @@ -1,55 +0,0 @@ -package ackhandler - -import ( - "github.com/lucas-clemente/quic-go/frames" - "github.com/lucas-clemente/quic-go/protocol" -) - -// The AckHandler handles ACKs -type AckHandler struct { - LargestObserved protocol.PacketNumber - Observed map[protocol.PacketNumber]bool -} - -// NewAckHandler creates a new AckHandler -func NewAckHandler() (*AckHandler, error) { - ackHandler := &AckHandler{ - Observed: make(map[protocol.PacketNumber]bool), - } - return ackHandler, nil -} - -// HandlePacket handles a packet -func (h *AckHandler) HandlePacket(packetNumber protocol.PacketNumber) { - if packetNumber > h.LargestObserved { - h.LargestObserved = packetNumber - } - h.Observed[packetNumber] = true -} - -// GetNackRanges gets all the NACK ranges -func (h *AckHandler) GetNackRanges() []*frames.NackRange { - // ToDo: improve performance - var ranges []*frames.NackRange - inRange := false - // ToDo: fix types - for i := 0; i < int(h.LargestObserved); i++ { - packetNumber := protocol.PacketNumber(i) - _, ok := h.Observed[packetNumber] - if !ok { - if !inRange { - r := &frames.NackRange{ - FirstPacketNumber: packetNumber, - LastPacketNumber: packetNumber, - } - ranges = append(ranges, r) - inRange = true - } else { - ranges[len(ranges)-1].LastPacketNumber++ - } - } else { - inRange = false - } - } - return ranges -} diff --git a/ackhandler/incoming_packet_ack_handler.go b/ackhandler/incoming_packet_ack_handler.go new file mode 100644 index 00000000..794db2e7 --- /dev/null +++ b/ackhandler/incoming_packet_ack_handler.go @@ -0,0 +1,57 @@ +package ackhandler + +import ( + "github.com/lucas-clemente/quic-go/frames" + "github.com/lucas-clemente/quic-go/protocol" +) + +// The AckHandler handles ACKs +type incomingPacketAckHandler struct { + largestObserved protocol.PacketNumber + observed map[protocol.PacketNumber]bool +} + +// NewIncomingPacketAckHandler creates a new outgoingPacketAckHandler +func NewIncomingPacketAckHandler() IncomingPacketAckHandler { + return &incomingPacketAckHandler{ + observed: make(map[protocol.PacketNumber]bool), + } +} + +func (h *incomingPacketAckHandler) ReceivedPacket(packetNumber protocol.PacketNumber, entropyBit bool) { + if packetNumber > h.largestObserved { + h.largestObserved = packetNumber + } + h.observed[packetNumber] = true +} + +// GetNackRanges gets all the NACK ranges +func (h *incomingPacketAckHandler) GetNackRanges() []*frames.NackRange { + // ToDo: improve performance + var ranges []*frames.NackRange + inRange := false + // ToDo: fix types + for i := 0; i < int(h.largestObserved); i++ { + packetNumber := protocol.PacketNumber(i) + _, ok := h.observed[packetNumber] + if !ok { + if !inRange { + r := &frames.NackRange{ + FirstPacketNumber: packetNumber, + LastPacketNumber: packetNumber, + } + ranges = append(ranges, r) + inRange = true + } else { + ranges[len(ranges)-1].LastPacketNumber++ + } + } else { + inRange = false + } + } + return ranges +} + +func (h *incomingPacketAckHandler) DequeueAckFrame() *frames.AckFrame { + return nil +} diff --git a/ackhandler/ack_handler_test.go b/ackhandler/incoming_packet_ack_handler_test.go similarity index 63% rename from ackhandler/ack_handler_test.go rename to ackhandler/incoming_packet_ack_handler_test.go index 3981a393..60fe624c 100644 --- a/ackhandler/ack_handler_test.go +++ b/ackhandler/incoming_packet_ack_handler_test.go @@ -7,56 +7,58 @@ import ( . "github.com/onsi/gomega" ) -var _ = Describe("AckHandler", func() { +var _ = Describe("incomingPacketAckHandler", func() { + var handler *incomingPacketAckHandler + + BeforeEach(func() { + handler = NewIncomingPacketAckHandler().(*incomingPacketAckHandler) + }) + It("Returns no NACK ranges for continously received packets", func() { - ackHandler, _ := NewAckHandler() for i := 0; i < 100; i++ { - ackHandler.HandlePacket(protocol.PacketNumber(i)) + handler.ReceivedPacket(protocol.PacketNumber(i), false) } - Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(99))) - Expect(len(ackHandler.GetNackRanges())).To(Equal(0)) + Expect(handler.largestObserved).To(Equal(protocol.PacketNumber(99))) + Expect(len(handler.GetNackRanges())).To(Equal(0)) }) It("handles a single lost package", func() { - ackHandler, _ := NewAckHandler() for i := 0; i < 10; i++ { if i == 5 { continue } - ackHandler.HandlePacket(protocol.PacketNumber(i)) + handler.ReceivedPacket(protocol.PacketNumber(i), false) } - Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(9))) - nackRanges := ackHandler.GetNackRanges() + Expect(handler.largestObserved).To(Equal(protocol.PacketNumber(9))) + nackRanges := handler.GetNackRanges() Expect(len(nackRanges)).To(Equal(1)) Expect(nackRanges[0].FirstPacketNumber).To(Equal(protocol.PacketNumber(5))) Expect(nackRanges[0].LastPacketNumber).To(Equal(protocol.PacketNumber(5))) }) It("handles two consecutive lost packages", func() { - ackHandler, _ := NewAckHandler() for i := 0; i < 10; i++ { if i == 5 || i == 6 { continue } - ackHandler.HandlePacket(protocol.PacketNumber(i)) + handler.ReceivedPacket(protocol.PacketNumber(i), false) } - Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(9))) - nackRanges := ackHandler.GetNackRanges() + Expect(handler.largestObserved).To(Equal(protocol.PacketNumber(9))) + nackRanges := handler.GetNackRanges() Expect(len(nackRanges)).To(Equal(1)) Expect(nackRanges[0].FirstPacketNumber).To(Equal(protocol.PacketNumber(5))) Expect(nackRanges[0].LastPacketNumber).To(Equal(protocol.PacketNumber(6))) }) It("handles two non-consecutively lost packages", func() { - ackHandler, _ := NewAckHandler() for i := 0; i < 10; i++ { if i == 3 || i == 7 { continue } - ackHandler.HandlePacket(protocol.PacketNumber(i)) + handler.ReceivedPacket(protocol.PacketNumber(i), false) } - Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(9))) - nackRanges := ackHandler.GetNackRanges() + Expect(handler.largestObserved).To(Equal(protocol.PacketNumber(9))) + nackRanges := handler.GetNackRanges() Expect(len(nackRanges)).To(Equal(2)) Expect(nackRanges[0].FirstPacketNumber).To(Equal(protocol.PacketNumber(3))) Expect(nackRanges[0].LastPacketNumber).To(Equal(protocol.PacketNumber(3))) @@ -65,15 +67,14 @@ var _ = Describe("AckHandler", func() { }) It("handles two sequences of lost packages", func() { - ackHandler, _ := NewAckHandler() for i := 0; i < 10; i++ { if i == 2 || i == 3 || i == 4 || i == 7 || i == 8 { continue } - ackHandler.HandlePacket(protocol.PacketNumber(i)) + handler.ReceivedPacket(protocol.PacketNumber(i), false) } - Expect(ackHandler.LargestObserved).To(Equal(protocol.PacketNumber(9))) - nackRanges := ackHandler.GetNackRanges() + Expect(handler.largestObserved).To(Equal(protocol.PacketNumber(9))) + nackRanges := handler.GetNackRanges() Expect(len(nackRanges)).To(Equal(2)) Expect(nackRanges[0].FirstPacketNumber).To(Equal(protocol.PacketNumber(2))) Expect(nackRanges[0].LastPacketNumber).To(Equal(protocol.PacketNumber(4)))