forked from quic-go/quic-go
@@ -13,6 +13,8 @@ type SentPacketHandler interface {
|
||||
SentPacket(packet *ackhandlerlegacy.Packet) error
|
||||
ReceivedAck(ackFrame *frames.AckFrame, withPacketNumber protocol.PacketNumber) error
|
||||
|
||||
GetStopWaitingFrame() *frames.StopWaitingFrame
|
||||
|
||||
ProbablyHasPacketForRetransmission() bool
|
||||
DequeuePacketForRetransmission() (packet *ackhandlerlegacy.Packet)
|
||||
|
||||
@@ -35,6 +37,7 @@ type ReceivedPacketHandler interface {
|
||||
}
|
||||
|
||||
// StopWaitingManager manages StopWaitings for sent packets
|
||||
// TODO: remove once we drop support for QUIC 33
|
||||
type StopWaitingManager interface {
|
||||
RegisterPacketForRetransmission(packet *ackhandlerlegacy.Packet)
|
||||
GetStopWaitingFrame() *frames.StopWaitingFrame
|
||||
|
||||
@@ -272,6 +272,16 @@ func (h *sentPacketHandler) GetLargestAcked() protocol.PacketNumber {
|
||||
return h.LargestAcked
|
||||
}
|
||||
|
||||
func (h *sentPacketHandler) GetStopWaitingFrame() *frames.StopWaitingFrame {
|
||||
if h.LargestAcked == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &frames.StopWaitingFrame{
|
||||
LeastUnacked: h.LargestAcked + 1,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *sentPacketHandler) CongestionAllowsSending() bool {
|
||||
return h.BytesInFlight() <= h.congestion.GetCongestionWindow()
|
||||
}
|
||||
|
||||
@@ -350,6 +350,17 @@ var _ = Describe("SentPacketHandler", func() {
|
||||
})
|
||||
})
|
||||
|
||||
Context("StopWaitings", func() {
|
||||
It("does not get a StopWaiting if no ACKs haven't been received yet", func() {
|
||||
Expect(handler.GetStopWaitingFrame()).To(BeNil())
|
||||
})
|
||||
|
||||
It("gets a StopWaitingFrame", func() {
|
||||
handler.LargestAcked = 1336
|
||||
Expect(handler.GetStopWaitingFrame()).To(Equal(&frames.StopWaitingFrame{LeastUnacked: 1337}))
|
||||
})
|
||||
})
|
||||
|
||||
Context("calculating RTT", func() {
|
||||
It("calculates the RTT", func() {
|
||||
now := time.Now()
|
||||
|
||||
Reference in New Issue
Block a user