remove the handshakeCompleteChan from the TLS crypto setup

In TLS, we know that the handshake completed when RunHandshake() returns.
This commit is contained in:
Marten Seemann
2018-10-28 13:26:03 +07:00
parent dd6436c093
commit 1227dc8a24
3 changed files with 7 additions and 24 deletions

View File

@@ -63,8 +63,6 @@ type cryptoSetupTLS struct {
handshakeErrChan chan struct{} handshakeErrChan chan struct{}
// HandleData() sends errors on the messageErrChan // HandleData() sends errors on the messageErrChan
messageErrChan chan error 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 is closed as soon as the go routine running qtls.Handshake() returns
handshakeDone chan struct{} handshakeDone chan struct{}
// transport parameters are sent on the receivedTransportParams, as soon as they are received // transport parameters are sent on the receivedTransportParams, as soon as they are received
@@ -110,7 +108,6 @@ func NewCryptoSetupTLSClient(
connID protocol.ConnectionID, connID protocol.ConnectionID,
params *TransportParameters, params *TransportParameters,
handleParams func(*TransportParameters), handleParams func(*TransportParameters),
handshakeComplete chan<- struct{},
tlsConf *tls.Config, tlsConf *tls.Config,
initialVersion protocol.VersionNumber, initialVersion protocol.VersionNumber,
supportedVersions []protocol.VersionNumber, supportedVersions []protocol.VersionNumber,
@@ -124,7 +121,6 @@ func NewCryptoSetupTLSClient(
connID, connID,
params, params,
handleParams, handleParams,
handshakeComplete,
tlsConf, tlsConf,
versionInfo{ versionInfo{
currentVersion: currentVersion, currentVersion: currentVersion,
@@ -143,7 +139,6 @@ func NewCryptoSetupTLSServer(
connID protocol.ConnectionID, connID protocol.ConnectionID,
params *TransportParameters, params *TransportParameters,
handleParams func(*TransportParameters), handleParams func(*TransportParameters),
handshakeComplete chan<- struct{},
tlsConf *tls.Config, tlsConf *tls.Config,
supportedVersions []protocol.VersionNumber, supportedVersions []protocol.VersionNumber,
currentVersion protocol.VersionNumber, currentVersion protocol.VersionNumber,
@@ -156,7 +151,6 @@ func NewCryptoSetupTLSServer(
connID, connID,
params, params,
handleParams, handleParams,
handshakeComplete,
tlsConf, tlsConf,
versionInfo{ versionInfo{
currentVersion: currentVersion, currentVersion: currentVersion,
@@ -174,7 +168,6 @@ func newCryptoSetupTLS(
connID protocol.ConnectionID, connID protocol.ConnectionID,
params *TransportParameters, params *TransportParameters,
handleParams func(*TransportParameters), handleParams func(*TransportParameters),
handshakeComplete chan<- struct{},
tlsConf *tls.Config, tlsConf *tls.Config,
versionInfo versionInfo, versionInfo versionInfo,
logger utils.Logger, logger utils.Logger,
@@ -191,7 +184,6 @@ func newCryptoSetupTLS(
readEncLevel: protocol.EncryptionInitial, readEncLevel: protocol.EncryptionInitial,
writeEncLevel: protocol.EncryptionInitial, writeEncLevel: protocol.EncryptionInitial,
handleParamsCallback: handleParams, handleParamsCallback: handleParams,
handshakeComplete: handshakeComplete,
logger: logger, logger: logger,
perspective: perspective, perspective: perspective,
handshakeDone: make(chan struct{}), handshakeDone: make(chan struct{}),
@@ -256,7 +248,6 @@ func (h *cryptoSetupTLS) RunHandshake() error {
<-handshakeErrChan <-handshakeErrChan
return errors.New("Handshake aborted") return errors.New("Handshake aborted")
case <-handshakeComplete: // return when the handshake is done case <-handshakeComplete: // return when the handshake is done
close(h.handshakeComplete)
return nil return nil
case err := <-handshakeErrChan: case err := <-handshakeErrChan:
// if handleMessageFor{server,client} are waiting for some qtls action, make them return // if handleMessageFor{server,client} are waiting for some qtls action, make them return

View File

@@ -63,7 +63,6 @@ var _ = Describe("Crypto Setup TLS", func() {
protocol.ConnectionID{}, protocol.ConnectionID{},
&TransportParameters{}, &TransportParameters{},
func(p *TransportParameters) {}, func(p *TransportParameters) {},
make(chan struct{}),
testdata.GetTLSConfig(), testdata.GetTLSConfig(),
[]protocol.VersionNumber{protocol.VersionTLS}, []protocol.VersionNumber{protocol.VersionTLS},
protocol.VersionTLS, protocol.VersionTLS,
@@ -94,7 +93,6 @@ var _ = Describe("Crypto Setup TLS", func() {
protocol.ConnectionID{}, protocol.ConnectionID{},
&TransportParameters{}, &TransportParameters{},
func(p *TransportParameters) {}, func(p *TransportParameters) {},
make(chan struct{}),
testdata.GetTLSConfig(), testdata.GetTLSConfig(),
[]protocol.VersionNumber{protocol.VersionTLS}, []protocol.VersionNumber{protocol.VersionTLS},
protocol.VersionTLS, protocol.VersionTLS,
@@ -124,7 +122,6 @@ var _ = Describe("Crypto Setup TLS", func() {
protocol.ConnectionID{}, protocol.ConnectionID{},
&TransportParameters{}, &TransportParameters{},
func(p *TransportParameters) {}, func(p *TransportParameters) {},
make(chan struct{}),
testdata.GetTLSConfig(), testdata.GetTLSConfig(),
[]protocol.VersionNumber{protocol.VersionTLS}, []protocol.VersionNumber{protocol.VersionTLS},
protocol.VersionTLS, protocol.VersionTLS,
@@ -204,7 +201,6 @@ var _ = Describe("Crypto Setup TLS", func() {
protocol.ConnectionID{}, protocol.ConnectionID{},
&TransportParameters{}, &TransportParameters{},
func(p *TransportParameters) {}, func(p *TransportParameters) {},
make(chan struct{}),
clientConf, clientConf,
protocol.VersionTLS, protocol.VersionTLS,
[]protocol.VersionNumber{protocol.VersionTLS}, []protocol.VersionNumber{protocol.VersionTLS},
@@ -221,7 +217,6 @@ var _ = Describe("Crypto Setup TLS", func() {
protocol.ConnectionID{}, protocol.ConnectionID{},
&TransportParameters{StatelessResetToken: bytes.Repeat([]byte{42}, 16)}, &TransportParameters{StatelessResetToken: bytes.Repeat([]byte{42}, 16)},
func(p *TransportParameters) {}, func(p *TransportParameters) {},
make(chan struct{}),
serverConf, serverConf,
[]protocol.VersionNumber{protocol.VersionTLS}, []protocol.VersionNumber{protocol.VersionTLS},
protocol.VersionTLS, protocol.VersionTLS,
@@ -261,7 +256,6 @@ var _ = Describe("Crypto Setup TLS", func() {
protocol.ConnectionID{}, protocol.ConnectionID{},
&TransportParameters{}, &TransportParameters{},
func(p *TransportParameters) {}, func(p *TransportParameters) {},
make(chan struct{}),
&tls.Config{InsecureSkipVerify: true}, &tls.Config{InsecureSkipVerify: true},
protocol.VersionTLS, protocol.VersionTLS,
[]protocol.VersionNumber{protocol.VersionTLS}, []protocol.VersionNumber{protocol.VersionTLS},
@@ -301,7 +295,6 @@ var _ = Describe("Crypto Setup TLS", func() {
protocol.ConnectionID{}, protocol.ConnectionID{},
cTransportParameters, cTransportParameters,
func(p *TransportParameters) { sTransportParametersRcvd = p }, func(p *TransportParameters) { sTransportParametersRcvd = p },
make(chan struct{}),
&tls.Config{ServerName: "quic.clemente.io"}, &tls.Config{ServerName: "quic.clemente.io"},
protocol.VersionTLS, protocol.VersionTLS,
[]protocol.VersionNumber{protocol.VersionTLS}, []protocol.VersionNumber{protocol.VersionTLS},
@@ -322,7 +315,6 @@ var _ = Describe("Crypto Setup TLS", func() {
protocol.ConnectionID{}, protocol.ConnectionID{},
sTransportParameters, sTransportParameters,
func(p *TransportParameters) { cTransportParametersRcvd = p }, func(p *TransportParameters) { cTransportParametersRcvd = p },
make(chan struct{}),
testdata.GetTLSConfig(), testdata.GetTLSConfig(),
[]protocol.VersionNumber{protocol.VersionTLS}, []protocol.VersionNumber{protocol.VersionTLS},
protocol.VersionTLS, protocol.VersionTLS,

View File

@@ -123,7 +123,7 @@ type session struct {
// It receives when it makes sense to try decrypting undecryptable packets. // It receives when it makes sense to try decrypting undecryptable packets.
// Only used for gQUIC. // Only used for gQUIC.
handshakeEvent <-chan struct{} handshakeEvent <-chan struct{}
handshakeCompleteChan <-chan struct{} // is closed when the handshake completes handshakeCompleteChan chan struct{} // is closed when the handshake completes
handshakeComplete bool handshakeComplete bool
receivedFirstPacket bool // since packet numbers start at 0, we can't use largestRcvdPacketNumber != 0 for this 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, logger utils.Logger,
v protocol.VersionNumber, v protocol.VersionNumber,
) (quicSession, error) { ) (quicSession, error) {
handshakeCompleteChan := make(chan struct{})
s := &session{ s := &session{
conn: conn, conn: conn,
sessionRunner: runner, sessionRunner: runner,
@@ -335,7 +334,7 @@ func newTLSServerSession(
srcConnID: srcConnID, srcConnID: srcConnID,
destConnID: destConnID, destConnID: destConnID,
perspective: protocol.PerspectiveServer, perspective: protocol.PerspectiveServer,
handshakeCompleteChan: handshakeCompleteChan, handshakeCompleteChan: make(chan struct{}),
logger: logger, logger: logger,
version: v, version: v,
} }
@@ -350,7 +349,6 @@ func newTLSServerSession(
origConnID, origConnID,
params, params,
s.processTransportParameters, s.processTransportParameters,
handshakeCompleteChan,
tlsConf, tlsConf,
conf.Versions, conf.Versions,
v, v,
@@ -402,7 +400,6 @@ var newTLSClientSession = func(
logger utils.Logger, logger utils.Logger,
v protocol.VersionNumber, v protocol.VersionNumber,
) (quicSession, error) { ) (quicSession, error) {
handshakeCompleteChan := make(chan struct{})
s := &session{ s := &session{
conn: conn, conn: conn,
sessionRunner: runner, sessionRunner: runner,
@@ -410,7 +407,7 @@ var newTLSClientSession = func(
srcConnID: srcConnID, srcConnID: srcConnID,
destConnID: destConnID, destConnID: destConnID,
perspective: protocol.PerspectiveClient, perspective: protocol.PerspectiveClient,
handshakeCompleteChan: handshakeCompleteChan, handshakeCompleteChan: make(chan struct{}),
logger: logger, logger: logger,
version: v, version: v,
} }
@@ -423,7 +420,6 @@ var newTLSClientSession = func(
s.destConnID, s.destConnID,
params, params,
s.processTransportParameters, s.processTransportParameters,
handshakeCompleteChan,
tlsConf, tlsConf,
initialVersion, initialVersion,
conf.Versions, conf.Versions,
@@ -494,6 +490,10 @@ func (s *session) run() error {
go func() { go func() {
if err := s.cryptoStreamHandler.RunHandshake(); err != nil { if err := s.cryptoStreamHandler.RunHandshake(); err != nil {
s.closeLocal(err) s.closeLocal(err)
return
}
if s.version.UsesTLS() {
close(s.handshakeCompleteChan)
} }
}() }()
if s.version.UsesTLS() && s.perspective == protocol.PerspectiveClient { if s.version.UsesTLS() && s.perspective == protocol.PerspectiveClient {