forked from quic-go/quic-go
send a HANDSHAKE_DONE frame after handshake completion (as a server)
This commit is contained in:
@@ -603,16 +603,14 @@ func (s *session) handleHandshakeComplete() {
|
||||
|
||||
s.connIDGenerator.SetHandshakeComplete()
|
||||
s.sentPacketHandler.SetHandshakeComplete()
|
||||
// The client completes the handshake first (after sending the CFIN).
|
||||
// We need to make sure it learns about the server completing the handshake,
|
||||
// in order to stop retransmitting handshake packets.
|
||||
// They will stop retransmitting handshake packets when receiving the first 1-RTT packet.
|
||||
|
||||
if s.perspective == protocol.PerspectiveServer {
|
||||
token, err := s.tokenGenerator.NewToken(s.conn.RemoteAddr())
|
||||
if err != nil {
|
||||
s.closeLocal(err)
|
||||
}
|
||||
s.queueControlFrame(&wire.NewTokenFrame{Token: token})
|
||||
s.queueControlFrame(&wire.HandshakeDoneFrame{})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -855,6 +853,7 @@ func (s *session) handleFrame(f wire.Frame, pn protocol.PacketNumber, encLevel p
|
||||
err = s.handleNewConnectionIDFrame(frame)
|
||||
case *wire.RetireConnectionIDFrame:
|
||||
err = s.handleRetireConnectionIDFrame(frame)
|
||||
case *wire.HandshakeDoneFrame:
|
||||
default:
|
||||
err = fmt.Errorf("unexpected frame type: %s", reflect.ValueOf(&frame).Elem().Type().Name())
|
||||
}
|
||||
|
||||
@@ -1239,10 +1239,13 @@ var _ = Describe("Session", func() {
|
||||
Eventually(sess.Context().Done()).Should(BeClosed())
|
||||
})
|
||||
|
||||
It("sends a 1-RTT packet when the handshake completes", func() {
|
||||
It("sends a HANDSHAKE_DONE frame when the handshake completes", func() {
|
||||
done := make(chan struct{})
|
||||
sessionRunner.EXPECT().Retire(clientDestConnID)
|
||||
packer.EXPECT().PackPacket().DoAndReturn(func() (*packedPacket, error) {
|
||||
frames, _ := sess.framer.AppendControlFrames(nil, protocol.MaxByteCount)
|
||||
Expect(frames).ToNot(BeEmpty())
|
||||
Expect(frames[0].Frame).To(BeEquivalentTo(&wire.HandshakeDoneFrame{}))
|
||||
defer close(done)
|
||||
return &packedPacket{
|
||||
header: &wire.ExtendedHeader{},
|
||||
|
||||
Reference in New Issue
Block a user