package dialer import ( "github.com/Dreamacro/clash/component/resolver" "go.uber.org/atomic" ) var ( DefaultOptions []Option DefaultInterface = atomic.NewString("") DefaultRoutingMark = atomic.NewInt32(0) ) type option struct { interfaceName string addrReuse bool routingMark int network int prefer int tfo bool resolver resolver.Resolver } type Option func(opt *option) func WithInterface(name string) Option { return func(opt *option) { opt.interfaceName = name } } func WithAddrReuse(reuse bool) Option { return func(opt *option) { opt.addrReuse = reuse } } func WithRoutingMark(mark int) Option { return func(opt *option) { opt.routingMark = mark } } func WithResolver(r resolver.Resolver) Option { return func(opt *option) { opt.resolver = r } } func WithPreferIPv4() Option { return func(opt *option) { opt.prefer = 4 } } func WithPreferIPv6() Option { return func(opt *option) { opt.prefer = 6 } } func WithOnlySingleStack(isIPv4 bool) Option { return func(opt *option) { if isIPv4 { opt.network = 4 } else { opt.network = 6 } } } func WithTFO(tfo bool) Option { return func(opt *option) { opt.tfo = tfo } } func WithOption(o option) Option { return func(opt *option) { *opt = o } }