2017-12-12 02:51:45 +00:00
package ackhandler
import (
2018-01-03 19:19:49 +00:00
"github.com/lucas-clemente/quic-go/internal/protocol"
"github.com/lucas-clemente/quic-go/internal/wire"
2017-12-12 02:51:45 +00:00
)
// This stopWaitingManager is not supposed to satisfy the StopWaitingManager interface, which is a remnant of the legacy AckHandler, and should be remove once we drop support for QUIC 33
type stopWaitingManager struct {
largestLeastUnackedSent protocol . PacketNumber
nextLeastUnacked protocol . PacketNumber
2018-01-03 19:19:49 +00:00
lastStopWaitingFrame * wire . StopWaitingFrame
2017-12-12 02:51:45 +00:00
}
2018-01-03 19:19:49 +00:00
func ( s * stopWaitingManager ) GetStopWaitingFrame ( force bool ) * wire . StopWaitingFrame {
2017-12-12 02:51:45 +00:00
if s . nextLeastUnacked <= s . largestLeastUnackedSent {
if force {
return s . lastStopWaitingFrame
}
return nil
}
s . largestLeastUnackedSent = s . nextLeastUnacked
2018-01-03 19:19:49 +00:00
swf := & wire . StopWaitingFrame {
2017-12-12 02:51:45 +00:00
LeastUnacked : s . nextLeastUnacked ,
}
s . lastStopWaitingFrame = swf
return swf
}
2018-01-03 19:19:49 +00:00
func ( s * stopWaitingManager ) ReceivedAck ( ack * wire . AckFrame ) {
2017-12-12 02:51:45 +00:00
if ack . LargestAcked >= s . nextLeastUnacked {
s . nextLeastUnacked = ack . LargestAcked + 1
}
}
func ( s * stopWaitingManager ) QueuedRetransmissionForPacketNumber ( p protocol . PacketNumber ) {
if p >= s . nextLeastUnacked {
s . nextLeastUnacked = p + 1
}
}