From a19933d51f1171d79179a4daa8d55e72101b5007 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 3 May 2016 14:40:45 +0700 Subject: [PATCH] don't send packets containing only a StopWaitingFrame fixes #41 --- packet_packer.go | 5 +++++ packet_packer_test.go | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/packet_packer.go b/packet_packer.go index 67729c9a..26849e52 100644 --- a/packet_packer.go +++ b/packet_packer.go @@ -101,6 +101,11 @@ func (p *packetPacker) composeNextPacket(stopWaitingFrame *frames.StopWaitingFra payloadLength := 0 var payloadFrames []frames.Frame + // don't send out packets that only contain a StopWaitingFrame + if len(controlFrames) == 0 && p.streamFrameQueue.Len() == 0 { + return nil, nil + } + // TODO: handle the case where there are more controlFrames than we can put into one packet if stopWaitingFrame != nil { payloadFrames = append(payloadFrames, stopWaitingFrame) diff --git a/packet_packer_test.go b/packet_packer_test.go index 24db4372..c7c9f6aa 100644 --- a/packet_packer_test.go +++ b/packet_packer_test.go @@ -69,6 +69,13 @@ var _ = Describe("Packet packer", func() { Expect(p.frames[0]).To(Equal(swf)) }) + It("does not pack a packet containing only a StopWaitingFrame", func() { + swf := &frames.StopWaitingFrame{LeastUnacked: 10} + p, err := packer.PackPacket(swf, []frames.Frame{}, false) + Expect(p).To(BeNil()) + Expect(err).ToNot(HaveOccurred()) + }) + It("packs many control frames into 1 packets", func() { f := &frames.AckFrame{LargestObserved: 1} b := &bytes.Buffer{}