refactor DetectLostPackets to match the draft

This commit is contained in:
Marten Seemann
2019-08-08 15:54:04 +07:00
parent 264eaf2a7b
commit 94a760ecff

View File

@@ -373,21 +373,24 @@ func (h *sentPacketHandler) detectLostPackets(
// Minimum time of granularity before packets are deemed lost. // Minimum time of granularity before packets are deemed lost.
lossDelay = utils.MaxDuration(lossDelay, protocol.TimerGranularity) lossDelay = utils.MaxDuration(lossDelay, protocol.TimerGranularity)
// Packets sent before this time are deemed lost.
lostSendTime := now.Add(-lossDelay)
var lostPackets []*Packet var lostPackets []*Packet
pnSpace.history.Iterate(func(packet *Packet) (bool, error) { pnSpace.history.Iterate(func(packet *Packet) (bool, error) {
if packet.PacketNumber > pnSpace.largestAcked { if packet.PacketNumber > pnSpace.largestAcked {
return false, nil return false, nil
} }
timeSinceSent := now.Sub(packet.SendTime) if packet.SendTime.Before(lostSendTime) {
if timeSinceSent > lossDelay {
lostPackets = append(lostPackets, packet) lostPackets = append(lostPackets, packet)
} else if pnSpace.lossTime.IsZero() { } else if pnSpace.lossTime.IsZero() {
// Note: This conditional is only entered once per call // Note: This conditional is only entered once per call
lossTime := packet.SendTime.Add(lossDelay)
if h.logger.Debug() { if h.logger.Debug() {
h.logger.Debugf("\tsetting loss timer for packet %#x (%s) to %s (in %s)", packet.PacketNumber, encLevel, lossDelay, lossDelay-timeSinceSent) h.logger.Debugf("\tsetting loss timer for packet %#x (%s) to %s (in %s)", packet.PacketNumber, encLevel, lossDelay, lossTime)
} }
pnSpace.lossTime = now.Add(lossDelay - timeSinceSent) pnSpace.lossTime = lossTime
} }
return true, nil return true, nil
}) })