mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2026-10-10 04:03:11 +08:00
chore: make the proxydialer module no longer directly depend on the tunnel module
This commit is contained in:
@@ -210,7 +210,7 @@ func (b *BasicOption) NewDialer(opts []dialer.Option) C.Dialer {
|
||||
cDialer := b.DialerForAPI
|
||||
if cDialer == nil {
|
||||
if b.DialerProxy != "" {
|
||||
cDialer = proxydialer.NewByName(b.DialerProxy)
|
||||
cDialer = proxydialer.NewByName(b.DialerProxy, b.NewTunnel())
|
||||
} else {
|
||||
cDialer = dialer.NewDialer(opts...)
|
||||
}
|
||||
|
||||
@@ -7,14 +7,23 @@ import (
|
||||
"net/netip"
|
||||
|
||||
C "github.com/metacubex/mihomo/constant"
|
||||
"github.com/metacubex/mihomo/tunnel"
|
||||
)
|
||||
|
||||
type Tunnel interface {
|
||||
C.Tunnel
|
||||
Proxies() map[string]C.Proxy
|
||||
}
|
||||
|
||||
type byNameProxyDialer struct {
|
||||
proxyName string
|
||||
tunnel C.Tunnel
|
||||
}
|
||||
|
||||
func (d byNameProxyDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
|
||||
tunnel, _ := d.tunnel.(Tunnel)
|
||||
if tunnel == nil {
|
||||
return nil, fmt.Errorf("tunnel is invalid, must be proxydialer.Tunnel, but got: %T", d.tunnel)
|
||||
}
|
||||
proxies := tunnel.Proxies()
|
||||
proxy, ok := proxies[d.proxyName]
|
||||
if !ok {
|
||||
@@ -24,6 +33,10 @@ func (d byNameProxyDialer) DialContext(ctx context.Context, network, address str
|
||||
}
|
||||
|
||||
func (d byNameProxyDialer) ListenPacket(ctx context.Context, network, address string, rAddrPort netip.AddrPort) (net.PacketConn, error) {
|
||||
tunnel, _ := d.tunnel.(Tunnel)
|
||||
if tunnel == nil {
|
||||
return nil, fmt.Errorf("tunnel is invalid, must be proxydialer.Tunnel, but got: %T", d.tunnel)
|
||||
}
|
||||
proxies := tunnel.Proxies()
|
||||
proxy, ok := proxies[d.proxyName]
|
||||
if !ok {
|
||||
@@ -32,6 +45,6 @@ func (d byNameProxyDialer) ListenPacket(ctx context.Context, network, address st
|
||||
return New(proxy, true).ListenPacket(ctx, network, address, rAddrPort)
|
||||
}
|
||||
|
||||
func NewByName(proxyName string) C.Dialer {
|
||||
return byNameProxyDialer{proxyName: proxyName}
|
||||
func NewByName(proxyName string, tunnel C.Tunnel) C.Dialer {
|
||||
return byNameProxyDialer{proxyName: proxyName, tunnel: tunnel}
|
||||
}
|
||||
|
||||
@@ -229,10 +229,11 @@ func updateNTP(c *config.NTP) {
|
||||
net.JoinHostPort(c.Server, strconv.Itoa(c.Port)),
|
||||
time.Duration(c.Interval),
|
||||
c.DialerProxy,
|
||||
tunnel.Tunnel,
|
||||
c.WriteToSystem,
|
||||
)
|
||||
} else {
|
||||
ntp.ReCreateNTPService("", 0, "", false)
|
||||
ntp.ReCreateNTPService("", 0, "", nil, false)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -27,7 +27,7 @@ type Service struct {
|
||||
syncSystemTime bool
|
||||
}
|
||||
|
||||
func ReCreateNTPService(server string, interval time.Duration, dialerProxy string, syncSystemTime bool) {
|
||||
func ReCreateNTPService(server string, interval time.Duration, dialerProxy string, tunnel C.Tunnel, syncSystemTime bool) {
|
||||
globalMu.Lock()
|
||||
defer globalMu.Unlock()
|
||||
if globalSrv != nil {
|
||||
@@ -39,7 +39,7 @@ func ReCreateNTPService(server string, interval time.Duration, dialerProxy strin
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
var cDialer C.Dialer = dialer.NewDialer()
|
||||
if dialerProxy != "" {
|
||||
cDialer = proxydialer.NewByName(dialerProxy)
|
||||
cDialer = proxydialer.NewByName(dialerProxy, tunnel)
|
||||
}
|
||||
globalSrv = &Service{
|
||||
server: M.ParseSocksaddr(server),
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"github.com/metacubex/mihomo/component/loopback"
|
||||
"github.com/metacubex/mihomo/component/nat"
|
||||
"github.com/metacubex/mihomo/component/process"
|
||||
"github.com/metacubex/mihomo/component/proxydialer"
|
||||
"github.com/metacubex/mihomo/component/resolver"
|
||||
"github.com/metacubex/mihomo/component/slowdown"
|
||||
"github.com/metacubex/mihomo/component/sniffer"
|
||||
@@ -72,6 +73,7 @@ type tunnel struct{}
|
||||
var Tunnel = tunnel{}
|
||||
var _ C.Tunnel = Tunnel
|
||||
var _ P.Tunnel = Tunnel
|
||||
var _ proxydialer.Tunnel = Tunnel
|
||||
|
||||
func (t tunnel) HandleTCPConn(conn net.Conn, metadata *C.Metadata) {
|
||||
connCtx := icontext.NewConnContext(conn, metadata)
|
||||
@@ -112,6 +114,10 @@ func (t tunnel) NatTable() C.NatTable {
|
||||
return natTable
|
||||
}
|
||||
|
||||
func (t tunnel) Proxies() map[string]C.Proxy {
|
||||
return proxies
|
||||
}
|
||||
|
||||
func (t tunnel) Providers() map[string]P.ProxyProvider {
|
||||
return providers
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user