From 52de95f21f01083b851fac9bd09186380ff19210 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Thu, 19 May 2016 13:15:47 +0700 Subject: [PATCH] don't ignore queued control frames when packing a packet --- packet_packer.go | 2 +- packet_packer_test.go | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packet_packer.go b/packet_packer.go index 698d15741..5d9b4c350 100644 --- a/packet_packer.go +++ b/packet_packer.go @@ -66,7 +66,7 @@ func (p *packetPacker) AddBlocked(streamID protocol.StreamID, byteOffset protoco func (p *packetPacker) PackPacket(stopWaitingFrame *frames.StopWaitingFrame, controlFrames []frames.Frame, includeStreamFrames bool) (*packedPacket, error) { // don't send out packets that only contain a StopWaitingFrame - if len(controlFrames) == 0 && (p.streamFrameQueue.Len() == 0 || !includeStreamFrames) { + if len(p.controlFrames) == 0 && len(controlFrames) == 0 && (p.streamFrameQueue.Len() == 0 || !includeStreamFrames) { return nil, nil } diff --git a/packet_packer_test.go b/packet_packer_test.go index 3d35e99b2..0de39e5ba 100644 --- a/packet_packer_test.go +++ b/packet_packer_test.go @@ -114,6 +114,13 @@ var _ = Describe("Packet packer", func() { Expect(err).ToNot(HaveOccurred()) }) + It("packs a packet if it has queued control frames, but no new control frames", func() { + packer.controlFrames = []frames.Frame{&frames.BlockedFrame{StreamID: 0}} + p, err := packer.PackPacket(nil, []frames.Frame{}, false) + Expect(err).ToNot(HaveOccurred()) + Expect(p).ToNot(BeNil()) + }) + It("packs many control frames into 1 packets", func() { f := &frames.AckFrame{LargestObserved: 1} b := &bytes.Buffer{}