@@ -201,7 +201,7 @@ func (h *cryptoSetup) SetLargest1RTTAcked(pn protocol.PacketNumber) error {
201
201
}
202
202
203
203
func (h * cryptoSetup ) StartHandshake () error {
204
- events , err := h .conn .Start (context .WithValue (context .Background (), QUICVersionContextKey , h .version ))
204
+ err := h .conn .Start (context .WithValue (context .Background (), QUICVersionContextKey , h .version ))
205
205
if h .perspective == protocol .PerspectiveClient {
206
206
if false && h .zeroRTTSealer != nil && h .zeroRTTParameters != nil {
207
207
h .logger .Debugf ("Doing 0-RTT." )
@@ -214,8 +214,16 @@ func (h *cryptoSetup) StartHandshake() error {
214
214
if err != nil {
215
215
return err
216
216
}
217
- _ , err = h .handleEvents (events )
218
- return err
217
+ for {
218
+ ev := h .conn .NextEvent ()
219
+ if ev .Kind == tls .QUICNoEvent {
220
+ break
221
+ }
222
+ if err := h .handleEvent (ev ); err != nil {
223
+ return err
224
+ }
225
+ }
226
+ return nil
219
227
}
220
228
221
229
func (h * cryptoSetup ) onError (alert uint8 , message string ) {
@@ -235,45 +243,41 @@ func (h *cryptoSetup) Close() error { return h.conn.Close() }
235
243
// HandleMessage handles a TLS handshake message.
236
244
// It is called by the crypto streams when a new message is available.
237
245
func (h * cryptoSetup ) HandleMessage (data []byte , encLevel protocol.EncryptionLevel ) {
238
- events , err := h .conn .HandleData (encLevel .ToTLSEncryptionLevel (), data )
239
- if err != nil {
240
- h .onError (0 , err .Error ())
241
- }
242
- retry , err := h .handleEvents (events )
243
- if err != nil {
246
+ if err := h .conn .HandleData (encLevel .ToTLSEncryptionLevel (), data ); err != nil {
244
247
h .onError (0 , err .Error ())
245
248
}
246
- if retry {
247
- h .HandleMessage (nil , protocol .EncryptionHandshake )
249
+ for {
250
+ ev := h .conn .NextEvent ()
251
+ if ev .Kind == tls .QUICNoEvent {
252
+ break
253
+ }
254
+ if err := h .handleEvent (ev ); err != nil {
255
+ h .onError (0 , err .Error ())
256
+ }
248
257
}
249
258
}
250
259
251
- func (h * cryptoSetup ) handleEvents (events []tls.QUICEvent ) (bool , error ) {
252
- var retry bool
253
- for _ , ev := range events {
254
- var err error
255
- switch ev .Kind {
256
- case tls .QUICSetReadSecret :
257
- h .SetReadKey (ev .Level , ev .Suite , ev .Data )
258
- case tls .QUICSetWriteSecret :
259
- h .SetWriteKey (ev .Level , ev .Suite , ev .Data )
260
- case tls .QUICTransportParameters :
261
- err = h .handleTransportParameters (ev .Data )
262
- case tls .QUICTransportParametersRequired :
263
- h .conn .SetTransportParameters (h .ourParams .Marshal (h .perspective ))
264
- retry = true
265
- case tls .QUICWriteData :
266
- err = h .WriteRecord (ev .Level , ev .Data )
267
- case tls .QUICHandshakeDone :
268
- h .handshakeComplete ()
269
- default :
270
- return false , fmt .Errorf ("unexpected event: %d" , ev .Kind )
271
- }
272
- if err != nil {
273
- return false , err
274
- }
260
+ func (h * cryptoSetup ) handleEvent (ev tls.QUICEvent ) error {
261
+ switch ev .Kind {
262
+ case tls .QUICSetReadSecret :
263
+ h .SetReadKey (ev .Level , ev .Suite , ev .Data )
264
+ return nil
265
+ case tls .QUICSetWriteSecret :
266
+ h .SetWriteKey (ev .Level , ev .Suite , ev .Data )
267
+ return nil
268
+ case tls .QUICTransportParameters :
269
+ return h .handleTransportParameters (ev .Data )
270
+ case tls .QUICTransportParametersRequired :
271
+ h .conn .SetTransportParameters (h .ourParams .Marshal (h .perspective ))
272
+ return nil
273
+ case tls .QUICWriteData :
274
+ return h .WriteRecord (ev .Level , ev .Data )
275
+ case tls .QUICHandshakeDone :
276
+ h .handshakeComplete ()
277
+ return nil
278
+ default :
279
+ return fmt .Errorf ("unexpected event: %d" , ev .Kind )
275
280
}
276
- return retry , nil
277
281
}
278
282
279
283
func (h * cryptoSetup ) handleTransportParameters (data []byte ) error {
0 commit comments