mirror of
https://github.com/refraction-networking/uquic.git
synced 2025-04-03 20:27:35 +03:00
add support for QUIC 42
QUIC 42 accepts overlapping stream data. We've been doing this for some time already, so we don't need any additional changes.
This commit is contained in:
parent
2a4eb9c132
commit
3370f9fa58
3 changed files with 23 additions and 8 deletions
|
@ -4,6 +4,7 @@
|
|||
|
||||
- Add support for unidirectional streams (for IETF QUIC).
|
||||
- Add a `quic.Config` option for the maximum number of incoming streams.
|
||||
- Add support for QUIC 42.
|
||||
|
||||
## v0.7.0 (2018-02-03)
|
||||
|
||||
|
|
|
@ -18,7 +18,8 @@ const (
|
|||
|
||||
// The version numbers, making grepping easier
|
||||
const (
|
||||
Version39 VersionNumber = gquicVersion0 + 3*0x100 + 0x9 + iota
|
||||
Version39 VersionNumber = gquicVersion0 + 3*0x100 + 0x9
|
||||
Version42 VersionNumber = gquicVersion0 + 4*0x100 + 0x2
|
||||
VersionTLS VersionNumber = 101
|
||||
VersionWhatever VersionNumber = 0 // for when the version doesn't matter
|
||||
VersionUnknown VersionNumber = math.MaxUint32
|
||||
|
@ -27,6 +28,7 @@ const (
|
|||
// SupportedVersions lists the versions that the server supports
|
||||
// must be in sorted descending order
|
||||
var SupportedVersions = []VersionNumber{
|
||||
Version42,
|
||||
Version39,
|
||||
}
|
||||
|
||||
|
@ -74,12 +76,12 @@ func (vn VersionNumber) CryptoStreamID() StreamID {
|
|||
|
||||
// UsesIETFFrameFormat tells if this version uses the IETF frame format
|
||||
func (vn VersionNumber) UsesIETFFrameFormat() bool {
|
||||
return vn != Version39
|
||||
return !vn.isGQUIC()
|
||||
}
|
||||
|
||||
// UsesStopWaitingFrames tells if this version uses STOP_WAITING frames
|
||||
func (vn VersionNumber) UsesStopWaitingFrames() bool {
|
||||
return vn == Version39
|
||||
return vn.isGQUIC()
|
||||
}
|
||||
|
||||
// StreamContributesToConnectionFlowControl says if a stream contributes to connection-level flow control
|
||||
|
|
|
@ -13,10 +13,12 @@ var _ = Describe("Version", func() {
|
|||
// version numbers taken from the wiki: https://github.com/quicwg/base-drafts/wiki/QUIC-Versions
|
||||
It("has the right gQUIC version number", func() {
|
||||
Expect(Version39).To(BeEquivalentTo(0x51303339))
|
||||
Expect(Version42).To(BeEquivalentTo(0x51303432))
|
||||
})
|
||||
|
||||
It("says if a version is valid", func() {
|
||||
Expect(IsValidVersion(Version39)).To(BeTrue())
|
||||
Expect(IsValidVersion(Version42)).To(BeTrue())
|
||||
Expect(IsValidVersion(VersionTLS)).To(BeTrue())
|
||||
Expect(IsValidVersion(VersionWhatever)).To(BeFalse())
|
||||
Expect(IsValidVersion(VersionUnknown)).To(BeFalse())
|
||||
|
@ -25,11 +27,13 @@ var _ = Describe("Version", func() {
|
|||
|
||||
It("says if a version supports TLS", func() {
|
||||
Expect(Version39.UsesTLS()).To(BeFalse())
|
||||
Expect(Version42.UsesTLS()).To(BeFalse())
|
||||
Expect(VersionTLS.UsesTLS()).To(BeTrue())
|
||||
})
|
||||
|
||||
It("versions don't have reserved version numbers", func() {
|
||||
Expect(isReservedVersion(Version39)).To(BeFalse())
|
||||
Expect(isReservedVersion(Version42)).To(BeFalse())
|
||||
Expect(isReservedVersion(VersionTLS)).To(BeFalse())
|
||||
})
|
||||
|
||||
|
@ -48,6 +52,7 @@ var _ = Describe("Version", func() {
|
|||
|
||||
It("has the right representation for the H2 Alt-Svc tag", func() {
|
||||
Expect(Version39.ToAltSvc()).To(Equal("39"))
|
||||
Expect(Version42.ToAltSvc()).To(Equal("42"))
|
||||
Expect(VersionTLS.ToAltSvc()).To(Equal("101"))
|
||||
// check with unsupported version numbers from the wiki
|
||||
Expect(VersionNumber(0x51303133).ToAltSvc()).To(Equal("13"))
|
||||
|
@ -57,30 +62,37 @@ var _ = Describe("Version", func() {
|
|||
|
||||
It("tells the Stream ID of the crypto stream", func() {
|
||||
Expect(Version39.CryptoStreamID()).To(Equal(StreamID(1)))
|
||||
Expect(Version42.CryptoStreamID()).To(Equal(StreamID(1)))
|
||||
Expect(VersionTLS.CryptoStreamID()).To(Equal(StreamID(0)))
|
||||
})
|
||||
|
||||
It("tells if a version uses the IETF frame types", func() {
|
||||
Expect(Version39.UsesIETFFrameFormat()).To(BeFalse())
|
||||
Expect(Version42.UsesIETFFrameFormat()).To(BeFalse())
|
||||
Expect(VersionTLS.UsesIETFFrameFormat()).To(BeTrue())
|
||||
})
|
||||
|
||||
It("tells if a version uses the IETF frame types", func() {
|
||||
Expect(Version39.UsesIETFFrameFormat()).To(BeFalse())
|
||||
Expect(Version42.UsesIETFFrameFormat()).To(BeFalse())
|
||||
Expect(VersionTLS.UsesIETFFrameFormat()).To(BeTrue())
|
||||
})
|
||||
|
||||
It("tells if a version uses STOP_WAITING frames", func() {
|
||||
Expect(Version39.UsesStopWaitingFrames()).To(BeTrue())
|
||||
Expect(Version42.UsesStopWaitingFrames()).To(BeTrue())
|
||||
Expect(VersionTLS.UsesStopWaitingFrames()).To(BeFalse())
|
||||
})
|
||||
|
||||
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())
|
||||
for _, v := range []VersionNumber{Version39, Version42} {
|
||||
version := v
|
||||
Expect(version.StreamContributesToConnectionFlowControl(1)).To(BeFalse())
|
||||
Expect(version.StreamContributesToConnectionFlowControl(2)).To(BeTrue())
|
||||
Expect(version.StreamContributesToConnectionFlowControl(3)).To(BeFalse())
|
||||
Expect(version.StreamContributesToConnectionFlowControl(4)).To(BeTrue())
|
||||
Expect(version.StreamContributesToConnectionFlowControl(5)).To(BeTrue())
|
||||
}
|
||||
})
|
||||
|
||||
It("says if a stream contributes to connection-level flowcontrol, for TLS", func() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue