clash/component/dialer/options.go

111 lines
1.8 KiB
Go
Raw Normal View History

package dialer
2022-08-28 05:41:19 +00:00
import (
2023-03-07 01:30:51 +00:00
"context"
"net"
2023-11-03 13:01:45 +00:00
"github.com/metacubex/mihomo/common/atomic"
"github.com/metacubex/mihomo/component/resolver"
2022-08-28 05:41:19 +00:00
)
var (
DefaultOptions []Option
DefaultInterface = atomic.NewTypedValue[string]("")
DefaultRoutingMark = atomic.NewInt32(0)
)
2023-03-07 01:30:51 +00:00
type NetDialer interface {
DialContext(ctx context.Context, network, address string) (net.Conn, error)
}
type option struct {
interfaceName string
2023-10-26 02:27:38 +00:00
fallbackBind bool
addrReuse bool
2021-11-08 08:59:48 +00:00
routingMark int
2022-08-28 05:41:19 +00:00
network int
prefer int
2023-02-24 05:53:44 +00:00
tfo bool
2023-08-09 08:57:39 +00:00
mpTcp bool
resolver resolver.Resolver
2023-03-07 01:30:51 +00:00
netDialer NetDialer
}
type Option func(opt *option)
func WithInterface(name string) Option {
return func(opt *option) {
opt.interfaceName = name
}
}
2023-10-26 02:27:38 +00:00
func WithFallbackBind(fallback bool) Option {
return func(opt *option) {
opt.fallbackBind = fallback
}
}
func WithAddrReuse(reuse bool) Option {
return func(opt *option) {
opt.addrReuse = reuse
}
}
2021-11-08 08:59:48 +00:00
func WithRoutingMark(mark int) Option {
return func(opt *option) {
opt.routingMark = mark
}
}
2022-03-27 16:44:13 +00:00
func WithResolver(r resolver.Resolver) Option {
2022-03-27 16:44:13 +00:00
return func(opt *option) {
opt.resolver = r
2022-03-27 16:44:13 +00:00
}
}
2022-08-28 05:41:19 +00:00
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
}
}
}
2022-12-19 16:11:02 +00:00
2023-02-24 05:53:44 +00:00
func WithTFO(tfo bool) Option {
return func(opt *option) {
opt.tfo = tfo
}
}
2023-08-09 08:57:39 +00:00
func WithMPTCP(mpTcp bool) Option {
return func(opt *option) {
opt.mpTcp = mpTcp
}
}
2023-03-07 01:30:51 +00:00
func WithNetDialer(netDialer NetDialer) Option {
return func(opt *option) {
opt.netDialer = netDialer
}
}
2022-12-22 01:53:11 +00:00
func WithOption(o option) Option {
2022-12-19 16:11:02 +00:00
return func(opt *option) {
*opt = o
}
}