change supported version to slice, since the order matters for the SHLO

This commit is contained in:
Lucas Clemente
2016-04-16 00:27:03 +02:00
parent 13c0445bb4
commit a2ef4d2dc8
3 changed files with 39 additions and 10 deletions

View File

@@ -1,8 +1,23 @@
package protocol
import (
"bytes"
"github.com/lucas-clemente/quic-go/utils"
)
// VersionNumber is a version number as int
type VersionNumber int
// SupportedVersions lists the versions that the server supports
var SupportedVersions = []VersionNumber{
30,
32,
}
// SupportedVersionsAsTags is needed for the SHLO crypto message
var SupportedVersionsAsTags []byte
// VersionNumberToTag maps version numbers ('32') to tags ('Q032')
func VersionNumberToTag(vn VersionNumber) uint32 {
v := uint32(vn)
@@ -13,3 +28,21 @@ func VersionNumberToTag(vn VersionNumber) uint32 {
func VersionTagToNumber(v uint32) VersionNumber {
return VersionNumber(((v>>8)&0xff-'0')*100 + ((v>>16)&0xff-'0')*10 + ((v>>24)&0xff - '0'))
}
// IsSupportedVersion returns true if the server supports this version
func IsSupportedVersion(v VersionNumber) bool {
for _, t := range SupportedVersions {
if t == v {
return true
}
}
return false
}
func init() {
var b bytes.Buffer
for _, v := range SupportedVersions {
utils.WriteUint32(&b, VersionNumberToTag(v))
}
SupportedVersionsAsTags = b.Bytes()
}

View File

@@ -17,4 +17,8 @@ var _ = Describe("Version", func() {
Expect(protocol.VersionNumberToTag(protocol.VersionNumber(123))).To(Equal(uint32('Q' + '1'<<8 + '2'<<16 + '3'<<24)))
Expect(protocol.VersionNumberToTag(protocol.VersionNumber(30))).To(Equal(uint32('Q' + '0'<<8 + '3'<<16 + '0'<<24)))
})
It("has proper tag list", func() {
Expect(protocol.SupportedVersionsAsTags).To(Equal([]byte("Q030Q032")))
})
})