diff --git a/adapter/outbound/base.go b/adapter/outbound/base.go index 93f6e142..9e5112c6 100644 --- a/adapter/outbound/base.go +++ b/adapter/outbound/base.go @@ -56,35 +56,15 @@ func (b *Base) Type() C.AdapterType { return b.tp } -// StreamConnContext implements C.ProxyAdapter -func (b *Base) StreamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (net.Conn, error) { - return c, C.ErrNotSupport -} - func (b *Base) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error) { return nil, C.ErrNotSupport } -// DialContextWithDialer implements C.ProxyAdapter -func (b *Base) DialContextWithDialer(ctx context.Context, dialer C.Dialer, metadata *C.Metadata) (_ C.Conn, err error) { - return nil, C.ErrNotSupport -} - // ListenPacketContext implements C.ProxyAdapter func (b *Base) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error) { return nil, C.ErrNotSupport } -// ListenPacketWithDialer implements C.ProxyAdapter -func (b *Base) ListenPacketWithDialer(ctx context.Context, dialer C.Dialer, metadata *C.Metadata) (_ C.PacketConn, err error) { - return nil, C.ErrNotSupport -} - -// SupportWithDialer implements C.ProxyAdapter -func (b *Base) SupportWithDialer() C.NetWork { - return C.InvalidNet -} - // SupportUOT implements C.ProxyAdapter func (b *Base) SupportUOT() bool { return false @@ -348,17 +328,6 @@ func (p *autoCloseProxyAdapter) DialContext(ctx context.Context, metadata *C.Met return c, nil } -func (p *autoCloseProxyAdapter) DialContextWithDialer(ctx context.Context, dialer C.Dialer, metadata *C.Metadata) (_ C.Conn, err error) { - c, err := p.ProxyAdapter.DialContextWithDialer(ctx, dialer, metadata) - if err != nil { - return nil, err - } - if c, ok := c.(AddRef); ok { - c.AddRef(p) - } - return c, nil -} - func (p *autoCloseProxyAdapter) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error) { pc, err := p.ProxyAdapter.ListenPacketContext(ctx, metadata) if err != nil { @@ -370,17 +339,6 @@ func (p *autoCloseProxyAdapter) ListenPacketContext(ctx context.Context, metadat return pc, nil } -func (p *autoCloseProxyAdapter) ListenPacketWithDialer(ctx context.Context, dialer C.Dialer, metadata *C.Metadata) (_ C.PacketConn, err error) { - pc, err := p.ProxyAdapter.ListenPacketWithDialer(ctx, dialer, metadata) - if err != nil { - return nil, err - } - if pc, ok := pc.(AddRef); ok { - pc.AddRef(p) - } - return pc, nil -} - func (p *autoCloseProxyAdapter) Close() error { p.closeOnce.Do(func() { log.Debugln("Closing outdated proxy [%s]", p.Name()) diff --git a/adapter/outboundgroup/patch_android.go b/adapter/outboundgroup/patch_android.go index 016ed606..f0c254c2 100644 --- a/adapter/outboundgroup/patch_android.go +++ b/adapter/outboundgroup/patch_android.go @@ -35,18 +35,6 @@ func (lb *LoadBalance) Now() string { return "" } -func (r *Relay) Providers() []P.ProxyProvider { - return r.providers -} - -func (r *Relay) Proxies() []C.Proxy { - return r.GetProxies(false) -} - -func (r *Relay) Now() string { - return "" -} - func (s *Selector) Providers() []P.ProxyProvider { return s.providers } diff --git a/adapter/outboundgroup/relay.go b/adapter/outboundgroup/relay.go deleted file mode 100644 index 8e93d898..00000000 --- a/adapter/outboundgroup/relay.go +++ /dev/null @@ -1,163 +0,0 @@ -package outboundgroup - -import ( - "context" - "encoding/json" - - "github.com/metacubex/mihomo/adapter/outbound" - "github.com/metacubex/mihomo/component/dialer" - "github.com/metacubex/mihomo/component/proxydialer" - C "github.com/metacubex/mihomo/constant" - P "github.com/metacubex/mihomo/constant/provider" - "github.com/metacubex/mihomo/log" -) - -type Relay struct { - *GroupBase - Hidden bool - Icon string -} - -// DialContext implements C.ProxyAdapter -func (r *Relay) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error) { - proxies, chainProxies := r.proxies(metadata, true) - - switch len(proxies) { - case 0: - return outbound.NewDirect().DialContext(ctx, metadata) - case 1: - return proxies[0].DialContext(ctx, metadata) - } - var d C.Dialer - d = dialer.NewDialer() - for _, proxy := range proxies[:len(proxies)-1] { - d = proxydialer.New(proxy, d, false) - } - last := proxies[len(proxies)-1] - conn, err := last.DialContextWithDialer(ctx, d, metadata) - if err != nil { - return nil, err - } - - for i := len(chainProxies) - 2; i >= 0; i-- { - conn.AppendToChains(chainProxies[i]) - } - - conn.AppendToChains(r) - - return conn, nil -} - -// ListenPacketContext implements C.ProxyAdapter -func (r *Relay) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error) { - proxies, chainProxies := r.proxies(metadata, true) - - switch len(proxies) { - case 0: - return outbound.NewDirect().ListenPacketContext(ctx, metadata) - case 1: - return proxies[0].ListenPacketContext(ctx, metadata) - } - - var d C.Dialer - d = dialer.NewDialer() - for _, proxy := range proxies[:len(proxies)-1] { - d = proxydialer.New(proxy, d, false) - } - last := proxies[len(proxies)-1] - pc, err := last.ListenPacketWithDialer(ctx, d, metadata) - if err != nil { - return nil, err - } - - for i := len(chainProxies) - 2; i >= 0; i-- { - pc.AppendToChains(chainProxies[i]) - } - - pc.AppendToChains(r) - - return pc, nil -} - -// SupportUDP implements C.ProxyAdapter -func (r *Relay) SupportUDP() bool { - proxies, _ := r.proxies(nil, false) - if len(proxies) == 0 { // C.Direct - return true - } - for i := len(proxies) - 1; i >= 0; i-- { - proxy := proxies[i] - if !proxy.SupportUDP() { - return false - } - if proxy.SupportUOT() { - return true - } - switch proxy.SupportWithDialer() { - case C.ALLNet: - case C.UDP: - default: // C.TCP and C.InvalidNet - return false - } - } - return true -} - -// MarshalJSON implements C.ProxyAdapter -func (r *Relay) MarshalJSON() ([]byte, error) { - all := []string{} - for _, proxy := range r.GetProxies(false) { - all = append(all, proxy.Name()) - } - return json.Marshal(map[string]any{ - "type": r.Type().String(), - "all": all, - "hidden": r.Hidden, - "icon": r.Icon, - }) -} - -func (r *Relay) proxies(metadata *C.Metadata, touch bool) ([]C.Proxy, []C.Proxy) { - rawProxies := r.GetProxies(touch) - - var proxies []C.Proxy - var chainProxies []C.Proxy - var targetProxies []C.Proxy - - for n, proxy := range rawProxies { - proxies = append(proxies, proxy) - chainProxies = append(chainProxies, proxy) - subproxy := proxy.Unwrap(metadata, touch) - for subproxy != nil { - chainProxies = append(chainProxies, subproxy) - proxies[n] = subproxy - subproxy = subproxy.Unwrap(metadata, touch) - } - } - - for _, proxy := range proxies { - if proxy.Type() != C.Direct && proxy.Type() != C.Compatible { - targetProxies = append(targetProxies, proxy) - } - } - - return targetProxies, chainProxies -} - -func (r *Relay) Addr() string { - proxies, _ := r.proxies(nil, false) - return proxies[len(proxies)-1].Addr() -} - -func NewRelay(option *GroupCommonOption, providers []P.ProxyProvider) *Relay { - log.Warnln("The group [%s] with relay type is deprecated, please using dialer-proxy instead", option.Name) - return &Relay{ - GroupBase: NewGroupBase(GroupBaseOption{ - Name: option.Name, - Type: C.Relay, - Providers: providers, - }), - Hidden: option.Hidden, - Icon: option.Icon, - } -} diff --git a/component/proxydialer/proxydialer.go b/component/proxydialer/proxydialer.go index e3ea300a..fa574cec 100644 --- a/component/proxydialer/proxydialer.go +++ b/component/proxydialer/proxydialer.go @@ -8,7 +8,6 @@ import ( "strings" N "github.com/metacubex/mihomo/common/net" - "github.com/metacubex/mihomo/component/dialer" C "github.com/metacubex/mihomo/constant" "github.com/metacubex/mihomo/tunnel" "github.com/metacubex/mihomo/tunnel/statistic" @@ -50,13 +49,7 @@ func (p proxyDialer) DialContext(ctx context.Context, network, address string) ( } return N.NewBindPacketConn(pc, currentMeta.UDPAddr()), nil } - var conn C.Conn - var err error - if _, ok := p.dialer.(dialer.Dialer); ok { // first using old function to let mux work - conn, err = p.proxy.DialContext(ctx, currentMeta) - } else { - conn, err = p.proxy.DialContextWithDialer(ctx, p.dialer, currentMeta) - } + conn, err := p.proxy.DialContext(ctx, currentMeta) if err != nil { return nil, err } @@ -72,14 +65,8 @@ func (p proxyDialer) ListenPacket(ctx context.Context, network, address string, } func (p proxyDialer) listenPacket(ctx context.Context, currentMeta *C.Metadata) (C.PacketConn, error) { - var pc C.PacketConn - var err error currentMeta.NetWork = C.UDP - if _, ok := p.dialer.(dialer.Dialer); ok { // first using old function to let mux work - pc, err = p.proxy.ListenPacketContext(ctx, currentMeta) - } else { - pc, err = p.proxy.ListenPacketWithDialer(ctx, p.dialer, currentMeta) - } + pc, err := p.proxy.ListenPacketContext(ctx, currentMeta) if err != nil { return nil, err } diff --git a/constant/adapters.go b/constant/adapters.go index 1cd146c1..c1ac3723 100644 --- a/constant/adapters.go +++ b/constant/adapters.go @@ -121,17 +121,6 @@ type ProxyAdapter interface { ProxyInfo() ProxyInfo MarshalJSON() ([]byte, error) - // Deprecated: use DialContextWithDialer and ListenPacketWithDialer instead. - // StreamConn wraps a protocol around net.Conn with Metadata. - // - // Examples: - // conn, _ := net.DialContext(context.Background(), "tcp", "host:port") - // conn, _ = adapter.StreamConnContext(context.Background(), conn, metadata) - // - // It returns a C.Conn with protocol which start with - // a new session (if any) - StreamConnContext(ctx context.Context, c net.Conn, metadata *Metadata) (net.Conn, error) - // DialContext return a C.Conn with protocol which // contains multiplexing-related reuse logic (if any) DialContext(ctx context.Context, metadata *Metadata) (Conn, error) @@ -140,13 +129,6 @@ type ProxyAdapter interface { // SupportUOT return UDP over TCP support SupportUOT() bool - // SupportWithDialer only for deprecated relay group, the new protocol does not need to be implemented. - SupportWithDialer() NetWork - // DialContextWithDialer only for deprecated relay group, the new protocol does not need to be implemented. - DialContextWithDialer(ctx context.Context, dialer Dialer, metadata *Metadata) (Conn, error) - // ListenPacketWithDialer only for deprecated relay group, the new protocol does not need to be implemented. - ListenPacketWithDialer(ctx context.Context, dialer Dialer, metadata *Metadata) (PacketConn, error) - // IsL3Protocol return ProxyAdapter working in L3 (tell dns module not pass the domain to avoid loopback) IsL3Protocol(metadata *Metadata) bool