Merge pull request #3432 from lucas-clemente/quicv2

implement QUIC v2
This commit is contained in:
Marten Seemann
2022-06-09 15:52:40 +02:00
committed by GitHub
36 changed files with 1246 additions and 1046 deletions

View File

@@ -44,7 +44,7 @@ const (
)
func versionToALPN(v protocol.VersionNumber) string {
if v == protocol.Version1 {
if v == protocol.Version1 || v == protocol.Version2 {
return nextProtoH3
}
if v == protocol.VersionTLS || v == protocol.VersionDraft29 {
@@ -63,11 +63,9 @@ func ConfigureTLSConfig(tlsConf *tls.Config) *tls.Config {
return &tls.Config{
GetConfigForClient: func(ch *tls.ClientHelloInfo) (*tls.Config, error) {
// determine the ALPN from the QUIC version used
proto := nextProtoH3Draft29
proto := nextProtoH3
if qconn, ok := ch.Conn.(handshake.ConnWithVersion); ok {
if qconn.GetQUICVersion() == protocol.Version1 {
proto = nextProtoH3
}
proto = versionToALPN(qconn.GetQUICVersion())
}
config := tlsConf
if tlsConf.GetConfigForClient != nil {

View File

@@ -934,24 +934,24 @@ var _ = Describe("Server", func() {
ch = &tls.ClientHelloInfo{}
})
It("advertises draft by default", func() {
It("advertises v1 by default", func() {
tlsConf = ConfigureTLSConfig(tlsConf)
Expect(tlsConf.GetConfigForClient).NotTo(BeNil())
config, err := tlsConf.GetConfigForClient(ch)
Expect(err).NotTo(HaveOccurred())
Expect(config.NextProtos).To(Equal([]string{nextProtoH3Draft29}))
})
It("advertises h3 for quic version 1", func() {
tlsConf = ConfigureTLSConfig(tlsConf)
Expect(tlsConf.GetConfigForClient).NotTo(BeNil())
ch.Conn = newMockConn(protocol.Version1)
config, err := tlsConf.GetConfigForClient(ch)
Expect(err).NotTo(HaveOccurred())
Expect(config.NextProtos).To(Equal([]string{nextProtoH3}))
})
It("advertises h3-29 for draft-29", func() {
tlsConf = ConfigureTLSConfig(tlsConf)
Expect(tlsConf.GetConfigForClient).NotTo(BeNil())
ch.Conn = newMockConn(protocol.VersionDraft29)
config, err := tlsConf.GetConfigForClient(ch)
Expect(err).NotTo(HaveOccurred())
Expect(config.NextProtos).To(Equal([]string{nextProtoH3Draft29}))
})
})
Context("Serve", func() {