retransmit lost packets, send StopWaiting frames

This commit is contained in:
Marten Seemann
2016-04-27 18:56:21 +07:00
parent bd67f537c9
commit 6eeccfd123
3 changed files with 143 additions and 0 deletions

View File

@@ -15,3 +15,30 @@ type Packet struct {
MissingReports uint8
Retransmitted bool // has this Packet ever been retransmitted
}
func (p *Packet) GetStreamFramesForRetransmission() []*frames.StreamFrame {
streamFrames := make([]*frames.StreamFrame, 0)
for _, frame := range p.Frames {
if streamFrame, isStreamFrame := frame.(*frames.StreamFrame); isStreamFrame {
streamFrames = append(streamFrames, streamFrame)
}
}
return streamFrames
}
func (p *Packet) GetControlFramesForRetransmission() []frames.Frame {
controlFrames := make([]frames.Frame, 0)
for _, frame := range p.Frames {
// omit ACKs
if _, isStreamFrame := frame.(*frames.StreamFrame); isStreamFrame {
continue
}
_, isAck := frame.(*frames.AckFrame)
_, isStopWaiting := frame.(*frames.StopWaitingFrame)
if !isAck && !isStopWaiting {
controlFrames = append(controlFrames, frame)
}
}
return controlFrames
}