implement a function that blocks until an early session can be used

This commit is contained in:
Marten Seemann
2019-07-27 01:06:43 -04:00
parent b06d7b0cba
commit cc76441539
2 changed files with 13 additions and 0 deletions

View File

@@ -143,6 +143,7 @@ type session struct {
undecryptablePackets []*receivedPacket
clientHelloWritten <-chan struct{}
earlySessionReadyChan chan struct{}
handshakeCompleteChan chan struct{} // is closed when the handshake completes
handshakeComplete bool
@@ -345,6 +346,7 @@ func (s *session) preSetup() {
s.rttStats,
s.logger,
)
s.earlySessionReadyChan = make(chan struct{})
if s.config.QuicTracer != nil {
s.traceCallback = func(ev quictrace.Event) {
s.config.QuicTracer.Trace(s.origDestConnID, ev)
@@ -468,6 +470,11 @@ runLoop:
return closeErr.err
}
// blocks until the early session can be used
func (s *session) earlySessionReady() <-chan struct{} {
return s.earlySessionReadyChan
}
func (s *session) HandshakeComplete() context.Context {
return s.handshakeCtx
}
@@ -1013,6 +1020,9 @@ func (s *session) processTransportParameters(data []byte) {
if params.StatelessResetToken != nil {
s.sessionRunner.AddResetToken(*params.StatelessResetToken, s)
}
// On the server side, the early session is ready as soon as we processed
// the client's transport parameters.
close(s.earlySessionReadyChan)
}
func (s *session) processTransportParametersForClient(data []byte) (*handshake.TransportParameters, error) {

View File

@@ -1286,7 +1286,10 @@ var _ = Describe("Session", func() {
}
streamManager.EXPECT().UpdateLimits(params)
packer.EXPECT().HandleTransportParameters(params)
Expect(sess.earlySessionReady()).ToNot(BeClosed())
sess.processTransportParameters(params.Marshal())
Expect(sess.earlySessionReady()).To(BeClosed())
// make the go routine return
streamManager.EXPECT().CloseWithError(gomock.Any())
sessionRunner.EXPECT().Retire(gomock.Any())