send a StopWaiting with every ACK in QUIC 34

fixes #185
This commit is contained in:
Marten Seemann
2016-07-29 18:00:05 +07:00
parent 73a64fde5f
commit 7604f7927d
7 changed files with 40 additions and 3 deletions

View File

@@ -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

View File

@@ -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()
}

View File

@@ -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()