forked from quic-go/quic-go
open the crypto stream during session setup
This commit is contained in:
20
session.go
20
session.go
@@ -258,21 +258,24 @@ func (s *session) setup(
|
||||
)
|
||||
s.unpacker = &packetUnpacker{aead: s.cryptoSetup, version: s.version}
|
||||
|
||||
// open the crypto stream
|
||||
if s.perspective == protocol.PerspectiveServer {
|
||||
_, _ = s.GetOrOpenStream(1)
|
||||
_, _ = s.AcceptStream() // don't expose the crypto stream
|
||||
} else {
|
||||
_, _ = s.OpenStream()
|
||||
}
|
||||
|
||||
return s, handshakeChan, nil
|
||||
}
|
||||
|
||||
// run the session main loop
|
||||
func (s *session) run() error {
|
||||
// Start the crypto stream handler
|
||||
var cryptoStream Stream
|
||||
if s.perspective == protocol.PerspectiveServer {
|
||||
cryptoStream, _ = s.GetOrOpenStream(1)
|
||||
_, _ = s.AcceptStream() // don't expose the crypto stream
|
||||
} else {
|
||||
cryptoStream, _ = s.OpenStream()
|
||||
}
|
||||
defer s.ctxCancel()
|
||||
|
||||
// Start the crypto stream handler
|
||||
go func() {
|
||||
cryptoStream, _ := s.GetOrOpenStream(1)
|
||||
if err := s.cryptoSetup.HandleCryptoStream(cryptoStream); err != nil {
|
||||
s.Close(err)
|
||||
}
|
||||
@@ -366,7 +369,6 @@ runLoop:
|
||||
s.handshakeChan <- handshakeEvent{err: closeErr.err}
|
||||
}
|
||||
s.handleCloseError(closeErr)
|
||||
defer s.ctxCancel()
|
||||
return closeErr.err
|
||||
}
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ var _ = Describe("Session", func() {
|
||||
)
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
sess = pSess.(*session)
|
||||
Expect(sess.streamsMap.openStreams).To(BeEmpty()) // the crypto stream is opened in session.run()
|
||||
Expect(sess.streamsMap.openStreams).To(HaveLen(1)) // 1 stream: the crypto stream
|
||||
|
||||
sess.connParams = &mockParamsNegotiator{}
|
||||
})
|
||||
@@ -684,15 +684,15 @@ var _ = Describe("Session", func() {
|
||||
}()
|
||||
Consistently(strChan).ShouldNot(Receive())
|
||||
err := sess.handleStreamFrame(&wire.StreamFrame{
|
||||
StreamID: 3,
|
||||
StreamID: 5,
|
||||
Data: []byte("foobar"),
|
||||
})
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
var str Stream
|
||||
Eventually(strChan).Should(Receive(&str))
|
||||
Expect(str.StreamID()).To(Equal(protocol.StreamID(1)))
|
||||
Eventually(strChan).Should(Receive(&str))
|
||||
Expect(str.StreamID()).To(Equal(protocol.StreamID(3)))
|
||||
Eventually(strChan).Should(Receive(&str))
|
||||
Expect(str.StreamID()).To(Equal(protocol.StreamID(5)))
|
||||
})
|
||||
|
||||
It("stops accepting when the session is closed", func() {
|
||||
@@ -1684,7 +1684,7 @@ var _ = Describe("Client Session", func() {
|
||||
)
|
||||
sess = sessP.(*session)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(sess.streamsMap.openStreams).To(BeEmpty()) // the crypto stream is opened in session.run()
|
||||
Expect(sess.streamsMap.openStreams).To(HaveLen(1))
|
||||
})
|
||||
|
||||
AfterEach(func() {
|
||||
|
||||
Reference in New Issue
Block a user