From 5768b492d76303af7a90aa69b798433a587614f7 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 31 Oct 2018 10:05:29 +0700 Subject: [PATCH] introduce a type for unidirctional and bidirectional streams --- internal/protocol/stream_id.go | 19 ++++++++++++++++--- internal/protocol/stream_id_test.go | 8 ++++---- session.go | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/internal/protocol/stream_id.go b/internal/protocol/stream_id.go index 49c4df7e..0e0ab7e9 100644 --- a/internal/protocol/stream_id.go +++ b/internal/protocol/stream_id.go @@ -3,6 +3,16 @@ package protocol // A StreamID in QUIC type StreamID uint64 +// StreamType encodes if this is a unidirectional or bidirectional stream +type StreamType uint8 + +const ( + // StreamTypeUni is a unidirectional stream + StreamTypeUni StreamType = iota + // StreamTypeBidi is a bidirectional stream + StreamTypeBidi +) + // InitiatedBy says if the stream was initiated by the client or by the server func (s StreamID) InitiatedBy() Perspective { if s%2 == 0 { @@ -11,9 +21,12 @@ func (s StreamID) InitiatedBy() Perspective { return PerspectiveServer } -// IsUniDirectional says if this is a unidirectional stream (true) or not (false) -func (s StreamID) IsUniDirectional() bool { - return s%4 >= 2 +//Type says if this is a unidirectional or bidirectional stream +func (s StreamID) Type() StreamType { + if s%4 >= 2 { + return StreamTypeUni + } + return StreamTypeBidi } // MaxBidiStreamID is the highest stream ID that the peer is allowed to open, diff --git a/internal/protocol/stream_id_test.go b/internal/protocol/stream_id_test.go index 72adac35..e19823d3 100644 --- a/internal/protocol/stream_id_test.go +++ b/internal/protocol/stream_id_test.go @@ -14,10 +14,10 @@ var _ = Describe("Stream ID", func() { }) It("tells the directionality", func() { - Expect(StreamID(4).IsUniDirectional()).To(BeFalse()) - Expect(StreamID(5).IsUniDirectional()).To(BeFalse()) - Expect(StreamID(6).IsUniDirectional()).To(BeTrue()) - Expect(StreamID(7).IsUniDirectional()).To(BeTrue()) + Expect(StreamID(4).Type()).To(Equal(StreamTypeBidi)) + Expect(StreamID(5).Type()).To(Equal(StreamTypeBidi)) + Expect(StreamID(6).Type()).To(Equal(StreamTypeUni)) + Expect(StreamID(7).Type()).To(Equal(StreamTypeUni)) }) Context("maximum stream IDs", func() { diff --git a/session.go b/session.go index d6a2716b..12e164fc 100644 --- a/session.go +++ b/session.go @@ -992,7 +992,7 @@ func (s *session) newStream(id protocol.StreamID) streamI { func (s *session) newFlowController(id protocol.StreamID) flowcontrol.StreamFlowController { var initialSendWindow protocol.ByteCount if s.peerParams != nil { - if id.IsUniDirectional() { + if id.Type() == protocol.StreamTypeUni { initialSendWindow = s.peerParams.InitialMaxStreamDataUni } else { if id.InitiatedBy() == s.perspective {