From e4fc732d37be1d8326b4b4b2c759aa283ca22d59 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 27 Apr 2016 09:46:13 +0700 Subject: [PATCH] only increase packet number in PacketPacker when actually sending a packet --- packet_packer.go | 10 +++++----- packet_packer_test.go | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/packet_packer.go b/packet_packer.go index 2ed308c0..1618f56c 100644 --- a/packet_packer.go +++ b/packet_packer.go @@ -39,11 +39,6 @@ func (p *packetPacker) PackPacket(controlFrames []frames.Frame, includeStreamFra p.mutex.Lock() defer p.mutex.Unlock() // TODO: Split up? - currentPacketNumber := protocol.PacketNumber(atomic.AddUint64( - (*uint64)(&p.lastPacketNumber), - 1, - )) - payloadFrames, err := p.composeNextPacket(controlFrames, includeStreamFrames) if err != nil { return nil, err @@ -53,6 +48,11 @@ func (p *packetPacker) PackPacket(controlFrames []frames.Frame, includeStreamFra return nil, nil } + currentPacketNumber := protocol.PacketNumber(atomic.AddUint64( + (*uint64)(&p.lastPacketNumber), + 1, + )) + payload, err := p.getPayload(payloadFrames, currentPacketNumber) if err != nil { return nil, err diff --git a/packet_packer_test.go b/packet_packer_test.go index d4e15dd4..94a0a31e 100644 --- a/packet_packer_test.go +++ b/packet_packer_test.go @@ -99,6 +99,27 @@ var _ = Describe("Packet packer", func() { // Expect(len(payloadFrames)).To(Equal(counter - maxFramesPerPacket)) // }) + It("only increases the packet number when there is an actual packet to send", func() { + f := frames.StreamFrame{ + StreamID: 5, + Data: []byte{0xDE, 0xCA, 0xFB, 0xAD}, + } + packer.AddStreamFrame(f) + p, err := packer.PackPacket([]frames.Frame{}, true) + Expect(p).ToNot(BeNil()) + Expect(err).ToNot(HaveOccurred()) + Expect(packer.lastPacketNumber).To(Equal(protocol.PacketNumber(1))) + p, err = packer.PackPacket([]frames.Frame{}, true) + Expect(p).To(BeNil()) + Expect(err).ToNot(HaveOccurred()) + Expect(packer.lastPacketNumber).To(Equal(protocol.PacketNumber(1))) + packer.AddStreamFrame(f) + p, err = packer.PackPacket([]frames.Frame{}, true) + Expect(p).ToNot(BeNil()) + Expect(err).ToNot(HaveOccurred()) + Expect(packer.lastPacketNumber).To(Equal(protocol.PacketNumber(2))) + }) + Context("Stream Frame handling", func() { It("does not splits a stream frame with maximum size", func() { maxStreamFrameDataLen := protocol.MaxFrameSize - (1 + 4 + 8 + 2)