1
0
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:
wwqgtxx
2026-05-17 21:55:16 +08:00
parent ff98700df2
commit a05c94b4ad
5 changed files with 27 additions and 7 deletions
+1 -1
View File
@@ -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...)
}
+16 -3
View File
@@ -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}
}
+2 -1
View File
@@ -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
View File
@@ -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),
+6
View File
@@ -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
}