diff --git a/app/src/main/java/io/nekohasekai/sagernet/Constants.kt b/app/src/main/java/io/nekohasekai/sagernet/Constants.kt index 1d15eef..a2fece3 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/Constants.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/Constants.kt @@ -43,7 +43,8 @@ object Key { 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 LOG_LEVEL = "logLevel" const val LOG_BUF_SIZE = "logBufSize" diff --git a/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt b/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt index 3083e3b..4d69504 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt @@ -23,7 +23,6 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import libcore.Libcore import moe.matsuri.nb4a.Protocols -import moe.matsuri.nb4a.utils.LibcoreUtil import moe.matsuri.nb4a.utils.Util import java.net.UnknownHostException @@ -58,12 +57,15 @@ class BaseService { proxy?.box?.sleep() } else { proxy?.box?.wake() + if (DataStore.wakeResetConnections) { + Libcore.resetAllConnections(true) + } } } } Action.RESET_UPSTREAM_CONNECTIONS -> runOnDefaultDispatcher { - LibcoreUtil.resetAllConnections(true) + Libcore.resetAllConnections(true) runOnMainDispatcher { Util.collapseStatusBar(ctx) 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? } @@ -278,7 +280,9 @@ class BaseService { } if (oldName != null && upstreamInterfaceName != null && 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? fun acquireWakeLock() - suspend fun switchWakeLock() { - wakeLock?.apply { - release() - wakeLock = null - data.notification?.postNotificationWakeLockStatus(false) - } ?: apply { - acquireWakeLock() - data.notification?.postNotificationWakeLockStatus(true) - } - } suspend fun lateInit() { wakeLock?.apply { diff --git a/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt b/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt index 6688d78..8c95911 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt @@ -87,6 +87,8 @@ object DataStore : OnPreferenceDataStoreChangeListener { var showBottomBar by configurationStore.boolean(Key.SHOW_BOTTOM_BAR) 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 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 bypassLan by configurationStore.boolean(Key.BYPASS_LAN) diff --git a/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt b/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt index d509ecd..4de4242 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/SettingsPreferenceFragment.kt @@ -79,9 +79,6 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() { val ipv6Mode = findPreference(Key.IPV6_MODE)!! val trafficSniffing = findPreference(Key.TRAFFIC_SNIFFING)!! - val tcpKeepAliveInterval = findPreference(Key.TCP_KEEP_ALIVE_INTERVAL)!! - tcpKeepAliveInterval.isVisible = false - val bypassLan = findPreference(Key.BYPASS_LAN)!! val bypassLanInCore = findPreference(Key.BYPASS_LAN_IN_CORE)!! @@ -162,7 +159,6 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() { appendHttpProxy.onPreferenceChangeListener = reloadListener showDirectSpeed.onPreferenceChangeListener = reloadListener trafficSniffing.onPreferenceChangeListener = reloadListener - tcpKeepAliveInterval.onPreferenceChangeListener = reloadListener bypassLan.onPreferenceChangeListener = reloadListener bypassLanInCore.onPreferenceChangeListener = reloadListener mtu.onPreferenceChangeListener = reloadListener diff --git a/app/src/main/java/moe/matsuri/nb4a/NativeInterface.kt b/app/src/main/java/moe/matsuri/nb4a/NativeInterface.kt index 4cf04b2..f06e26d 100644 --- a/app/src/main/java/moe/matsuri/nb4a/NativeInterface.kt +++ b/app/src/main/java/moe/matsuri/nb4a/NativeInterface.kt @@ -15,8 +15,8 @@ import io.nekohasekai.sagernet.ktx.app import io.nekohasekai.sagernet.ktx.runOnDefaultDispatcher import io.nekohasekai.sagernet.utils.PackageCache import libcore.BoxPlatformInterface +import libcore.Libcore import libcore.NB4AInterface -import moe.matsuri.nb4a.utils.LibcoreUtil import java.net.InetSocketAddress class NativeInterface : BoxPlatformInterface, NB4AInterface { @@ -86,7 +86,7 @@ class NativeInterface : BoxPlatformInterface, NB4AInterface { Logs.d("other selector: $selectorTag") return } - LibcoreUtil.resetAllConnections(true) + Libcore.resetAllConnections(true) DataStore.baseService?.apply { runOnDefaultDispatcher { val id = data.proxy!!.config.profileTagMap diff --git a/app/src/main/java/moe/matsuri/nb4a/utils/LibcoreUtil.kt b/app/src/main/java/moe/matsuri/nb4a/utils/LibcoreUtil.kt deleted file mode 100644 index a434e7f..0000000 --- a/app/src/main/java/moe/matsuri/nb4a/utils/LibcoreUtil.kt +++ /dev/null @@ -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) - } -} diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 18098e8..c08ee1f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -489,4 +489,6 @@ 组类型不是订阅 更新订阅的时候允许不安全的连接 总是跳过 TLS 证书验证 + 当网络发生变化时重置出站连接 + 当设备从睡眠状态唤醒时重置出站连接 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 920679f..96471ae 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -570,4 +570,6 @@ Always allow insecure Mulitplex Padding + Reset outbound connections when network changes + Reset outbound connections when device wake from sleep \ No newline at end of file diff --git a/app/src/main/res/xml/global_preferences.xml b/app/src/main/res/xml/global_preferences.xml index 0111a51..eef631d 100644 --- a/app/src/main/res/xml/global_preferences.xml +++ b/app/src/main/res/xml/global_preferences.xml @@ -56,6 +56,13 @@ app:key="profileTrafficStatistics" app:summary="@string/profile_traffic_statistics_summary" app:title="@string/profile_traffic_statistics" /> + @@ -70,12 +77,10 @@ app:summary="@string/metered_summary" app:title="@string/metered" /> + app:icon="@drawable/baseline_developer_board_24" + app:key="acquireWakeLock" + app:summary="@string/acquire_wake_lock_summary" + app:title="@string/acquire_wake_lock" /> - - - + diff --git a/libcore/box.go b/libcore/box.go index 0852798..ae29b33 100644 --- a/libcore/box.go +++ b/libcore/box.go @@ -60,7 +60,9 @@ func VersionBox() string { func ResetAllConnections(system bool) { if system { conntrack.Close() - log.Println("[Debug] Reset system connections done") + log.Println("Reset system connections done") + } else { + log.Println("TODO: Reset user connections") } }