|
|
|
@ -4,6 +4,8 @@ import (
|
|
|
|
|
"net" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"context" |
|
|
|
|
|
|
|
|
|
v2net "v2ray.com/core/common/net" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
@ -12,13 +14,13 @@ var (
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type SystemDialer interface { |
|
|
|
|
Dial(source v2net.Address, destination v2net.Destination) (net.Conn, error) |
|
|
|
|
Dial(ctx context.Context, source v2net.Address, destination v2net.Destination) (net.Conn, error) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type DefaultSystemDialer struct { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (v *DefaultSystemDialer) Dial(src v2net.Address, dest v2net.Destination) (net.Conn, error) { |
|
|
|
|
func (v *DefaultSystemDialer) Dial(ctx context.Context, src v2net.Address, dest v2net.Destination) (net.Conn, error) { |
|
|
|
|
dialer := &net.Dialer{ |
|
|
|
|
Timeout: time.Second * 60, |
|
|
|
|
DualStack: true, |
|
|
|
@ -38,7 +40,7 @@ func (v *DefaultSystemDialer) Dial(src v2net.Address, dest v2net.Destination) (n
|
|
|
|
|
} |
|
|
|
|
dialer.LocalAddr = addr |
|
|
|
|
} |
|
|
|
|
return dialer.Dial(dest.Network.SystemString(), dest.NetAddr()) |
|
|
|
|
return dialer.DialContext(ctx, dest.Network.SystemString(), dest.NetAddr()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type SystemDialerAdapter interface { |
|
|
|
@ -55,7 +57,7 @@ func WithAdapter(dialer SystemDialerAdapter) SystemDialer {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (v *SimpleSystemDialer) Dial(src v2net.Address, dest v2net.Destination) (net.Conn, error) { |
|
|
|
|
func (v *SimpleSystemDialer) Dial(ctx context.Context, src v2net.Address, dest v2net.Destination) (net.Conn, error) { |
|
|
|
|
return v.adapter.Dial(dest.Network.SystemString(), dest.NetAddr()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|