forked from quic-go/quic-go
refactor DetectLostPackets to match the draft
This commit is contained in:
@@ -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
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user