forked from quic-go/quic-go
make it possible to configure the QUIC versions for the server
This commit is contained in:
@@ -1,11 +1,5 @@
|
||||
package protocol
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// VersionNumber is a version number as int
|
||||
type VersionNumber int
|
||||
|
||||
@@ -24,12 +18,6 @@ var SupportedVersions = []VersionNumber{
|
||||
Version35, Version36, Version37,
|
||||
}
|
||||
|
||||
// SupportedVersionsAsTags is needed for the SHLO crypto message
|
||||
var SupportedVersionsAsTags []byte
|
||||
|
||||
// SupportedVersionsAsString is needed for the Alt-Scv HTTP header
|
||||
var SupportedVersionsAsString string
|
||||
|
||||
// VersionNumberToTag maps version numbers ('32') to tags ('Q032')
|
||||
func VersionNumberToTag(vn VersionNumber) uint32 {
|
||||
v := uint32(vn)
|
||||
@@ -42,8 +30,8 @@ func VersionTagToNumber(v uint32) VersionNumber {
|
||||
}
|
||||
|
||||
// IsSupportedVersion returns true if the server supports this version
|
||||
func IsSupportedVersion(v VersionNumber) bool {
|
||||
for _, t := range SupportedVersions {
|
||||
func IsSupportedVersion(supported []VersionNumber, v VersionNumber) bool {
|
||||
for _, t := range supported {
|
||||
if t == v {
|
||||
return true
|
||||
}
|
||||
@@ -72,20 +60,3 @@ func HighestSupportedVersion(other []VersionNumber) (bool, VersionNumber) {
|
||||
|
||||
return false, 0
|
||||
}
|
||||
|
||||
func init() {
|
||||
var b bytes.Buffer
|
||||
for _, v := range SupportedVersions {
|
||||
s := make([]byte, 4)
|
||||
binary.LittleEndian.PutUint32(s, VersionNumberToTag(v))
|
||||
b.Write(s)
|
||||
}
|
||||
SupportedVersionsAsTags = b.Bytes()
|
||||
|
||||
for i := len(SupportedVersions) - 1; i >= 0; i-- {
|
||||
SupportedVersionsAsString += strconv.Itoa(int(SupportedVersions[i]))
|
||||
if i != 0 {
|
||||
SupportedVersionsAsString += ","
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,17 +14,10 @@ var _ = Describe("Version", func() {
|
||||
Expect(VersionNumberToTag(VersionNumber(123))).To(Equal(uint32('Q' + '1'<<8 + '2'<<16 + '3'<<24)))
|
||||
})
|
||||
|
||||
It("has proper tag list", func() {
|
||||
Expect(SupportedVersionsAsTags).To(Equal([]byte("Q035Q036Q037")))
|
||||
})
|
||||
|
||||
It("has proper version list", func() {
|
||||
Expect(SupportedVersionsAsString).To(Equal("37,36,35"))
|
||||
})
|
||||
|
||||
It("recognizes supported versions", func() {
|
||||
Expect(IsSupportedVersion(0)).To(BeFalse())
|
||||
Expect(IsSupportedVersion(SupportedVersions[0])).To(BeTrue())
|
||||
Expect(IsSupportedVersion(SupportedVersions, 0)).To(BeFalse())
|
||||
Expect(IsSupportedVersion(SupportedVersions, SupportedVersions[0])).To(BeTrue())
|
||||
Expect(IsSupportedVersion(SupportedVersions, SupportedVersions[len(SupportedVersions)-1])).To(BeTrue())
|
||||
})
|
||||
|
||||
It("has supported versions in sorted order", func() {
|
||||
|
||||
Reference in New Issue
Block a user