slowdown_sing.go 875 B

123456789101112131415161718192021222324252627282930313233
  1. package proxydialer
  2. import (
  3. "context"
  4. "net"
  5. "github.com/metacubex/mihomo/component/slowdown"
  6. M "github.com/sagernet/sing/common/metadata"
  7. )
  8. type SlowDownSingDialer struct {
  9. SingDialer
  10. Slowdown *slowdown.SlowDown
  11. }
  12. func (d SlowDownSingDialer) DialContext(ctx context.Context, network string, destination M.Socksaddr) (net.Conn, error) {
  13. return slowdown.Do(d.Slowdown, ctx, func() (net.Conn, error) {
  14. return d.SingDialer.DialContext(ctx, network, destination)
  15. })
  16. }
  17. func (d SlowDownSingDialer) ListenPacket(ctx context.Context, destination M.Socksaddr) (net.PacketConn, error) {
  18. return slowdown.Do(d.Slowdown, ctx, func() (net.PacketConn, error) {
  19. return d.SingDialer.ListenPacket(ctx, destination)
  20. })
  21. }
  22. func NewSlowDownSingDialer(d SingDialer, sd *slowdown.SlowDown) SlowDownSingDialer {
  23. return SlowDownSingDialer{
  24. SingDialer: d,
  25. Slowdown: sd,
  26. }
  27. }