2018-11-20 17:51:25 -05:00
|
|
|
package ackhandler
|
|
|
|
|
2019-01-17 09:33:18 -05:00
|
|
|
import "v2ray.com/core/external/github.com/lucas-clemente/quic-go/internal/wire"
|
2018-11-20 17:51:25 -05:00
|
|
|
|
|
|
|
// Returns a new slice with all non-retransmittable frames deleted.
|
|
|
|
func stripNonRetransmittableFrames(fs []wire.Frame) []wire.Frame {
|
|
|
|
res := make([]wire.Frame, 0, len(fs))
|
|
|
|
for _, f := range fs {
|
|
|
|
if IsFrameRetransmittable(f) {
|
|
|
|
res = append(res, f)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return res
|
|
|
|
}
|
|
|
|
|
|
|
|
// IsFrameRetransmittable returns true if the frame should be retransmitted.
|
|
|
|
func IsFrameRetransmittable(f wire.Frame) bool {
|
|
|
|
switch f.(type) {
|
|
|
|
case *wire.AckFrame:
|
|
|
|
return false
|
|
|
|
default:
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// HasRetransmittableFrames returns true if at least one frame is retransmittable.
|
|
|
|
func HasRetransmittableFrames(fs []wire.Frame) bool {
|
|
|
|
for _, f := range fs {
|
|
|
|
if IsFrameRetransmittable(f) {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|