Skip to content

Commit f507612

Browse files
use the QUICConn.NextEvent API
1 parent 015ce1c commit f507612

File tree

1 file changed

+40
-36
lines changed

1 file changed

+40
-36
lines changed

internal/handshake/crypto_setup.go

+40-36
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ func (h *cryptoSetup) SetLargest1RTTAcked(pn protocol.PacketNumber) error {
201201
}
202202

203203
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))
205205
if h.perspective == protocol.PerspectiveClient {
206206
if false && h.zeroRTTSealer != nil && h.zeroRTTParameters != nil {
207207
h.logger.Debugf("Doing 0-RTT.")
@@ -214,8 +214,16 @@ func (h *cryptoSetup) StartHandshake() error {
214214
if err != nil {
215215
return err
216216
}
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
219227
}
220228

221229
func (h *cryptoSetup) onError(alert uint8, message string) {
@@ -235,45 +243,41 @@ func (h *cryptoSetup) Close() error { return h.conn.Close() }
235243
// HandleMessage handles a TLS handshake message.
236244
// It is called by the crypto streams when a new message is available.
237245
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 {
244247
h.onError(0, err.Error())
245248
}
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+
}
248257
}
249258
}
250259

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)
275280
}
276-
return retry, nil
277281
}
278282

279283
func (h *cryptoSetup) handleTransportParameters(data []byte) error {

0 commit comments

Comments
 (0)