don't send the same StopWaitingFrame twice

fixes #229
This commit is contained in:
Marten Seemann
2016-07-30 14:15:45 +07:00
parent b7d2a76811
commit 71243ccccb
4 changed files with 77 additions and 17 deletions

View File

@@ -35,7 +35,8 @@ type sentPacketHandler struct {
largestReceivedPacketWithAck protocol.PacketNumber
// TODO: Move into separate class as in chromium
packetHistory map[protocol.PacketNumber]*ackhandlerlegacy.Packet
packetHistory map[protocol.PacketNumber]*ackhandlerlegacy.Packet
stopWaitingManager stopWaitingManager
retransmissionQueue []*ackhandlerlegacy.Packet
@@ -58,9 +59,10 @@ func NewSentPacketHandler() SentPacketHandler {
)
return &sentPacketHandler{
packetHistory: make(map[protocol.PacketNumber]*ackhandlerlegacy.Packet),
rttStats: rttStats,
congestion: congestion,
packetHistory: make(map[protocol.PacketNumber]*ackhandlerlegacy.Packet),
stopWaitingManager: stopWaitingManager{},
rttStats: rttStats,
congestion: congestion,
}
}
@@ -220,6 +222,8 @@ func (h *sentPacketHandler) ReceivedAck(ackFrame *frames.AckFrame, withPacketNum
}
}
h.stopWaitingManager.ReceivedAck(ackFrame)
h.congestion.OnCongestionEvent(
true, /* TODO: rtt updated */
h.BytesInFlight(),
@@ -273,13 +277,7 @@ func (h *sentPacketHandler) GetLargestAcked() protocol.PacketNumber {
}
func (h *sentPacketHandler) GetStopWaitingFrame() *frames.StopWaitingFrame {
if h.LargestAcked == 0 {
return nil
}
return &frames.StopWaitingFrame{
LeastUnacked: h.LargestAcked + 1,
}
return h.stopWaitingManager.GetStopWaitingFrame()
}
func (h *sentPacketHandler) CongestionAllowsSending() bool {