retransmittable.go 844 B

123456789101112131415161718192021222324252627282930313233343536
  1. package ackhandler
  2. import "github.com/lucas-clemente/quic-go/internal/wire"
  3. // Returns a new slice with all non-retransmittable frames deleted.
  4. func stripNonRetransmittableFrames(fs []wire.Frame) []wire.Frame {
  5. res := make([]wire.Frame, 0, len(fs))
  6. for _, f := range fs {
  7. if IsFrameRetransmittable(f) {
  8. res = append(res, f)
  9. }
  10. }
  11. return res
  12. }
  13. // IsFrameRetransmittable returns true if the frame should be retransmitted.
  14. func IsFrameRetransmittable(f wire.Frame) bool {
  15. switch f.(type) {
  16. case *wire.StopWaitingFrame:
  17. return false
  18. case *wire.AckFrame:
  19. return false
  20. default:
  21. return true
  22. }
  23. }
  24. // HasRetransmittableFrames returns true if at least one frame is retransmittable.
  25. func HasRetransmittableFrames(fs []wire.Frame) bool {
  26. for _, f := range fs {
  27. if IsFrameRetransmittable(f) {
  28. return true
  29. }
  30. }
  31. return false
  32. }