mirror of
https://github.com/MatsuriDayo/NekoBoxForAndroid.git
synced 2025-12-19 14:40:06 +08:00
network reset settings
This commit is contained in:
parent
a1b5813e55
commit
da539372bc
@ -43,7 +43,8 @@ object Key {
|
|||||||
|
|
||||||
const val CONNECTION_TEST_URL = "connectionTestURL"
|
const val CONNECTION_TEST_URL = "connectionTestURL"
|
||||||
|
|
||||||
const val TCP_KEEP_ALIVE_INTERVAL = "tcpKeepAliveInterval"
|
const val NETWORK_CHANGE_RESET_CONNECTIONS = "networkChangeResetConnections"
|
||||||
|
const val WAKE_RESET_CONNECTIONS = "wakeResetConnections"
|
||||||
const val RULES_PROVIDER = "rulesProvider"
|
const val RULES_PROVIDER = "rulesProvider"
|
||||||
const val LOG_LEVEL = "logLevel"
|
const val LOG_LEVEL = "logLevel"
|
||||||
const val LOG_BUF_SIZE = "logBufSize"
|
const val LOG_BUF_SIZE = "logBufSize"
|
||||||
|
|||||||
@ -23,7 +23,6 @@ import kotlinx.coroutines.sync.Mutex
|
|||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
import libcore.Libcore
|
import libcore.Libcore
|
||||||
import moe.matsuri.nb4a.Protocols
|
import moe.matsuri.nb4a.Protocols
|
||||||
import moe.matsuri.nb4a.utils.LibcoreUtil
|
|
||||||
import moe.matsuri.nb4a.utils.Util
|
import moe.matsuri.nb4a.utils.Util
|
||||||
import java.net.UnknownHostException
|
import java.net.UnknownHostException
|
||||||
|
|
||||||
@ -58,12 +57,15 @@ class BaseService {
|
|||||||
proxy?.box?.sleep()
|
proxy?.box?.sleep()
|
||||||
} else {
|
} else {
|
||||||
proxy?.box?.wake()
|
proxy?.box?.wake()
|
||||||
|
if (DataStore.wakeResetConnections) {
|
||||||
|
Libcore.resetAllConnections(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Action.RESET_UPSTREAM_CONNECTIONS -> runOnDefaultDispatcher {
|
Action.RESET_UPSTREAM_CONNECTIONS -> runOnDefaultDispatcher {
|
||||||
LibcoreUtil.resetAllConnections(true)
|
Libcore.resetAllConnections(true)
|
||||||
runOnMainDispatcher {
|
runOnMainDispatcher {
|
||||||
Util.collapseStatusBar(ctx)
|
Util.collapseStatusBar(ctx)
|
||||||
Toast.makeText(ctx, "Reset upstream connections done", Toast.LENGTH_SHORT)
|
Toast.makeText(ctx, "Reset upstream connections done", Toast.LENGTH_SHORT)
|
||||||
@ -259,7 +261,7 @@ class BaseService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun persistStats() {
|
fun persistStats() {
|
||||||
// TODO NEW save app stats?
|
// TODO NEW save app stats?
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,7 +280,9 @@ class BaseService {
|
|||||||
}
|
}
|
||||||
if (oldName != null && upstreamInterfaceName != null && oldName != upstreamInterfaceName) {
|
if (oldName != null && upstreamInterfaceName != null && oldName != upstreamInterfaceName) {
|
||||||
Logs.d("Network changed: $oldName -> $upstreamInterfaceName")
|
Logs.d("Network changed: $oldName -> $upstreamInterfaceName")
|
||||||
LibcoreUtil.resetAllConnections(true)
|
if (DataStore.networkChangeResetConnections) {
|
||||||
|
Libcore.resetAllConnections(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -286,16 +290,6 @@ class BaseService {
|
|||||||
|
|
||||||
var wakeLock: PowerManager.WakeLock?
|
var wakeLock: PowerManager.WakeLock?
|
||||||
fun acquireWakeLock()
|
fun acquireWakeLock()
|
||||||
suspend fun switchWakeLock() {
|
|
||||||
wakeLock?.apply {
|
|
||||||
release()
|
|
||||||
wakeLock = null
|
|
||||||
data.notification?.postNotificationWakeLockStatus(false)
|
|
||||||
} ?: apply {
|
|
||||||
acquireWakeLock()
|
|
||||||
data.notification?.postNotificationWakeLockStatus(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun lateInit() {
|
suspend fun lateInit() {
|
||||||
wakeLock?.apply {
|
wakeLock?.apply {
|
||||||
|
|||||||
@ -87,6 +87,8 @@ object DataStore : OnPreferenceDataStoreChangeListener {
|
|||||||
var showBottomBar by configurationStore.boolean(Key.SHOW_BOTTOM_BAR)
|
var showBottomBar by configurationStore.boolean(Key.SHOW_BOTTOM_BAR)
|
||||||
|
|
||||||
var allowInsecureOnRequest by configurationStore.boolean(Key.ALLOW_INSECURE_ON_REQUEST)
|
var allowInsecureOnRequest by configurationStore.boolean(Key.ALLOW_INSECURE_ON_REQUEST)
|
||||||
|
var networkChangeResetConnections by configurationStore.boolean(Key.NETWORK_CHANGE_RESET_CONNECTIONS) { true }
|
||||||
|
var wakeResetConnections by configurationStore.boolean(Key.WAKE_RESET_CONNECTIONS)
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
@ -98,7 +100,6 @@ object DataStore : OnPreferenceDataStoreChangeListener {
|
|||||||
var trafficSniffing by configurationStore.stringToInt(Key.TRAFFIC_SNIFFING) { 1 }
|
var trafficSniffing by configurationStore.stringToInt(Key.TRAFFIC_SNIFFING) { 1 }
|
||||||
var resolveDestination by configurationStore.boolean(Key.RESOLVE_DESTINATION)
|
var resolveDestination by configurationStore.boolean(Key.RESOLVE_DESTINATION)
|
||||||
|
|
||||||
// var tcpKeepAliveInterval by configurationStore.stringToInt(Key.TCP_KEEP_ALIVE_INTERVAL) { 15 }
|
|
||||||
var mtu by configurationStore.stringToInt(Key.MTU) { 9000 }
|
var mtu by configurationStore.stringToInt(Key.MTU) { 9000 }
|
||||||
|
|
||||||
var bypassLan by configurationStore.boolean(Key.BYPASS_LAN)
|
var bypassLan by configurationStore.boolean(Key.BYPASS_LAN)
|
||||||
|
|||||||
@ -79,9 +79,6 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() {
|
|||||||
val ipv6Mode = findPreference<Preference>(Key.IPV6_MODE)!!
|
val ipv6Mode = findPreference<Preference>(Key.IPV6_MODE)!!
|
||||||
val trafficSniffing = findPreference<Preference>(Key.TRAFFIC_SNIFFING)!!
|
val trafficSniffing = findPreference<Preference>(Key.TRAFFIC_SNIFFING)!!
|
||||||
|
|
||||||
val tcpKeepAliveInterval = findPreference<EditTextPreference>(Key.TCP_KEEP_ALIVE_INTERVAL)!!
|
|
||||||
tcpKeepAliveInterval.isVisible = false
|
|
||||||
|
|
||||||
val bypassLan = findPreference<SwitchPreference>(Key.BYPASS_LAN)!!
|
val bypassLan = findPreference<SwitchPreference>(Key.BYPASS_LAN)!!
|
||||||
val bypassLanInCore = findPreference<SwitchPreference>(Key.BYPASS_LAN_IN_CORE)!!
|
val bypassLanInCore = findPreference<SwitchPreference>(Key.BYPASS_LAN_IN_CORE)!!
|
||||||
|
|
||||||
@ -162,7 +159,6 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() {
|
|||||||
appendHttpProxy.onPreferenceChangeListener = reloadListener
|
appendHttpProxy.onPreferenceChangeListener = reloadListener
|
||||||
showDirectSpeed.onPreferenceChangeListener = reloadListener
|
showDirectSpeed.onPreferenceChangeListener = reloadListener
|
||||||
trafficSniffing.onPreferenceChangeListener = reloadListener
|
trafficSniffing.onPreferenceChangeListener = reloadListener
|
||||||
tcpKeepAliveInterval.onPreferenceChangeListener = reloadListener
|
|
||||||
bypassLan.onPreferenceChangeListener = reloadListener
|
bypassLan.onPreferenceChangeListener = reloadListener
|
||||||
bypassLanInCore.onPreferenceChangeListener = reloadListener
|
bypassLanInCore.onPreferenceChangeListener = reloadListener
|
||||||
mtu.onPreferenceChangeListener = reloadListener
|
mtu.onPreferenceChangeListener = reloadListener
|
||||||
|
|||||||
@ -15,8 +15,8 @@ import io.nekohasekai.sagernet.ktx.app
|
|||||||
import io.nekohasekai.sagernet.ktx.runOnDefaultDispatcher
|
import io.nekohasekai.sagernet.ktx.runOnDefaultDispatcher
|
||||||
import io.nekohasekai.sagernet.utils.PackageCache
|
import io.nekohasekai.sagernet.utils.PackageCache
|
||||||
import libcore.BoxPlatformInterface
|
import libcore.BoxPlatformInterface
|
||||||
|
import libcore.Libcore
|
||||||
import libcore.NB4AInterface
|
import libcore.NB4AInterface
|
||||||
import moe.matsuri.nb4a.utils.LibcoreUtil
|
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
|
|
||||||
class NativeInterface : BoxPlatformInterface, NB4AInterface {
|
class NativeInterface : BoxPlatformInterface, NB4AInterface {
|
||||||
@ -86,7 +86,7 @@ class NativeInterface : BoxPlatformInterface, NB4AInterface {
|
|||||||
Logs.d("other selector: $selectorTag")
|
Logs.d("other selector: $selectorTag")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
LibcoreUtil.resetAllConnections(true)
|
Libcore.resetAllConnections(true)
|
||||||
DataStore.baseService?.apply {
|
DataStore.baseService?.apply {
|
||||||
runOnDefaultDispatcher {
|
runOnDefaultDispatcher {
|
||||||
val id = data.proxy!!.config.profileTagMap
|
val id = data.proxy!!.config.profileTagMap
|
||||||
|
|||||||
@ -1,18 +0,0 @@
|
|||||||
package moe.matsuri.nb4a.utils
|
|
||||||
|
|
||||||
import io.nekohasekai.sagernet.database.DataStore
|
|
||||||
import io.nekohasekai.sagernet.database.ProxyEntity
|
|
||||||
import io.nekohasekai.sagernet.database.SagerDatabase
|
|
||||||
import libcore.Libcore
|
|
||||||
|
|
||||||
object LibcoreUtil {
|
|
||||||
fun resetAllConnections(system: Boolean) {
|
|
||||||
if (DataStore.serviceState.started) {
|
|
||||||
val proxy = SagerDatabase.proxyDao.getById(DataStore.currentProfile)
|
|
||||||
if (proxy?.type == ProxyEntity.TYPE_TUIC) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Libcore.resetAllConnections(system)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -489,4 +489,6 @@
|
|||||||
<string name="group_not_subscription">组类型不是订阅</string>
|
<string name="group_not_subscription">组类型不是订阅</string>
|
||||||
<string name="allow_insecure_on_request_sum">更新订阅的时候允许不安全的连接</string>
|
<string name="allow_insecure_on_request_sum">更新订阅的时候允许不安全的连接</string>
|
||||||
<string name="global_allow_insecure">总是跳过 TLS 证书验证</string>
|
<string name="global_allow_insecure">总是跳过 TLS 证书验证</string>
|
||||||
|
<string name="network_change_reset_connections">当网络发生变化时重置出站连接</string>
|
||||||
|
<string name="wake_reset_connections">当设备从睡眠状态唤醒时重置出站连接</string>
|
||||||
</resources>
|
</resources>
|
||||||
@ -570,4 +570,6 @@
|
|||||||
<string name="global_allow_insecure">Always allow insecure</string>
|
<string name="global_allow_insecure">Always allow insecure</string>
|
||||||
<string name="mux_preference">Mulitplex</string>
|
<string name="mux_preference">Mulitplex</string>
|
||||||
<string name="padding">Padding</string>
|
<string name="padding">Padding</string>
|
||||||
|
<string name="network_change_reset_connections">Reset outbound connections when network changes</string>
|
||||||
|
<string name="wake_reset_connections">Reset outbound connections when device wake from sleep</string>
|
||||||
</resources>
|
</resources>
|
||||||
@ -56,6 +56,13 @@
|
|||||||
app:key="profileTrafficStatistics"
|
app:key="profileTrafficStatistics"
|
||||||
app:summary="@string/profile_traffic_statistics_summary"
|
app:summary="@string/profile_traffic_statistics_summary"
|
||||||
app:title="@string/profile_traffic_statistics" />
|
app:title="@string/profile_traffic_statistics" />
|
||||||
|
<SwitchPreference
|
||||||
|
app:defaultValue="true"
|
||||||
|
app:icon="@drawable/ic_baseline_speed_24"
|
||||||
|
app:key="showDirectSpeed"
|
||||||
|
app:summary="@string/show_direct_speed_sum"
|
||||||
|
app:title="@string/show_direct_speed"
|
||||||
|
app:useSimpleSummaryProvider="true" />
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
app:key="showGroupInNotification"
|
app:key="showGroupInNotification"
|
||||||
app:title="@string/show_group_in_notification" />
|
app:title="@string/show_group_in_notification" />
|
||||||
@ -70,12 +77,10 @@
|
|||||||
app:summary="@string/metered_summary"
|
app:summary="@string/metered_summary"
|
||||||
app:title="@string/metered" />
|
app:title="@string/metered" />
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
app:defaultValue="true"
|
app:icon="@drawable/baseline_developer_board_24"
|
||||||
app:icon="@drawable/ic_baseline_speed_24"
|
app:key="acquireWakeLock"
|
||||||
app:key="showDirectSpeed"
|
app:summary="@string/acquire_wake_lock_summary"
|
||||||
app:summary="@string/show_direct_speed_sum"
|
app:title="@string/acquire_wake_lock" />
|
||||||
app:title="@string/show_direct_speed"
|
|
||||||
app:useSimpleSummaryProvider="true" />
|
|
||||||
<moe.matsuri.nb4a.ui.LongClickListPreference
|
<moe.matsuri.nb4a.ui.LongClickListPreference
|
||||||
app:defaultValue="0"
|
app:defaultValue="0"
|
||||||
app:entries="@array/log_level"
|
app:entries="@array/log_level"
|
||||||
@ -206,28 +211,20 @@
|
|||||||
app:key="connectionTestURL"
|
app:key="connectionTestURL"
|
||||||
app:title="@string/connection_test_url"
|
app:title="@string/connection_test_url"
|
||||||
app:useSimpleSummaryProvider="true" />
|
app:useSimpleSummaryProvider="true" />
|
||||||
<SwitchPreference
|
|
||||||
app:icon="@drawable/baseline_developer_board_24"
|
|
||||||
app:key="acquireWakeLock"
|
|
||||||
app:summary="@string/acquire_wake_lock_summary"
|
|
||||||
app:title="@string/acquire_wake_lock" />
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
app:icon="@drawable/baseline_construction_24"
|
app:icon="@drawable/baseline_construction_24"
|
||||||
app:key="enableClashAPI"
|
app:key="enableClashAPI"
|
||||||
app:summary="@string/enable_clash_api_summary"
|
app:summary="@string/enable_clash_api_summary"
|
||||||
app:title="@string/enable_clash_api" />
|
app:title="@string/enable_clash_api" />
|
||||||
<EditTextPreference
|
<SwitchPreference
|
||||||
app:defaultValue="15"
|
app:defaultValue="true"
|
||||||
app:icon="@drawable/ic_baseline_flip_camera_android_24"
|
app:icon="@drawable/ic_baseline_flip_camera_android_24"
|
||||||
app:key="tcpKeepAliveInterval"
|
app:key="networkChangeResetConnections"
|
||||||
app:title="@string/tcp_keep_alive_interval"
|
app:title="@string/network_change_reset_connections"
|
||||||
app:useSimpleSummaryProvider="true" />
|
app:useSimpleSummaryProvider="true" />
|
||||||
<moe.matsuri.nb4a.ui.SimpleMenuPreference
|
<SwitchPreference
|
||||||
app:defaultValue="1.2"
|
app:key="wakeResetConnections"
|
||||||
app:entries="@array/app_tls_version"
|
app:title="@string/wake_reset_connections"
|
||||||
app:entryValues="@array/app_tls_version"
|
|
||||||
app:key="appTLSVersion"
|
|
||||||
app:title="@string/app_tls_version"
|
|
||||||
app:useSimpleSummaryProvider="true" />
|
app:useSimpleSummaryProvider="true" />
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
app:icon="@drawable/ic_action_lock_open"
|
app:icon="@drawable/ic_action_lock_open"
|
||||||
@ -236,6 +233,13 @@
|
|||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
app:key="allowInsecureOnRequest"
|
app:key="allowInsecureOnRequest"
|
||||||
app:title="@string/allow_insecure_on_request_sum" />
|
app:title="@string/allow_insecure_on_request_sum" />
|
||||||
|
<moe.matsuri.nb4a.ui.SimpleMenuPreference
|
||||||
|
app:defaultValue="1.2"
|
||||||
|
app:entries="@array/app_tls_version"
|
||||||
|
app:entryValues="@array/app_tls_version"
|
||||||
|
app:key="appTLSVersion"
|
||||||
|
app:title="@string/app_tls_version"
|
||||||
|
app:useSimpleSummaryProvider="true" />
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
app:key="showBottomBar"
|
app:key="showBottomBar"
|
||||||
app:title="@string/show_bottom_bar" />
|
app:title="@string/show_bottom_bar" />
|
||||||
|
|||||||
@ -60,7 +60,9 @@ func VersionBox() string {
|
|||||||
func ResetAllConnections(system bool) {
|
func ResetAllConnections(system bool) {
|
||||||
if system {
|
if system {
|
||||||
conntrack.Close()
|
conntrack.Close()
|
||||||
log.Println("[Debug] Reset system connections done")
|
log.Println("Reset system connections done")
|
||||||
|
} else {
|
||||||
|
log.Println("TODO: Reset user connections")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user