From 85072e45203ff8d8111883af13ba1ab876f16eed Mon Sep 17 00:00:00 2001
From: Kr328 <39107975+Kr328@users.noreply.github.com>
Date: Thu, 19 Dec 2019 21:02:13 +0800
Subject: [PATCH] fix broadcast on sysstack
---
app/build.gradle | 4 +--
.../github/kr328/clash/ClashStartService.kt | 2 ++
core/src/main/golang/tun/tun.go | 12 +++----
.../java/com/github/kr328/clash/core/Clash.kt | 9 ++++--
.../github/kr328/clash/service/TunService.kt | 8 +++--
service/src/main/res/values/arrays.xml | 31 +++++++++++++++++--
6 files changed, 50 insertions(+), 16 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 204b135..08b5184 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -13,8 +13,8 @@ android {
applicationId "com.github.kr328.clash"
minSdkVersion 24
targetSdkVersion 29
- versionCode 10021
- versionName "1.0.21-alpha"
+ versionCode 10025
+ versionName "1.0.25-alpha"
}
buildTypes {
release {
diff --git a/app/src/main/java/com/github/kr328/clash/ClashStartService.kt b/app/src/main/java/com/github/kr328/clash/ClashStartService.kt
index 6997842..092200e 100644
--- a/app/src/main/java/com/github/kr328/clash/ClashStartService.kt
+++ b/app/src/main/java/com/github/kr328/clash/ClashStartService.kt
@@ -40,6 +40,8 @@ class ClashStartService : Service() {
startForeground(NOTIFICATION_ID, notification)
thread {
+ Thread.sleep(5000)
+
ServiceUtils.startProxyService(this)
stopSelf()
diff --git a/core/src/main/golang/tun/tun.go b/core/src/main/golang/tun/tun.go
index 414fb1f..64a8b68 100644
--- a/core/src/main/golang/tun/tun.go
+++ b/core/src/main/golang/tun/tun.go
@@ -5,7 +5,6 @@ import (
"strconv"
"syscall"
- "github.com/Dreamacro/clash/dns"
"github.com/Dreamacro/clash/global"
"github.com/Dreamacro/clash/log"
"github.com/Dreamacro/clash/proxy/tun"
@@ -16,9 +15,8 @@ type Callback interface {
}
var tunInstance *tun.TUN
-var dnsGateway net.IP
-func StartTunDevice(fd, mtu int, gateway string, dns string, callback Callback) error {
+func StartTunDevice(fd, mtu int, gateway string, dnsGateway string, callback Callback) error {
if tunInstance != nil {
return nil
}
@@ -41,7 +39,9 @@ func StartTunDevice(fd, mtu int, gateway string, dns string, callback Callback)
})
}
- t, err := tun.NewTunProxy("fd://"+strconv.Itoa(fd)+"?mtu="+strconv.Itoa(mtu), *n)
+ dnsGatewayIP := net.ParseIP(dnsGateway)
+
+ t, err := tun.NewTunProxy("fd://"+strconv.Itoa(fd)+"?mtu="+strconv.Itoa(mtu), *n, dnsGatewayIP)
if err != nil {
global.DefaultDialer.Control = nil
@@ -51,8 +51,6 @@ func StartTunDevice(fd, mtu int, gateway string, dns string, callback Callback)
}
tunInstance = t
- dnsGateway = net.ParseIP(dns)
-
ResetDnsRedirect()
log.Infoln("Android tun started")
@@ -79,5 +77,5 @@ func ResetDnsRedirect() {
return
}
- tunInstance.ReCreateDNSServer(dns.DefaultResolver, dnsGateway)
+ tunInstance.ResetDnsServer()
}
diff --git a/core/src/main/java/com/github/kr328/clash/core/Clash.kt b/core/src/main/java/com/github/kr328/clash/core/Clash.kt
index 021fbd0..2aa0d1e 100644
--- a/core/src/main/java/com/github/kr328/clash/core/Clash.kt
+++ b/core/src/main/java/com/github/kr328/clash/core/Clash.kt
@@ -3,7 +3,6 @@ package com.github.kr328.clash.core
import android.content.Context
import bridge.Bridge
import bridge.EventPoll
-import bridge.Logs
import com.github.kr328.clash.core.event.BandwidthEvent
import com.github.kr328.clash.core.event.LogEvent
import com.github.kr328.clash.core.event.ProcessEvent
@@ -77,7 +76,13 @@ class Clash(
loadDefault()
}
- fun startTunDevice(fd: Int, mtu: Int, gateway: String, dns: String, onSocket: (Int) -> Unit) {
+ fun startTunDevice(
+ fd: Int,
+ mtu: Int,
+ gateway: String,
+ dns: String,
+ onSocket: (Int) -> Unit
+ ) {
enforceStarted()
Bridge.startTunDevice(fd.toLong(), mtu.toLong(), gateway, dns) {
diff --git a/service/src/main/java/com/github/kr328/clash/service/TunService.kt b/service/src/main/java/com/github/kr328/clash/service/TunService.kt
index 52ded3a..5f4a348 100644
--- a/service/src/main/java/com/github/kr328/clash/service/TunService.kt
+++ b/service/src/main/java/com/github/kr328/clash/service/TunService.kt
@@ -15,7 +15,7 @@ class TunService : VpnService(), IClashEventObserver {
companion object {
// from https://github.com/shadowsocks/shadowsocks-android/blob/master/core/src/main/java/com/github/shadowsocks/bg/VpnService.kt
private const val VPN_MTU = 1500
- private const val PRIVATE_VLAN_DNS = "172.19.0.2" // sync with tun/tun.go/dnsServerAddress
+ private const val PRIVATE_VLAN_DNS = "172.19.0.2"
private const val PRIVATE_VLAN4_CLIENT = "172.19.0.1"
}
@@ -112,14 +112,16 @@ class TunService : VpnService(), IClashEventObserver {
start = false
if ( settings.isDnsHijackingEnabled ) {
- clash.clash.startTunDevice(fileDescriptor.fd, VPN_MTU,
+ clash.clash.startTunDevice(
+ fileDescriptor.fd, VPN_MTU,
"$PRIVATE_VLAN4_CLIENT/30", "0.0.0.0"
) {
protect(it.toInt())
}
}
else {
- clash.clash.startTunDevice(fileDescriptor.fd, VPN_MTU,
+ clash.clash.startTunDevice(
+ fileDescriptor.fd, VPN_MTU,
"$PRIVATE_VLAN4_CLIENT/30", PRIVATE_VLAN_DNS
) {
protect(it.toInt())
diff --git a/service/src/main/res/values/arrays.xml b/service/src/main/res/values/arrays.xml
index 7777245..67aaa82 100644
--- a/service/src/main/res/values/arrays.xml
+++ b/service/src/main/res/values/arrays.xml
@@ -18,7 +18,6 @@
- 160.0.0.0/5
- 168.0.0.0/6
- 172.0.0.0/12
- - 172.19.0.0/30
- 172.32.0.0/11
- 172.64.0.0/10
- 172.128.0.0/9
@@ -38,7 +37,35 @@
- 196.0.0.0/6
- 200.0.0.0/5
- 208.0.0.0/4
- - 224.0.0.0/3
+ - 224.0.0.0/4
+ - 240.0.0.0/5
+ - 248.0.0.0/6
+ - 252.0.0.0/7
+ - 254.0.0.0/8
+ - 255.0.0.0/9
+ - 255.128.0.0/10
+ - 255.192.0.0/11
+ - 255.224.0.0/12
+ - 255.240.0.0/13
+ - 255.248.0.0/14
+ - 255.252.0.0/15
+ - 255.254.0.0/16
+ - 255.255.0.0/17
+ - 255.255.128.0/18
+ - 255.255.192.0/19
+ - 255.255.224.0/20
+ - 255.255.240.0/21
+ - 255.255.248.0/22
+ - 255.255.252.0/23
+ - 255.255.254.0/24
+ - 255.255.255.0/25
+ - 255.255.255.128/26
+ - 255.255.255.192/27
+ - 255.255.255.224/28
+ - 255.255.255.240/29
+ - 255.255.255.248/30
+ - 255.255.255.252/31
+ - 255.255.255.254/32