Merge dialer options

This commit is contained in:
世界 2022-09-03 12:55:10 +08:00
parent b206d0889b
commit 62fa48293a
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
25 changed files with 31 additions and 44 deletions

View file

@ -10,15 +10,12 @@ import (
) )
func New(router adapter.Router, options option.DialerOptions) N.Dialer { func New(router adapter.Router, options option.DialerOptions) N.Dialer {
var dialer N.Dialer
if options.Detour == "" { if options.Detour == "" {
return NewDefault(router, options) dialer = NewDefault(router, options)
} else { } else {
return NewDetour(router, options.Detour) dialer = NewDetour(router, options.Detour)
} }
}
func NewOutbound(router adapter.Router, options option.OutboundDialerOptions) N.Dialer {
dialer := New(router, options.DialerOptions)
domainStrategy := dns.DomainStrategy(options.DomainStrategy) domainStrategy := dns.DomainStrategy(options.DomainStrategy)
if domainStrategy != dns.DomainStrategyAsIS || options.Detour == "" { if domainStrategy != dns.DomainStrategyAsIS || options.Detour == "" {
dialer = NewResolveDialer(router, dialer, domainStrategy, time.Duration(options.FallbackDelay)) dialer = NewResolveDialer(router, dialer, domainStrategy, time.Duration(options.FallbackDelay))

View file

@ -8,7 +8,7 @@ type DirectInboundOptions struct {
} }
type DirectOutboundOptions struct { type DirectOutboundOptions struct {
OutboundDialerOptions DialerOptions
OverrideAddress string `json:"override_address,omitempty"` OverrideAddress string `json:"override_address,omitempty"`
OverridePort uint16 `json:"override_port,omitempty"` OverridePort uint16 `json:"override_port,omitempty"`
ProxyProtocol uint8 `json:"proxy_protocol,omitempty"` ProxyProtocol uint8 `json:"proxy_protocol,omitempty"`

View file

@ -17,7 +17,7 @@ type HysteriaInboundOptions struct {
} }
type HysteriaOutboundOptions struct { type HysteriaOutboundOptions struct {
OutboundDialerOptions DialerOptions
ServerOptions ServerOptions
Up string `json:"up,omitempty"` Up string `json:"up,omitempty"`
UpMbps int `json:"up_mbps,omitempty"` UpMbps int `json:"up_mbps,omitempty"`

View file

@ -113,10 +113,6 @@ type DialerOptions struct {
ReuseAddr bool `json:"reuse_addr,omitempty"` ReuseAddr bool `json:"reuse_addr,omitempty"`
ConnectTimeout Duration `json:"connect_timeout,omitempty"` ConnectTimeout Duration `json:"connect_timeout,omitempty"`
TCPFastOpen bool `json:"tcp_fast_open,omitempty"` TCPFastOpen bool `json:"tcp_fast_open,omitempty"`
}
type OutboundDialerOptions struct {
DialerOptions
DomainStrategy DomainStrategy `json:"domain_strategy,omitempty"` DomainStrategy DomainStrategy `json:"domain_strategy,omitempty"`
FallbackDelay Duration `json:"fallback_delay,omitempty"` FallbackDelay Duration `json:"fallback_delay,omitempty"`
} }

View file

@ -22,7 +22,7 @@ type ShadowsocksDestination struct {
} }
type ShadowsocksOutboundOptions struct { type ShadowsocksOutboundOptions struct {
OutboundDialerOptions DialerOptions
ServerOptions ServerOptions
Method string `json:"method"` Method string `json:"method"`
Password string `json:"password"` Password string `json:"password"`

View file

@ -11,7 +11,7 @@ type ShadowTLSHandshakeOptions struct {
} }
type ShadowTLSOutboundOptions struct { type ShadowTLSOutboundOptions struct {
OutboundDialerOptions DialerOptions
ServerOptions ServerOptions
TLS *OutboundTLSOptions `json:"tls,omitempty"` TLS *OutboundTLSOptions `json:"tls,omitempty"`
} }

View file

@ -15,7 +15,7 @@ type HTTPMixedInboundOptions struct {
} }
type SocksOutboundOptions struct { type SocksOutboundOptions struct {
OutboundDialerOptions DialerOptions
ServerOptions ServerOptions
Version string `json:"version,omitempty"` Version string `json:"version,omitempty"`
Username string `json:"username,omitempty"` Username string `json:"username,omitempty"`
@ -25,7 +25,7 @@ type SocksOutboundOptions struct {
} }
type HTTPOutboundOptions struct { type HTTPOutboundOptions struct {
OutboundDialerOptions DialerOptions
ServerOptions ServerOptions
Username string `json:"username,omitempty"` Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"` Password string `json:"password,omitempty"`

View file

@ -1,7 +1,7 @@
package option package option
type SSHOutboundOptions struct { type SSHOutboundOptions struct {
OutboundDialerOptions DialerOptions
ServerOptions ServerOptions
User string `json:"user,omitempty"` User string `json:"user,omitempty"`
Password string `json:"password,omitempty"` Password string `json:"password,omitempty"`

View file

@ -1,7 +1,7 @@
package option package option
type TorOutboundOptions struct { type TorOutboundOptions struct {
OutboundDialerOptions DialerOptions
ExecutablePath string `json:"executable_path,omitempty"` ExecutablePath string `json:"executable_path,omitempty"`
ExtraArgs []string `json:"extra_args,omitempty"` ExtraArgs []string `json:"extra_args,omitempty"`
DataDirectory string `json:"data_directory,omitempty"` DataDirectory string `json:"data_directory,omitempty"`

View file

@ -15,7 +15,7 @@ type TrojanUser struct {
} }
type TrojanOutboundOptions struct { type TrojanOutboundOptions struct {
OutboundDialerOptions DialerOptions
ServerOptions ServerOptions
Password string `json:"password"` Password string `json:"password"`
Network NetworkList `json:"network,omitempty"` Network NetworkList `json:"network,omitempty"`

View file

@ -14,7 +14,7 @@ type VMessUser struct {
} }
type VMessOutboundOptions struct { type VMessOutboundOptions struct {
OutboundDialerOptions DialerOptions
ServerOptions ServerOptions
UUID string `json:"uuid"` UUID string `json:"uuid"`
Security string `json:"security"` Security string `json:"security"`

View file

@ -1,7 +1,7 @@
package option package option
type WireGuardOutboundOptions struct { type WireGuardOutboundOptions struct {
OutboundDialerOptions DialerOptions
ServerOptions ServerOptions
LocalAddress Listable[string] `json:"local_address"` LocalAddress Listable[string] `json:"local_address"`
PrivateKey string `json:"private_key"` PrivateKey string `json:"private_key"`

View file

@ -45,7 +45,7 @@ func NewDirect(router adapter.Router, logger log.ContextLogger, tag string, opti
}, },
domainStrategy: dns.DomainStrategy(options.DomainStrategy), domainStrategy: dns.DomainStrategy(options.DomainStrategy),
fallbackDelay: time.Duration(options.FallbackDelay), fallbackDelay: time.Duration(options.FallbackDelay),
dialer: dialer.NewOutbound(router, options.OutboundDialerOptions), dialer: dialer.New(router, options.DialerOptions),
proxyProto: options.ProxyProtocol, proxyProto: options.ProxyProtocol,
} }
if options.ProxyProtocol > 2 { if options.ProxyProtocol > 2 {

View file

@ -24,7 +24,7 @@ type HTTP struct {
} }
func NewHTTP(router adapter.Router, logger log.ContextLogger, tag string, options option.HTTPOutboundOptions) (*HTTP, error) { func NewHTTP(router adapter.Router, logger log.ContextLogger, tag string, options option.HTTPOutboundOptions) (*HTTP, error) {
detour, err := dialer.NewTLS(dialer.NewOutbound(router, options.OutboundDialerOptions), options.Server, common.PtrValueOrDefault(options.TLS)) detour, err := dialer.NewTLS(dialer.New(router, options.DialerOptions), options.Server, common.PtrValueOrDefault(options.TLS))
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -117,7 +117,7 @@ func NewHysteria(ctx context.Context, router adapter.Router, logger log.ContextL
tag: tag, tag: tag,
}, },
ctx: ctx, ctx: ctx,
dialer: dialer.NewOutbound(router, options.OutboundDialerOptions), dialer: dialer.New(router, options.DialerOptions),
serverAddr: options.ServerOptions.Build(), serverAddr: options.ServerOptions.Build(),
tlsConfig: tlsConfig, tlsConfig: tlsConfig,
quicConfig: quicConfig, quicConfig: quicConfig,

View file

@ -44,7 +44,7 @@ func NewShadowsocks(ctx context.Context, router adapter.Router, logger log.Conte
logger: logger, logger: logger,
tag: tag, tag: tag,
}, },
dialer: dialer.NewOutbound(router, options.OutboundDialerOptions), dialer: dialer.New(router, options.DialerOptions),
method: method, method: method,
serverAddr: options.ServerOptions.Build(), serverAddr: options.ServerOptions.Build(),
uot: options.UoT, uot: options.UoT,

View file

@ -34,7 +34,7 @@ func NewShadowTLS(ctx context.Context, router adapter.Router, logger log.Context
logger: logger, logger: logger,
tag: tag, tag: tag,
}, },
dialer: dialer.NewOutbound(router, options.OutboundDialerOptions), dialer: dialer.New(router, options.DialerOptions),
serverAddr: options.ServerOptions.Build(), serverAddr: options.ServerOptions.Build(),
} }
if options.TLS == nil || !options.TLS.Enabled { if options.TLS == nil || !options.TLS.Enabled {

View file

@ -25,7 +25,7 @@ type Socks struct {
} }
func NewSocks(router adapter.Router, logger log.ContextLogger, tag string, options option.SocksOutboundOptions) (*Socks, error) { func NewSocks(router adapter.Router, logger log.ContextLogger, tag string, options option.SocksOutboundOptions) (*Socks, error) {
detour := dialer.NewOutbound(router, options.OutboundDialerOptions) detour := dialer.New(router, options.DialerOptions)
var version socks.Version var version socks.Version
var err error var err error
if options.Version != "" { if options.Version != "" {

View file

@ -47,7 +47,7 @@ func NewSSH(ctx context.Context, router adapter.Router, logger log.ContextLogger
tag: tag, tag: tag,
}, },
ctx: ctx, ctx: ctx,
dialer: dialer.NewOutbound(router, options.OutboundDialerOptions), dialer: dialer.New(router, options.DialerOptions),
serverAddr: options.ServerOptions.Build(), serverAddr: options.ServerOptions.Build(),
user: options.User, user: options.User,
hostKeyAlgorithms: options.HostKeyAlgorithms, hostKeyAlgorithms: options.HostKeyAlgorithms,

View file

@ -66,7 +66,7 @@ func NewTor(ctx context.Context, router adapter.Router, logger log.ContextLogger
tag: tag, tag: tag,
}, },
ctx: ctx, ctx: ctx,
proxy: NewProxyListener(ctx, logger, dialer.NewOutbound(router, options.OutboundDialerOptions)), proxy: NewProxyListener(ctx, logger, dialer.New(router, options.DialerOptions)),
startConf: &startConf, startConf: &startConf,
options: options.Options, options: options.Options,
}, nil }, nil

View file

@ -40,7 +40,7 @@ func NewTrojan(ctx context.Context, router adapter.Router, logger log.ContextLog
logger: logger, logger: logger,
tag: tag, tag: tag,
}, },
dialer: dialer.NewOutbound(router, options.OutboundDialerOptions), dialer: dialer.New(router, options.DialerOptions),
serverAddr: options.ServerOptions.Build(), serverAddr: options.ServerOptions.Build(),
key: trojan.Key(options.Password), key: trojan.Key(options.Password),
} }

View file

@ -42,7 +42,7 @@ func NewVMess(ctx context.Context, router adapter.Router, logger log.ContextLogg
logger: logger, logger: logger,
tag: tag, tag: tag,
}, },
dialer: dialer.NewOutbound(router, options.OutboundDialerOptions), dialer: dialer.New(router, options.DialerOptions),
serverAddr: options.ServerOptions.Build(), serverAddr: options.ServerOptions.Build(),
} }
var err error var err error

View file

@ -64,7 +64,7 @@ func NewWireGuard(ctx context.Context, router adapter.Router, logger log.Context
}, },
ctx: ctx, ctx: ctx,
serverAddr: options.ServerOptions.Build(), serverAddr: options.ServerOptions.Build(),
dialer: dialer.NewOutbound(router, options.OutboundDialerOptions), dialer: dialer.New(router, options.DialerOptions),
} }
var endpointIp netip.Addr var endpointIp netip.Addr
if !outbound.serverAddr.IsFqdn() { if !outbound.serverAddr.IsFqdn() {

View file

@ -59,10 +59,8 @@ func TestChainedInbound(t *testing.T) {
ShadowsocksOptions: option.ShadowsocksOutboundOptions{ ShadowsocksOptions: option.ShadowsocksOutboundOptions{
Method: method, Method: method,
Password: password, Password: password,
OutboundDialerOptions: option.OutboundDialerOptions{ DialerOptions: option.DialerOptions{
DialerOptions: option.DialerOptions{ Detour: "detour-out",
Detour: "detour-out",
},
}, },
}, },
}, },

View file

@ -60,10 +60,8 @@ func TestShadowTLS(t *testing.T) {
ShadowsocksOptions: option.ShadowsocksOutboundOptions{ ShadowsocksOptions: option.ShadowsocksOutboundOptions{
Method: method, Method: method,
Password: password, Password: password,
OutboundDialerOptions: option.OutboundDialerOptions{ DialerOptions: option.DialerOptions{
DialerOptions: option.DialerOptions{ Detour: "detour",
Detour: "detour",
},
}, },
}, },
}, },
@ -131,10 +129,8 @@ func TestShadowTLSOutbound(t *testing.T) {
{ {
Type: C.TypeSocks, Type: C.TypeSocks,
SocksOptions: option.SocksOutboundOptions{ SocksOptions: option.SocksOutboundOptions{
OutboundDialerOptions: option.OutboundDialerOptions{ DialerOptions: option.DialerOptions{
DialerOptions: option.DialerOptions{ Detour: "detour",
Detour: "detour",
},
}, },
}, },
}, },