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 20cf811..e746cfb 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt @@ -98,7 +98,7 @@ object DataStore : OnPreferenceDataStoreChangeListener { var showGroupInNotification by configurationStore.boolean("showGroupInNotification") var remoteDns by configurationStore.string(Key.REMOTE_DNS) { "https://dns.google/dns-query" } - var directDns by configurationStore.string(Key.DIRECT_DNS) { "local" } + var directDns by configurationStore.string(Key.DIRECT_DNS) { "https://120.53.53.53/dns-query" } var enableDnsRouting by configurationStore.boolean(Key.ENABLE_DNS_ROUTING) { true } var enableFakeDns by configurationStore.boolean(Key.ENABLE_FAKEDNS) diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt index d7b3d97..8137c6d 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt @@ -48,7 +48,6 @@ const val TAG_DNS_IN = "dns-in" const val TAG_DNS_OUT = "dns-out" const val LOCALHOST = "127.0.0.1" -const val LOCAL_DNS_SERVER = "local" class ConfigBuildResult( var config: String, @@ -697,7 +696,7 @@ fun buildConfig( }) } dns.servers.add(DNSServerOptions().apply { - address = LOCAL_DNS_SERVER + address = "local" tag = "dns-local" detour = TAG_DIRECT }) @@ -714,14 +713,8 @@ fun buildConfig( } if (forTest) { - // Always use system DNS for urlTest - dns.servers = listOf( - DNSServerOptions().apply { - address = LOCAL_DNS_SERVER - tag = "dns-local" - detour = TAG_DIRECT - } - ) + // Always use direct DNS for urlTest + dns.servers.removeAt(0) dns.rules = listOf() } else { // built-in DNS rules @@ -732,7 +725,7 @@ fun buildConfig( route.rules.add(0, Rule_DefaultOptions().apply { port = listOf(53) outbound = TAG_DNS_OUT - }) // TODO new mode use system dns? + }) if (DataStore.bypassLanInCore) { route.rules.add(Rule_DefaultOptions().apply { outbound = TAG_BYPASS diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/StandardV2RayBean.java b/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/StandardV2RayBean.java index 932c385..bdd82c7 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/StandardV2RayBean.java +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/StandardV2RayBean.java @@ -14,7 +14,7 @@ public abstract class StandardV2RayBean extends AbstractBean { //////// End of VMess & VLESS //////// - // "V2Ray Transport" tcp/http/ws/quic/grpc/httpUpgrade + // "V2Ray Transport" tcp/http/ws/quic/grpc/httpupgrade public String type; public String host; diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/V2RayFmt.kt b/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/V2RayFmt.kt index f253698..1007258 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/V2RayFmt.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/v2ray/V2RayFmt.kt @@ -593,12 +593,6 @@ fun buildSingBoxOutboundStreamSettings(bean: StandardV2RayBean): V2RayTransportO } } -// if (needKeepAliveInterval) { -// sockopt = StreamSettingsObject.SockoptObject().apply { -// tcpKeepAliveInterval = keepAliveInterval -// } -// } - return null } diff --git a/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt b/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt index 2178ac3..c1a034a 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/group/RawUpdater.kt @@ -286,6 +286,7 @@ object RawUpdater : GroupUpdater() { } "vmess", "vless" -> { + var isHttpUpgrade = false val isVLESS = proxy["type"].toString() == "vless" val bean = VMessBean().apply { if (isVLESS) { @@ -366,6 +367,10 @@ object RawUpdater : GroupUpdater() { "early-data-header-name" -> { bean.earlyDataHeaderName = wsOpt.value.toString() } + + "v2ray-http-upgrade" -> { + isHttpUpgrade = true + } } } @@ -411,10 +416,14 @@ object RawUpdater : GroupUpdater() { } } } + if (isHttpUpgrade) { + bean.type = "httpupgrade" + } proxies.add(bean) } "trojan" -> { + var isHttpUpgrade = false val bean = TrojanBean() bean.security = "tls" for (opt in proxy) { @@ -451,6 +460,10 @@ object RawUpdater : GroupUpdater() { "path" -> { bean.path = wsOpt.value.toString() } + + "v2ray-http-upgrade" -> { + isHttpUpgrade = true + } } } @@ -462,6 +475,9 @@ object RawUpdater : GroupUpdater() { } } } + if (isHttpUpgrade) { + bean.type = "httpupgrade" + } proxies.add(bean) } diff --git a/app/src/main/java/io/nekohasekai/sagernet/ui/LogcatFragment.kt b/app/src/main/java/io/nekohasekai/sagernet/ui/LogcatFragment.kt index d2fd8a9..c362672 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/LogcatFragment.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/LogcatFragment.kt @@ -43,13 +43,13 @@ class LogcatFragment : ToolbarFragment(R.layout.layout_logcat), private fun getColorForLine(line: String): ForegroundColorSpan { var color = ForegroundColorSpan(Color.GRAY) when { - line.contains(" INFO[") || line.contains(" [Info]") -> { + line.contains("INFO[") || line.contains(" [Info]") -> { color = ForegroundColorSpan((0xFF86C166).toInt()) } - line.contains(" ERROR[") || line.contains(" [Error]") -> { + line.contains("ERROR[") || line.contains(" [Error]") -> { color = ForegroundColorSpan(Color.RED) } - line.contains(" WARN[") || line.contains(" [Warning]") -> { + line.contains("WARN[") || line.contains(" [Warning]") -> { color = ForegroundColorSpan(Color.RED) } } diff --git a/app/src/main/java/moe/matsuri/nb4a/SingBoxOptionsUtil.kt b/app/src/main/java/moe/matsuri/nb4a/SingBoxOptionsUtil.kt index 7bfd41e..97fb814 100644 --- a/app/src/main/java/moe/matsuri/nb4a/SingBoxOptionsUtil.kt +++ b/app/src/main/java/moe/matsuri/nb4a/SingBoxOptionsUtil.kt @@ -8,21 +8,21 @@ import moe.matsuri.nb4a.SingBoxOptions.RuleSet object SingBoxOptionsUtil { fun domainStrategy(tag: String): String { - fun auto2AsIs(key: String): String { - return (DataStore.configurationStore.getString(key) ?: "").replace("auto", "") + fun auto2(key: String, newS: String): String { + return (DataStore.configurationStore.getString(key) ?: "").replace("auto", newS) } return when (tag) { "dns-remote" -> { - auto2AsIs("domain_strategy_for_remote") + auto2("domain_strategy_for_remote", "") } "dns-direct" -> { - auto2AsIs("domain_strategy_for_direct") + auto2("domain_strategy_for_direct", "") } // server else -> { - auto2AsIs("domain_strategy_for_server") + auto2("domain_strategy_for_server", "prefer_ipv4") } } } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 36ccd88..a5da08b 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -263,7 +263,7 @@ http quic grpc - + httpupgrade diff --git a/app/src/main/res/xml/global_preferences.xml b/app/src/main/res/xml/global_preferences.xml index 7ed6e7e..d1f443e 100644 --- a/app/src/main/res/xml/global_preferences.xml +++ b/app/src/main/res/xml/global_preferences.xml @@ -177,7 +177,7 @@ app:title="@string/domain_strategy_for_remote" app:useSimpleSummaryProvider="true" />