From 02ab3480ff2062ab46558c700ac51659a1fea7e5 Mon Sep 17 00:00:00 2001 From: Lucas Clemente Date: Fri, 6 May 2016 12:59:32 +0200 Subject: [PATCH] keep bytesInFlight as protocol.ByteCount --- ackhandler/interfaces.go | 2 +- ackhandler/packet.go | 2 +- ackhandler/sent_packet_handler.go | 4 +-- ackhandler/sent_packet_handler_test.go | 44 +++++++++++++------------- session.go | 4 +-- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/ackhandler/interfaces.go b/ackhandler/interfaces.go index 67aa803d..5e73eb6f 100644 --- a/ackhandler/interfaces.go +++ b/ackhandler/interfaces.go @@ -14,7 +14,7 @@ type SentPacketHandler interface { DequeuePacketForRetransmission() (packet *Packet) - BytesInFlight() uint64 + BytesInFlight() protocol.ByteCount } // ReceivedPacketHandler handles ACKs needed to send for incoming packets diff --git a/ackhandler/packet.go b/ackhandler/packet.go index c0db8f4b..96eba2b7 100644 --- a/ackhandler/packet.go +++ b/ackhandler/packet.go @@ -13,7 +13,7 @@ type Packet struct { Frames []frames.Frame EntropyBit bool Entropy EntropyAccumulator - Length uint64 + Length protocol.ByteCount MissingReports uint8 Retransmitted bool // has this Packet ever been retransmitted diff --git a/ackhandler/sent_packet_handler.go b/ackhandler/sent_packet_handler.go index db30c5ba..73026971 100644 --- a/ackhandler/sent_packet_handler.go +++ b/ackhandler/sent_packet_handler.go @@ -35,7 +35,7 @@ type sentPacketHandler struct { retransmissionQueue []*Packet // ToDo: use better data structure stopWaitingManager StopWaitingManager - bytesInFlight uint64 + bytesInFlight protocol.ByteCount } // NewSentPacketHandler creates a new sentPacketHandler @@ -194,6 +194,6 @@ func (h *sentPacketHandler) DequeuePacketForRetransmission() (packet *Packet) { return packet } -func (h *sentPacketHandler) BytesInFlight() uint64 { +func (h *sentPacketHandler) BytesInFlight() protocol.ByteCount { return h.bytesInFlight } diff --git a/ackhandler/sent_packet_handler_test.go b/ackhandler/sent_packet_handler_test.go index 49444af5..de152073 100644 --- a/ackhandler/sent_packet_handler_test.go +++ b/ackhandler/sent_packet_handler_test.go @@ -39,7 +39,7 @@ var _ = Describe("SentPacketHandler", func() { entropy.Add(packet2.PacketNumber, packet2.EntropyBit) Expect(handler.packetHistory[2].PacketNumber).To(Equal(protocol.PacketNumber(2))) Expect(handler.packetHistory[2].Entropy).To(Equal(entropy)) - Expect(handler.BytesInFlight()).To(Equal(uint64(3))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(3))) }) It("rejects packets with the same packet number", func() { @@ -51,7 +51,7 @@ var _ = Describe("SentPacketHandler", func() { Expect(err).To(HaveOccurred()) Expect(handler.lastSentPacketNumber).To(Equal(protocol.PacketNumber(1))) Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(1))) - Expect(handler.BytesInFlight()).To(Equal(uint64(1))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(1))) }) It("rejects non-consecutive packets", func() { @@ -65,7 +65,7 @@ var _ = Describe("SentPacketHandler", func() { Expect(handler.packetHistory).To(HaveKey(protocol.PacketNumber(1))) Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(2))) Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(2))) - Expect(handler.BytesInFlight()).To(Equal(uint64(1))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(1))) }) It("correctly calculates the entropy, even if the last packet has already been ACKed", func() { @@ -73,7 +73,7 @@ var _ = Describe("SentPacketHandler", func() { packet2 := Packet{PacketNumber: 2, Frames: []frames.Frame{&streamFrame}, EntropyBit: true, Length: 2} err := handler.SentPacket(&packet1) Expect(err).ToNot(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(1))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(1))) entropy := EntropyAccumulator(0) entropy.Add(packet1.PacketNumber, packet1.EntropyBit) ack := frames.AckFrame{ @@ -82,10 +82,10 @@ var _ = Describe("SentPacketHandler", func() { } _, err = handler.ReceivedAck(&ack) Expect(err).ToNot(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(0))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(0))) err = handler.SentPacket(&packet2) Expect(err).ToNot(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(2))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(2))) Expect(handler.lastSentPacketNumber).To(Equal(protocol.PacketNumber(2))) entropy.Add(packet2.PacketNumber, packet2.EntropyBit) Expect(handler.packetHistory[2].Entropy).To(Equal(entropy)) @@ -116,7 +116,7 @@ var _ = Describe("SentPacketHandler", func() { for _, packet := range packets { handler.SentPacket(packet) } - Expect(handler.BytesInFlight()).To(Equal(uint64(6))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(6))) }) It("no NACK ranges", func() { @@ -194,7 +194,7 @@ var _ = Describe("SentPacketHandler", func() { } _, err := handler.ReceivedAck(&ack) Expect(err).To(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(6))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(6))) Expect(err).To(Equal(ErrEntropy)) }) @@ -210,7 +210,7 @@ var _ = Describe("SentPacketHandler", func() { } _, err := handler.ReceivedAck(&ack) Expect(err).ToNot(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(2))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(2))) Expect(handler.LargestObserved).To(Equal(protocol.PacketNumber(largestObserved))) Expect(handler.highestInOrderAckedPacketNumber).To(Equal(protocol.PacketNumber(largestObserved))) Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(largestObserved - 1))) @@ -236,7 +236,7 @@ var _ = Describe("SentPacketHandler", func() { } _, err := handler.ReceivedAck(&ack) Expect(err).ToNot(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(2))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(2))) Expect(handler.LargestObserved).To(Equal(protocol.PacketNumber(largestObserved))) Expect(handler.highestInOrderAckedPacketNumber).To(Equal(protocol.PacketNumber(2))) Expect(handler.packetHistory).ToNot(HaveKey(protocol.PacketNumber(2))) @@ -262,7 +262,7 @@ var _ = Describe("SentPacketHandler", func() { for _, packet := range packets { handler.SentPacket(packet) } - Expect(handler.BytesInFlight()).To(Equal(uint64(6))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(6))) }) Context("ACK validation", func() { @@ -273,11 +273,11 @@ var _ = Describe("SentPacketHandler", func() { } _, err := handler.ReceivedAck(&ack) Expect(err).ToNot(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(3))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(3))) _, err = handler.ReceivedAck(&ack) Expect(err).To(HaveOccurred()) Expect(err).To(Equal(ErrDuplicateOrOutOfOrderAck)) - Expect(handler.BytesInFlight()).To(Equal(uint64(3))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(3))) }) It("rejects out of order ACKs", func() { @@ -287,13 +287,13 @@ var _ = Describe("SentPacketHandler", func() { } _, err := handler.ReceivedAck(&ack) Expect(err).ToNot(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(3))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(3))) ack.LargestObserved-- _, err = handler.ReceivedAck(&ack) Expect(err).To(HaveOccurred()) Expect(err).To(Equal(ErrDuplicateOrOutOfOrderAck)) Expect(handler.LargestObserved).To(Equal(protocol.PacketNumber(largestObserved))) - Expect(handler.BytesInFlight()).To(Equal(uint64(3))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(3))) }) It("rejects ACKs with a too high LargestObserved packet number", func() { @@ -304,7 +304,7 @@ var _ = Describe("SentPacketHandler", func() { Expect(err).To(HaveOccurred()) Expect(err).To(Equal(errAckForUnsentPacket)) Expect(handler.highestInOrderAckedPacketNumber).To(Equal(protocol.PacketNumber(0))) - Expect(handler.BytesInFlight()).To(Equal(uint64(6))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(6))) }) }) @@ -344,7 +344,7 @@ var _ = Describe("SentPacketHandler", func() { for _, packet := range packets { handler.SentPacket(packet) } - Expect(handler.BytesInFlight()).To(Equal(uint64(6))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(6))) }) It("queues a packet for retransmission", func() { @@ -406,7 +406,7 @@ var _ = Describe("SentPacketHandler", func() { Expect(err).NotTo(HaveOccurred()) err = handler.SentPacket(&packet2) Expect(err).NotTo(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(3))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(3))) // ACK 2, NACK 1 ack := frames.AckFrame{ @@ -415,18 +415,18 @@ var _ = Describe("SentPacketHandler", func() { } _, err = handler.ReceivedAck(&ack) Expect(err).NotTo(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(1))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(1))) // Simulate 2 more NACKs handler.nackPacket(1) handler.nackPacket(1) - Expect(handler.BytesInFlight()).To(Equal(uint64(0))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(0))) // Retransmission packet3 := Packet{PacketNumber: 3, EntropyBit: false, Length: 1} err = handler.SentPacket(&packet3) Expect(err).NotTo(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(1))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(1))) // ACK ack = frames.AckFrame{ @@ -434,7 +434,7 @@ var _ = Describe("SentPacketHandler", func() { } _, err = handler.ReceivedAck(&ack) Expect(err).NotTo(HaveOccurred()) - Expect(handler.BytesInFlight()).To(Equal(uint64(0))) + Expect(handler.BytesInFlight()).To(Equal(protocol.ByteCount(0))) }) }) }) diff --git a/session.go b/session.go index 99e0c7ec..67f7db74 100644 --- a/session.go +++ b/session.go @@ -361,7 +361,7 @@ func (s *Session) sendPacket() error { PacketNumber: packet.number, Frames: packet.frames, EntropyBit: packet.entropyBit, - Length: uint64(len(packet.raw)), + Length: protocol.ByteCount(len(packet.raw)), }) if err != nil { return err @@ -452,5 +452,5 @@ func (s *Session) scheduleSending() { } func (s *Session) congestionAllowsSending() bool { - return protocol.ByteCount(s.sentPacketHandler.BytesInFlight()) < 100*protocol.DefaultTCPMSS + return s.sentPacketHandler.BytesInFlight() < 100*protocol.DefaultTCPMSS }