forked from quic-go/quic-go
implement a function that blocks until an early session can be used
This commit is contained in:
10
session.go
10
session.go
@@ -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) {
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user