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
|
undecryptablePackets []*receivedPacket
|
||||||
|
|
||||||
clientHelloWritten <-chan struct{}
|
clientHelloWritten <-chan struct{}
|
||||||
|
earlySessionReadyChan chan struct{}
|
||||||
handshakeCompleteChan chan struct{} // is closed when the handshake completes
|
handshakeCompleteChan chan struct{} // is closed when the handshake completes
|
||||||
handshakeComplete bool
|
handshakeComplete bool
|
||||||
|
|
||||||
@@ -345,6 +346,7 @@ func (s *session) preSetup() {
|
|||||||
s.rttStats,
|
s.rttStats,
|
||||||
s.logger,
|
s.logger,
|
||||||
)
|
)
|
||||||
|
s.earlySessionReadyChan = make(chan struct{})
|
||||||
if s.config.QuicTracer != nil {
|
if s.config.QuicTracer != nil {
|
||||||
s.traceCallback = func(ev quictrace.Event) {
|
s.traceCallback = func(ev quictrace.Event) {
|
||||||
s.config.QuicTracer.Trace(s.origDestConnID, ev)
|
s.config.QuicTracer.Trace(s.origDestConnID, ev)
|
||||||
@@ -468,6 +470,11 @@ runLoop:
|
|||||||
return closeErr.err
|
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 {
|
func (s *session) HandshakeComplete() context.Context {
|
||||||
return s.handshakeCtx
|
return s.handshakeCtx
|
||||||
}
|
}
|
||||||
@@ -1013,6 +1020,9 @@ func (s *session) processTransportParameters(data []byte) {
|
|||||||
if params.StatelessResetToken != nil {
|
if params.StatelessResetToken != nil {
|
||||||
s.sessionRunner.AddResetToken(*params.StatelessResetToken, s)
|
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) {
|
func (s *session) processTransportParametersForClient(data []byte) (*handshake.TransportParameters, error) {
|
||||||
|
|||||||
@@ -1286,7 +1286,10 @@ var _ = Describe("Session", func() {
|
|||||||
}
|
}
|
||||||
streamManager.EXPECT().UpdateLimits(params)
|
streamManager.EXPECT().UpdateLimits(params)
|
||||||
packer.EXPECT().HandleTransportParameters(params)
|
packer.EXPECT().HandleTransportParameters(params)
|
||||||
|
Expect(sess.earlySessionReady()).ToNot(BeClosed())
|
||||||
sess.processTransportParameters(params.Marshal())
|
sess.processTransportParameters(params.Marshal())
|
||||||
|
Expect(sess.earlySessionReady()).To(BeClosed())
|
||||||
|
|
||||||
// make the go routine return
|
// make the go routine return
|
||||||
streamManager.EXPECT().CloseWithError(gomock.Any())
|
streamManager.EXPECT().CloseWithError(gomock.Any())
|
||||||
sessionRunner.EXPECT().Retire(gomock.Any())
|
sessionRunner.EXPECT().Retire(gomock.Any())
|
||||||
|
|||||||
Reference in New Issue
Block a user