forked from MetaCubeX/mihomo
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: share more code from android branch
- Loading branch information
1 parent
d28c3b5
commit 9e96d70
Showing
17 changed files
with
333 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
// +build android | ||
|
||
package outboundgroup | ||
|
||
import ( | ||
C "github.com/metacubex/mihomo/constant" | ||
"github.com/metacubex/mihomo/constant/provider" | ||
) | ||
|
||
type ProxyGroup interface { | ||
C.ProxyAdapter | ||
|
||
Providers() []provider.ProxyProvider | ||
Proxies() []C.Proxy | ||
Now() string | ||
} | ||
|
||
func (f *Fallback) Providers() []provider.ProxyProvider { | ||
return f.providers | ||
} | ||
|
||
func (lb *LoadBalance) Providers() []provider.ProxyProvider { | ||
return lb.providers | ||
} | ||
|
||
func (f *Fallback) Proxies() []C.Proxy { | ||
return f.GetProxies(false) | ||
} | ||
|
||
func (lb *LoadBalance) Proxies() []C.Proxy { | ||
return lb.GetProxies(false) | ||
} | ||
|
||
func (lb *LoadBalance) Now() string { | ||
return "" | ||
} | ||
|
||
func (r *Relay) Providers() []provider.ProxyProvider { | ||
return r.providers | ||
} | ||
|
||
func (r *Relay) Proxies() []C.Proxy { | ||
return r.GetProxies(false) | ||
} | ||
|
||
func (r *Relay) Now() string { | ||
return "" | ||
} | ||
|
||
func (s *Selector) Providers() []provider.ProxyProvider { | ||
return s.providers | ||
} | ||
|
||
func (s *Selector) Proxies() []C.Proxy { | ||
return s.GetProxies(false) | ||
} | ||
|
||
func (u *URLTest) Providers() []provider.ProxyProvider { | ||
return u.providers | ||
} | ||
|
||
func (u *URLTest) Proxies() []C.Proxy { | ||
return u.GetProxies(false) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// +build android | ||
|
||
package provider | ||
|
||
import ( | ||
"time" | ||
) | ||
|
||
var ( | ||
suspended bool | ||
) | ||
|
||
type UpdatableProvider interface { | ||
UpdatedAt() time.Time | ||
} | ||
|
||
func (pp *proxySetProvider) UpdatedAt() time.Time { | ||
return pp.Fetcher.UpdatedAt | ||
} | ||
|
||
func (pp *proxySetProvider) Close() error { | ||
pp.healthCheck.close() | ||
pp.Fetcher.Destroy() | ||
|
||
return nil | ||
} | ||
|
||
func (cp *compatibleProvider) Close() error { | ||
cp.healthCheck.close() | ||
|
||
return nil | ||
} | ||
|
||
func Suspend(s bool) { | ||
suspended = s | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
// +build android | ||
|
||
package dialer | ||
|
||
import ( | ||
"context" | ||
"net" | ||
"net/netip" | ||
"syscall" | ||
) | ||
|
||
type SocketControl func(network, address string, conn syscall.RawConn) error | ||
|
||
var DefaultSocketHook SocketControl | ||
|
||
func dialContextHooked(ctx context.Context, network string, destination netip.Addr, port string) (net.Conn, error) { | ||
dialer := &net.Dialer{ | ||
Control: DefaultSocketHook, | ||
} | ||
|
||
conn, err := dialer.DialContext(ctx, network, net.JoinHostPort(destination.String(), port)) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
if t, ok := conn.(*net.TCPConn); ok { | ||
t.SetKeepAlive(false) | ||
} | ||
|
||
return conn, nil | ||
} | ||
|
||
func listenPacketHooked(ctx context.Context, network, address string) (net.PacketConn, error) { | ||
lc := &net.ListenConfig{ | ||
Control: DefaultSocketHook, | ||
} | ||
|
||
return lc.ListenPacket(ctx, network, address) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
// +build android | ||
|
||
package mmdb | ||
|
||
import "github.com/oschwald/maxminddb-golang" | ||
|
||
func InstallOverride(override *maxminddb.Reader) { | ||
newReader := Reader{Reader: override} | ||
switch override.Metadata.DatabaseType { | ||
case "sing-geoip": | ||
reader.databaseType = typeSing | ||
case "Meta-geoip0": | ||
reader.databaseType = typeMetaV0 | ||
default: | ||
reader.databaseType = typeMaxmind | ||
} | ||
reader = newReader | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// +build android | ||
|
||
package process | ||
|
||
import "github.com/metacubex/mihomo/constant" | ||
|
||
type PackageNameResolver func(metadata *constant.Metadata) (string, error) | ||
|
||
var DefaultPackageNameResolver PackageNameResolver | ||
|
||
func FindPackageName(metadata *constant.Metadata) (string, error) { | ||
if resolver := DefaultPackageNameResolver; resolver != nil { | ||
return resolver(metadata) | ||
} | ||
return "", ErrPlatformNotSupport | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,5 @@ | ||
// +build !android | ||
|
||
package dns | ||
|
||
import ( | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
// +build !android | ||
|
||
package dns | ||
|
||
func UpdateIsolateHandler(resolver *Resolver, mapper *ResolverEnhancer) { | ||
return | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
// +build android | ||
|
||
package dns | ||
|
||
import ( | ||
"context" | ||
|
||
D "github.com/miekg/dns" | ||
|
||
"github.com/metacubex/mihomo/common/cache" | ||
"github.com/metacubex/mihomo/component/dhcp" | ||
"github.com/metacubex/mihomo/component/resolver" | ||
) | ||
|
||
const SystemDNSPlaceholder = "system" | ||
|
||
var systemResolver *Resolver | ||
var isolateHandler handler | ||
|
||
var _ dnsClient = (*dhcpClient)(nil) | ||
|
||
type dhcpClient struct { | ||
enable bool | ||
} | ||
|
||
func (d *dhcpClient) Address() string { | ||
return SystemDNSPlaceholder | ||
} | ||
|
||
func (d *dhcpClient) Exchange(m *D.Msg) (msg *D.Msg, err error) { | ||
return d.ExchangeContext(context.Background(), m) | ||
} | ||
|
||
func (d *dhcpClient) ExchangeContext(ctx context.Context, m *D.Msg) (msg *D.Msg, err error) { | ||
if s := systemResolver; s != nil { | ||
return s.ExchangeContext(ctx, m) | ||
} | ||
|
||
return nil, dhcp.ErrNotFound | ||
} | ||
|
||
func ServeDNSWithDefaultServer(msg *D.Msg) (*D.Msg, error) { | ||
if h := isolateHandler; h != nil { | ||
return handlerWithContext(context.Background(), h, msg) | ||
} | ||
|
||
return nil, D.ErrTime | ||
} | ||
|
||
func FlushCacheWithDefaultResolver() { | ||
if r := resolver.DefaultResolver; r != nil { | ||
r.(*Resolver).lruCache = cache.New[string, *D.Msg](cache.WithSize[string, *D.Msg](4096), cache.WithStale[string, *D.Msg](true)) | ||
} | ||
} | ||
|
||
func UpdateSystemDNS(addr []string) { | ||
if len(addr) == 0 { | ||
systemResolver = nil | ||
} | ||
|
||
ns := make([]NameServer, 0, len(addr)) | ||
for _, d := range addr { | ||
ns = append(ns, NameServer{Addr: d}) | ||
} | ||
|
||
systemResolver = NewResolver(Config{Main: ns}) | ||
} | ||
|
||
func UpdateIsolateHandler(resolver *Resolver, mapper *ResolverEnhancer) { | ||
if resolver == nil { | ||
isolateHandler = nil | ||
|
||
return | ||
} | ||
|
||
isolateHandler = NewHandler(resolver, mapper) | ||
} | ||
|
||
func newDHCPClient(ifaceName string) *dhcpClient { | ||
return &dhcpClient{enable: ifaceName == SystemDNSPlaceholder} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
// +build android | ||
|
||
package http | ||
|
||
import "net" | ||
|
||
func (l *Listener) Listener() net.Listener { | ||
return l.listener | ||
} |
Oops, something went wrong.