implement parsing of the gQUIC 44 header

This commit is contained in:
Marten Seemann
2018-08-26 16:39:19 +07:00
parent 88505b79a7
commit a98fd88a1b
6 changed files with 242 additions and 29 deletions

View File

@@ -80,11 +80,27 @@ func (vn VersionNumber) UsesIETFFrameFormat() bool {
return !vn.isGQUIC()
}
// UsesIETFHeaderFormat tells if this version uses the IETF header format
func (vn VersionNumber) UsesIETFHeaderFormat() bool {
return !vn.isGQUIC() || vn >= Version44
}
// UsesLengthInHeader tells if this version uses the Length field in the IETF header
func (vn VersionNumber) UsesLengthInHeader() bool {
return !vn.isGQUIC()
}
// UsesTokenInHeader tells if this version uses the Token field in the IETF header
func (vn VersionNumber) UsesTokenInHeader() bool {
return !vn.isGQUIC()
}
// UsesStopWaitingFrames tells if this version uses STOP_WAITING frames
func (vn VersionNumber) UsesStopWaitingFrames() bool {
return vn.isGQUIC() && vn <= Version43
}
// UsesVarintPacketNumbers tells if this version uses 7/14/30 bit packet numbers
func (vn VersionNumber) UsesVarintPacketNumbers() bool {
return !vn.isGQUIC()
}

View File

@@ -75,20 +75,32 @@ var _ = Describe("Version", func() {
It("tells if a version uses the IETF frame types", func() {
Expect(Version39.UsesIETFFrameFormat()).To(BeFalse())
Expect(Version43.UsesIETFFrameFormat()).To(BeFalse())
Expect(Version44.UsesIETFFrameFormat()).To(BeFalse())
Expect(VersionTLS.UsesIETFFrameFormat()).To(BeTrue())
})
It("tells if a version uses the IETF header format", func() {
Expect(Version39.UsesIETFHeaderFormat()).To(BeFalse())
Expect(Version43.UsesIETFHeaderFormat()).To(BeFalse())
Expect(Version44.UsesIETFHeaderFormat()).To(BeTrue())
Expect(VersionTLS.UsesIETFHeaderFormat()).To(BeTrue())
})
It("tells if a version uses varint packet numbers", func() {
Expect(Version39.UsesVarintPacketNumbers()).To(BeFalse())
Expect(Version43.UsesVarintPacketNumbers()).To(BeFalse())
Expect(Version44.UsesVarintPacketNumbers()).To(BeFalse())
Expect(VersionTLS.UsesVarintPacketNumbers()).To(BeTrue())
})
It("tells if a version uses the IETF frame types", func() {
Expect(Version39.UsesIETFFrameFormat()).To(BeFalse())
Expect(Version43.UsesIETFFrameFormat()).To(BeFalse())
Expect(Version44.UsesIETFFrameFormat()).To(BeFalse())
Expect(VersionTLS.UsesIETFFrameFormat()).To(BeTrue())
It("tells if a version uses the Length field in the IETF header", func() {
Expect(Version44.UsesLengthInHeader()).To(BeFalse())
Expect(VersionTLS.UsesLengthInHeader()).To(BeTrue())
})
It("tells if a version uses the Token field in the IETF header", func() {
Expect(Version44.UsesTokenInHeader()).To(BeFalse())
Expect(VersionTLS.UsesTokenInHeader()).To(BeTrue())
})
It("tells if a version uses STOP_WAITING frames", func() {