forked from quic-go/quic-go
set if a stream contributes to connection flow control
This depends on the version. In gQUIC, stream 1 and 3 don't contribute, in IETF QUIC only stream 0 doesn't contribute.
This commit is contained in:
@@ -68,6 +68,17 @@ func (vn VersionNumber) CryptoStreamID() StreamID {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StreamContributesToConnectionFlowControl says if a stream contributes to connection-level flow control
|
||||||
|
func (vn VersionNumber) StreamContributesToConnectionFlowControl(id StreamID) bool {
|
||||||
|
if id == vn.CryptoStreamID() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if vn.isGQUIC() && id == 3 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (vn VersionNumber) isGQUIC() bool {
|
func (vn VersionNumber) isGQUIC() bool {
|
||||||
return vn > gquicVersion0 && vn <= maxGquicVersion
|
return vn > gquicVersion0 && vn <= maxGquicVersion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,21 @@ var _ = Describe("Version", func() {
|
|||||||
Expect(VersionTLS.CryptoStreamID()).To(Equal(StreamID(0)))
|
Expect(VersionTLS.CryptoStreamID()).To(Equal(StreamID(0)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("says if a stream contributes to connection-level flowcontrol, for gQUIC", func() {
|
||||||
|
Expect(Version39.StreamContributesToConnectionFlowControl(1)).To(BeFalse())
|
||||||
|
Expect(Version39.StreamContributesToConnectionFlowControl(2)).To(BeTrue())
|
||||||
|
Expect(Version39.StreamContributesToConnectionFlowControl(3)).To(BeFalse())
|
||||||
|
Expect(Version39.StreamContributesToConnectionFlowControl(4)).To(BeTrue())
|
||||||
|
Expect(Version39.StreamContributesToConnectionFlowControl(5)).To(BeTrue())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("says if a stream contributes to connection-level flowcontrol, for TLS", func() {
|
||||||
|
Expect(VersionTLS.StreamContributesToConnectionFlowControl(0)).To(BeFalse())
|
||||||
|
Expect(VersionTLS.StreamContributesToConnectionFlowControl(1)).To(BeTrue())
|
||||||
|
Expect(VersionTLS.StreamContributesToConnectionFlowControl(2)).To(BeTrue())
|
||||||
|
Expect(VersionTLS.StreamContributesToConnectionFlowControl(3)).To(BeTrue())
|
||||||
|
})
|
||||||
|
|
||||||
It("recognizes supported versions", func() {
|
It("recognizes supported versions", func() {
|
||||||
Expect(IsSupportedVersion(SupportedVersions, 0)).To(BeFalse())
|
Expect(IsSupportedVersion(SupportedVersions, 0)).To(BeFalse())
|
||||||
Expect(IsSupportedVersion(SupportedVersions, SupportedVersions[0])).To(BeTrue())
|
Expect(IsSupportedVersion(SupportedVersions, SupportedVersions[0])).To(BeTrue())
|
||||||
|
|||||||
@@ -818,18 +818,13 @@ func (s *session) queueResetStreamFrame(id protocol.StreamID, offset protocol.By
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *session) newStream(id protocol.StreamID) streamI {
|
func (s *session) newStream(id protocol.StreamID) streamI {
|
||||||
// TODO: find a better solution for determining which streams contribute to connection level flow control
|
|
||||||
var contributesToConnection bool
|
|
||||||
if id != 0 && id != 1 && id != 3 {
|
|
||||||
contributesToConnection = true
|
|
||||||
}
|
|
||||||
var initialSendWindow protocol.ByteCount
|
var initialSendWindow protocol.ByteCount
|
||||||
if s.peerParams != nil {
|
if s.peerParams != nil {
|
||||||
initialSendWindow = s.peerParams.StreamFlowControlWindow
|
initialSendWindow = s.peerParams.StreamFlowControlWindow
|
||||||
}
|
}
|
||||||
flowController := flowcontrol.NewStreamFlowController(
|
flowController := flowcontrol.NewStreamFlowController(
|
||||||
id,
|
id,
|
||||||
contributesToConnection,
|
s.version.StreamContributesToConnectionFlowControl(id),
|
||||||
s.connFlowController,
|
s.connFlowController,
|
||||||
protocol.ReceiveStreamFlowControlWindow,
|
protocol.ReceiveStreamFlowControlWindow,
|
||||||
protocol.ByteCount(s.config.MaxReceiveStreamFlowControlWindow),
|
protocol.ByteCount(s.config.MaxReceiveStreamFlowControlWindow),
|
||||||
|
|||||||
Reference in New Issue
Block a user