diff --git a/internal/handshake/crypto_setup_tls.go b/internal/handshake/crypto_setup_tls.go index 3eb16b6a8..ee8ee8233 100644 --- a/internal/handshake/crypto_setup_tls.go +++ b/internal/handshake/crypto_setup_tls.go @@ -63,8 +63,6 @@ type cryptoSetupTLS struct { handshakeErrChan chan struct{} // HandleData() sends errors on the messageErrChan messageErrChan chan error - // handshakeComplete is closed when the handshake completes - handshakeComplete chan<- struct{} // handshakeDone is closed as soon as the go routine running qtls.Handshake() returns handshakeDone chan struct{} // transport parameters are sent on the receivedTransportParams, as soon as they are received @@ -110,7 +108,6 @@ func NewCryptoSetupTLSClient( connID protocol.ConnectionID, params *TransportParameters, handleParams func(*TransportParameters), - handshakeComplete chan<- struct{}, tlsConf *tls.Config, initialVersion protocol.VersionNumber, supportedVersions []protocol.VersionNumber, @@ -124,7 +121,6 @@ func NewCryptoSetupTLSClient( connID, params, handleParams, - handshakeComplete, tlsConf, versionInfo{ currentVersion: currentVersion, @@ -143,7 +139,6 @@ func NewCryptoSetupTLSServer( connID protocol.ConnectionID, params *TransportParameters, handleParams func(*TransportParameters), - handshakeComplete chan<- struct{}, tlsConf *tls.Config, supportedVersions []protocol.VersionNumber, currentVersion protocol.VersionNumber, @@ -156,7 +151,6 @@ func NewCryptoSetupTLSServer( connID, params, handleParams, - handshakeComplete, tlsConf, versionInfo{ currentVersion: currentVersion, @@ -174,7 +168,6 @@ func newCryptoSetupTLS( connID protocol.ConnectionID, params *TransportParameters, handleParams func(*TransportParameters), - handshakeComplete chan<- struct{}, tlsConf *tls.Config, versionInfo versionInfo, logger utils.Logger, @@ -191,7 +184,6 @@ func newCryptoSetupTLS( readEncLevel: protocol.EncryptionInitial, writeEncLevel: protocol.EncryptionInitial, handleParamsCallback: handleParams, - handshakeComplete: handshakeComplete, logger: logger, perspective: perspective, handshakeDone: make(chan struct{}), @@ -256,7 +248,6 @@ func (h *cryptoSetupTLS) RunHandshake() error { <-handshakeErrChan return errors.New("Handshake aborted") case <-handshakeComplete: // return when the handshake is done - close(h.handshakeComplete) return nil case err := <-handshakeErrChan: // if handleMessageFor{server,client} are waiting for some qtls action, make them return diff --git a/internal/handshake/crypto_setup_tls_test.go b/internal/handshake/crypto_setup_tls_test.go index b19059472..b53678e1d 100644 --- a/internal/handshake/crypto_setup_tls_test.go +++ b/internal/handshake/crypto_setup_tls_test.go @@ -63,7 +63,6 @@ var _ = Describe("Crypto Setup TLS", func() { protocol.ConnectionID{}, &TransportParameters{}, func(p *TransportParameters) {}, - make(chan struct{}), testdata.GetTLSConfig(), []protocol.VersionNumber{protocol.VersionTLS}, protocol.VersionTLS, @@ -94,7 +93,6 @@ var _ = Describe("Crypto Setup TLS", func() { protocol.ConnectionID{}, &TransportParameters{}, func(p *TransportParameters) {}, - make(chan struct{}), testdata.GetTLSConfig(), []protocol.VersionNumber{protocol.VersionTLS}, protocol.VersionTLS, @@ -124,7 +122,6 @@ var _ = Describe("Crypto Setup TLS", func() { protocol.ConnectionID{}, &TransportParameters{}, func(p *TransportParameters) {}, - make(chan struct{}), testdata.GetTLSConfig(), []protocol.VersionNumber{protocol.VersionTLS}, protocol.VersionTLS, @@ -204,7 +201,6 @@ var _ = Describe("Crypto Setup TLS", func() { protocol.ConnectionID{}, &TransportParameters{}, func(p *TransportParameters) {}, - make(chan struct{}), clientConf, protocol.VersionTLS, []protocol.VersionNumber{protocol.VersionTLS}, @@ -221,7 +217,6 @@ var _ = Describe("Crypto Setup TLS", func() { protocol.ConnectionID{}, &TransportParameters{StatelessResetToken: bytes.Repeat([]byte{42}, 16)}, func(p *TransportParameters) {}, - make(chan struct{}), serverConf, []protocol.VersionNumber{protocol.VersionTLS}, protocol.VersionTLS, @@ -261,7 +256,6 @@ var _ = Describe("Crypto Setup TLS", func() { protocol.ConnectionID{}, &TransportParameters{}, func(p *TransportParameters) {}, - make(chan struct{}), &tls.Config{InsecureSkipVerify: true}, protocol.VersionTLS, []protocol.VersionNumber{protocol.VersionTLS}, @@ -301,7 +295,6 @@ var _ = Describe("Crypto Setup TLS", func() { protocol.ConnectionID{}, cTransportParameters, func(p *TransportParameters) { sTransportParametersRcvd = p }, - make(chan struct{}), &tls.Config{ServerName: "quic.clemente.io"}, protocol.VersionTLS, []protocol.VersionNumber{protocol.VersionTLS}, @@ -322,7 +315,6 @@ var _ = Describe("Crypto Setup TLS", func() { protocol.ConnectionID{}, sTransportParameters, func(p *TransportParameters) { cTransportParametersRcvd = p }, - make(chan struct{}), testdata.GetTLSConfig(), []protocol.VersionNumber{protocol.VersionTLS}, protocol.VersionTLS, diff --git a/session.go b/session.go index 6c10e0144..c5cbd6be6 100644 --- a/session.go +++ b/session.go @@ -123,7 +123,7 @@ type session struct { // It receives when it makes sense to try decrypting undecryptable packets. // Only used for gQUIC. handshakeEvent <-chan struct{} - handshakeCompleteChan <-chan struct{} // is closed when the handshake completes + handshakeCompleteChan chan struct{} // is closed when the handshake completes handshakeComplete bool receivedFirstPacket bool // since packet numbers start at 0, we can't use largestRcvdPacketNumber != 0 for this @@ -327,7 +327,6 @@ func newTLSServerSession( logger utils.Logger, v protocol.VersionNumber, ) (quicSession, error) { - handshakeCompleteChan := make(chan struct{}) s := &session{ conn: conn, sessionRunner: runner, @@ -335,7 +334,7 @@ func newTLSServerSession( srcConnID: srcConnID, destConnID: destConnID, perspective: protocol.PerspectiveServer, - handshakeCompleteChan: handshakeCompleteChan, + handshakeCompleteChan: make(chan struct{}), logger: logger, version: v, } @@ -350,7 +349,6 @@ func newTLSServerSession( origConnID, params, s.processTransportParameters, - handshakeCompleteChan, tlsConf, conf.Versions, v, @@ -402,7 +400,6 @@ var newTLSClientSession = func( logger utils.Logger, v protocol.VersionNumber, ) (quicSession, error) { - handshakeCompleteChan := make(chan struct{}) s := &session{ conn: conn, sessionRunner: runner, @@ -410,7 +407,7 @@ var newTLSClientSession = func( srcConnID: srcConnID, destConnID: destConnID, perspective: protocol.PerspectiveClient, - handshakeCompleteChan: handshakeCompleteChan, + handshakeCompleteChan: make(chan struct{}), logger: logger, version: v, } @@ -423,7 +420,6 @@ var newTLSClientSession = func( s.destConnID, params, s.processTransportParameters, - handshakeCompleteChan, tlsConf, initialVersion, conf.Versions, @@ -494,6 +490,10 @@ func (s *session) run() error { go func() { if err := s.cryptoStreamHandler.RunHandshake(); err != nil { s.closeLocal(err) + return + } + if s.version.UsesTLS() { + close(s.handshakeCompleteChan) } }() if s.version.UsesTLS() && s.perspective == protocol.PerspectiveClient {