cache last StopWaiting in StopWaitingManager and return it if forced

ref #259
This commit is contained in:
Marten Seemann
2016-08-18 12:40:27 +07:00
parent 3bf525ed16
commit 7d05ebf0bb
3 changed files with 25 additions and 10 deletions

View File

@@ -9,17 +9,24 @@ import (
type stopWaitingManager struct {
largestLeastUnackedSent protocol.PacketNumber
nextLeastUnacked protocol.PacketNumber
lastStopWaitingFrame *frames.StopWaitingFrame
}
func (s *stopWaitingManager) GetStopWaitingFrame() *frames.StopWaitingFrame {
func (s *stopWaitingManager) GetStopWaitingFrame(force bool) *frames.StopWaitingFrame {
if s.nextLeastUnacked <= s.largestLeastUnackedSent {
if force {
return s.lastStopWaitingFrame
}
return nil
}
s.largestLeastUnackedSent = s.nextLeastUnacked
return &frames.StopWaitingFrame{
swf := &frames.StopWaitingFrame{
LeastUnacked: s.nextLeastUnacked,
}
s.lastStopWaitingFrame = swf
return swf
}
func (s *stopWaitingManager) ReceivedAck(ack *frames.AckFrame) {