correctly set anti-deadlock timer after the Initial space was dropped

This commit is contained in:
Marten Seemann
2020-04-02 12:44:24 +07:00
parent c10af76a4a
commit c4c372744a
2 changed files with 21 additions and 0 deletions

View File

@@ -441,6 +441,12 @@ func (h *sentPacketHandler) setLossDetectionTimer() {
// PTO alarm
sentTime, encLevel := h.getEarliestSentTimeAndSpace()
if sentTime.IsZero() {
if h.peerCompletedAddressValidation {
panic("didn't expect sentTime to be zero")
}
sentTime = time.Now()
}
h.alarm = sentTime.Add(h.rttStats.PTO(encLevel == protocol.Encryption1RTT) << h.ptoCount)
}

View File

@@ -793,6 +793,21 @@ var _ = Describe("SentPacketHandler", func() {
handler.DropPackets(protocol.EncryptionHandshake)
Expect(handler.GetLossDetectionTimeout()).To(BeZero())
})
It("correctly sets the timer after the Initial packet number space has been dropped", func() {
handler.SentPacket(initialPacket(&Packet{PacketNumber: 1, SendTime: time.Now().Add(-42 * time.Second)}))
Expect(handler.ReceivedAck(
&wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 1, Largest: 1}}},
protocol.EncryptionInitial,
time.Now(),
)).To(Succeed())
handler.SentPacket(handshakePacketNonAckEliciting(&Packet{PacketNumber: 1, SendTime: time.Now()}))
Expect(handler.initialPackets).To(BeNil())
pto := handler.rttStats.PTO(false)
Expect(pto).ToNot(BeZero())
Expect(handler.GetLossDetectionTimeout()).To(BeTemporally("~", time.Now().Add(pto), 10*time.Millisecond))
})
})
Context("Packet-based loss detection", func() {