don't reset the PTO count on Initial ACKs before address validation

This commit is contained in:
Marten Seemann
2020-05-01 09:58:34 +07:00
parent 15a19f681d
commit 538cbf7dc0
2 changed files with 18 additions and 3 deletions

View File

@@ -292,10 +292,13 @@ func (h *sentPacketHandler) ReceivedAck(ack *wire.AckFrame, encLevel protocol.En
}
}
if h.qlogger != nil && h.ptoCount != 0 {
h.qlogger.UpdatedPTOCount(0)
// Reset the pto_count unless the client is unsure if the server has validated the client's address.
if h.peerCompletedAddressValidation {
if h.qlogger != nil && h.ptoCount != 0 {
h.qlogger.UpdatedPTOCount(0)
}
h.ptoCount = 0
}
h.ptoCount = 0
h.numProbesToSend = 0
h.setLossDetectionTimer()

View File

@@ -821,6 +821,18 @@ var _ = Describe("SentPacketHandler", func() {
Expect(pto).ToNot(BeZero())
Expect(handler.GetLossDetectionTimeout()).To(BeTemporally("~", time.Now().Add(pto), 10*time.Millisecond))
})
It("doesn't reset the PTO count when receiving an ACK", func() {
now := time.Now()
handler.SentPacket(initialPacket(&Packet{PacketNumber: 1, SendTime: now.Add(-time.Minute)}))
handler.SentPacket(initialPacket(&Packet{PacketNumber: 2, SendTime: now.Add(-time.Minute)}))
Expect(handler.GetLossDetectionTimeout()).To(BeTemporally("~", now.Add(-time.Minute), time.Second))
Expect(handler.OnLossDetectionTimeout()).To(Succeed())
Expect(handler.SendMode()).To(Equal(SendPTOInitial))
Expect(handler.ptoCount).To(BeEquivalentTo(1))
Expect(handler.ReceivedAck(&wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 1, Largest: 1}}}, protocol.EncryptionInitial, time.Now())).To(Succeed())
Expect(handler.ptoCount).To(BeEquivalentTo(1))
})
})
Context("Packet-based loss detection", func() {