From c98afd6625e80052b0fedc8fb472b616a4b81898 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Thu, 10 May 2018 10:30:20 +0900 Subject: [PATCH] simplify version negotiation in the client --- client.go | 29 +++++++++-------------------- client_test.go | 4 +--- 2 files changed, 10 insertions(+), 23 deletions(-) diff --git a/client.go b/client.go index 692ca3c14..3bb3b0ecd 100644 --- a/client.go +++ b/client.go @@ -23,8 +23,7 @@ type client struct { conn connection hostname string - versionNegotiationChan chan struct{} // the versionNegotiationChan is closed as soon as the server accepted the suggested version - versionNegotiated bool // has the server accepted our version + versionNegotiated bool // has the server accepted our version receivedVersionNegotiationPacket bool negotiatedVersions []protocol.VersionNumber // the list of versions from the version negotiation packet @@ -106,15 +105,14 @@ func Dial( } } c := &client{ - conn: &conn{pconn: pconn, currentAddr: remoteAddr}, - srcConnID: srcConnID, - destConnID: destConnID, - hostname: hostname, - tlsConf: tlsConf, - config: clientConfig, - version: version, - versionNegotiationChan: make(chan struct{}), - logger: utils.DefaultLogger, + conn: &conn{pconn: pconn, currentAddr: remoteAddr}, + srcConnID: srcConnID, + destConnID: destConnID, + hostname: hostname, + tlsConf: tlsConf, + config: clientConfig, + version: version, + logger: utils.DefaultLogger, } c.logger.Infof("Starting new connection to %s (%s -> %s), source connection ID %s, destination connection ID %s, version %s", hostname, c.conn.LocalAddr(), c.conn.RemoteAddr(), c.srcConnID, c.destConnID, c.version) @@ -256,13 +254,6 @@ func (c *client) establishSecureConnection() error { } }() - // wait until the server accepts the QUIC version (or an error occurs) - select { - case <-errorChan: - return runErr - case <-c.versionNegotiationChan: - } - select { case <-errorChan: return runErr @@ -361,7 +352,6 @@ func (c *client) handleIETFQUICPacket(hdr *wire.Header, packetData []byte, remot // since it is not a Version Negotiation Packet, this means the server supports the suggested version if !c.versionNegotiated { c.versionNegotiated = true - close(c.versionNegotiationChan) } c.session.handlePacket(&receivedPacket{ @@ -399,7 +389,6 @@ func (c *client) handleGQUICPacket(hdr *wire.Header, r *bytes.Reader, packetData // since it is not a Version Negotiation Packet, this means the server supports the suggested version if !c.versionNegotiated { c.versionNegotiated = true - close(c.versionNegotiationChan) } c.session.handlePacket(&receivedPacket{ diff --git a/client_test.go b/client_test.go index ca3f8c686..5e7a1f774 100644 --- a/client_test.go +++ b/client_test.go @@ -60,8 +60,7 @@ var _ = Describe("Client", func() { session: sess, version: protocol.SupportedVersions[0], conn: &conn{pconn: packetConn, currentAddr: addr}, - versionNegotiationChan: make(chan struct{}), - logger: utils.DefaultLogger, + logger: utils.DefaultLogger, } }) @@ -382,7 +381,6 @@ var _ = Describe("Client", func() { err = cl.handlePacket(nil, b.Bytes()) Expect(err).ToNot(HaveOccurred()) Expect(cl.versionNegotiated).To(BeTrue()) - Expect(cl.versionNegotiationChan).To(BeClosed()) }) It("changes the version after receiving a version negotiation packet", func() {