From 97ab0144790f69fa5074f6de2620f66aaafb01ce Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Mon, 1 Mar 2021 10:46:53 +0800 Subject: [PATCH] don't retransmit 0-RTT packets when 0-RTT is rejected --- internal/ackhandler/sent_packet_handler.go | 9 ++++----- internal/ackhandler/sent_packet_handler_test.go | 5 ++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/internal/ackhandler/sent_packet_handler.go b/internal/ackhandler/sent_packet_handler.go index cfec0c1ed..91ff05a3c 100644 --- a/internal/ackhandler/sent_packet_handler.go +++ b/internal/ackhandler/sent_packet_handler.go @@ -169,15 +169,14 @@ func (h *sentPacketHandler) dropPackets(encLevel protocol.EncryptionLevel) { case protocol.EncryptionHandshake: h.handshakePackets = nil case protocol.Encryption0RTT: - // TODO(#2067): invalidate sent data + // This function is only called when 0-RTT is rejected, + // and not when the client drops 0-RTT keys when the handshake completes. + // When 0-RTT is rejected, all application data sent so far becomes invalid. + // Delete the packets from the history and remove them from bytes_in_flight. h.appDataPackets.history.Iterate(func(p *Packet) (bool, error) { - if p.skippedPacket { - return true, nil - } if p.EncryptionLevel != protocol.Encryption0RTT { return false, nil } - h.queueFramesForRetransmission(p) h.removeFromBytesInFlight(p) h.appDataPackets.history.Remove(p.PacketNumber) return true, nil diff --git a/internal/ackhandler/sent_packet_handler_test.go b/internal/ackhandler/sent_packet_handler_test.go index db093584e..380be3c87 100644 --- a/internal/ackhandler/sent_packet_handler_test.go +++ b/internal/ackhandler/sent_packet_handler_test.go @@ -1078,8 +1078,7 @@ var _ = Describe("SentPacketHandler", func() { Expect(handler.handshakePackets).To(BeNil()) }) - // TODO(#2067): invalidate 0-RTT data when 0-RTT is rejected - It("retransmits 0-RTT packets when 0-RTT keys are dropped", func() { + It("doesn't retransmit 0-RTT packets when 0-RTT keys are dropped", func() { for i := protocol.PacketNumber(0); i < 6; i++ { if i == 3 { continue @@ -1094,7 +1093,7 @@ var _ = Describe("SentPacketHandler", func() { } Expect(handler.bytesInFlight).To(Equal(protocol.ByteCount(11))) handler.DropPackets(protocol.Encryption0RTT) - Expect(lostPackets).To(Equal([]protocol.PacketNumber{0, 1, 2, 4, 5})) + Expect(lostPackets).To(BeEmpty()) Expect(handler.bytesInFlight).To(Equal(protocol.ByteCount(6))) })