Optimize delayed sorting performance Add expansion panel proxies page Support to adjust the proxy card size Support to adjust proxies columns number
79 lines
1.2 KiB
Go
79 lines
1.2 KiB
Go
//go:build android
|
|
|
|
package main
|
|
|
|
import "C"
|
|
import (
|
|
"core/platform"
|
|
t "core/tun"
|
|
"errors"
|
|
"github.com/metacubex/mihomo/component/dialer"
|
|
"github.com/metacubex/mihomo/log"
|
|
"golang.org/x/sync/semaphore"
|
|
"sync"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
var tunLock sync.Mutex
|
|
var tun *t.Tun
|
|
|
|
//export startTUN
|
|
func startTUN(fd C.int) {
|
|
go func() {
|
|
tunLock.Lock()
|
|
defer tunLock.Unlock()
|
|
|
|
if tun != nil {
|
|
tun.Close()
|
|
tun = nil
|
|
}
|
|
f := int(fd)
|
|
gateway := "172.16.0.1/30"
|
|
portal := "172.16.0.2"
|
|
dns := "0.0.0.0"
|
|
|
|
tempTun := &t.Tun{Closed: false, Limit: semaphore.NewWeighted(4)}
|
|
|
|
closer, err := t.Start(f, gateway, portal, dns)
|
|
|
|
if err != nil {
|
|
log.Errorln("startTUN error: %v", err)
|
|
tempTun.Close()
|
|
}
|
|
|
|
tempTun.Closer = closer
|
|
|
|
tun = tempTun
|
|
}()
|
|
}
|
|
|
|
//export stopTun
|
|
func stopTun() {
|
|
go func() {
|
|
tunLock.Lock()
|
|
defer tunLock.Unlock()
|
|
|
|
if tun != nil {
|
|
tun.Close()
|
|
tun = nil
|
|
}
|
|
}()
|
|
}
|
|
|
|
var errBlocked = errors.New("blocked")
|
|
|
|
func init() {
|
|
dialer.DefaultSocketHook = func(network, address string, conn syscall.RawConn) error {
|
|
if platform.ShouldBlockConnection() {
|
|
return errBlocked
|
|
}
|
|
return conn.Control(func(fd uintptr) {
|
|
if tun != nil {
|
|
tun.MarkSocket(int(fd))
|
|
time.Sleep(time.Millisecond * 100)
|
|
}
|
|
})
|
|
}
|
|
}
|