diff --git a/app/src/main/java/io/nekohasekai/sagernet/Constants.kt b/app/src/main/java/io/nekohasekai/sagernet/Constants.kt index 992f817..47bd5d3 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/Constants.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/Constants.kt @@ -58,6 +58,7 @@ object Key { const val ALWAYS_SHOW_ADDRESS = "alwaysShowAddress" // Protocol Settings + const val MUX_TYPE = "muxType" const val MUX_PROTOCOLS = "mux" const val MUX_CONCURRENCY = "muxConcurrency" 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 db248f4..2c043d8 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/database/DataStore.kt @@ -167,6 +167,7 @@ object DataStore : OnPreferenceDataStoreChangeListener { // protocol + var muxType by configurationStore.stringToInt(Key.MUX_TYPE) var muxProtocols by configurationStore.stringSet(Key.MUX_PROTOCOLS) var muxConcurrency by configurationStore.stringToInt(Key.MUX_CONCURRENCY) { 8 } 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 b7896f2..6935155 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt @@ -424,6 +424,11 @@ fun buildConfig( currentOutbound["multiplex"] = MultiplexOptions().apply { enabled = true max_streams = DataStore.muxConcurrency + protocol = when (DataStore.muxType) { + 1 -> "smux" + 2 -> "yamux" + else -> "h2mux" + } } } } diff --git a/app/src/main/java/moe/matsuri/nb4a/Protocols.kt b/app/src/main/java/moe/matsuri/nb4a/Protocols.kt index ca0b4d7..8343a3a 100644 --- a/app/src/main/java/moe/matsuri/nb4a/Protocols.kt +++ b/app/src/main/java/moe/matsuri/nb4a/Protocols.kt @@ -29,8 +29,7 @@ object Protocols { fun getCanMuxList(): List { // built-in and support mux - // TODO support vless mux in sing-box 1.3.x - val list = mutableListOf("vmess", "trojan", "trojan-go", "shadowsocks") + val list = mutableListOf("vmess", "trojan", "trojan-go", "shadowsocks", "vless") NekoPluginManager.getProtocols().forEach { if (it.protocolConfig.optBoolean("canMux")) { diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5ba3efe..6dbc71b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -474,4 +474,5 @@ 长按设置项以设置自定义 MTU。 长按设置项以设置缓冲区大小。 测试并发 + Mux 协议 \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 1b9111d..6d672d2 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -433,6 +433,12 @@ + + h2mux + smux + yamux + + NoRemoteIPv4 NoRemoteIPv6 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3cf2cc1..b20b034 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -515,5 +515,6 @@ Anyone can write advanced plugins, which can control NekoBox. please download an Long press the preference to set the buffer size. TLS Camouflage Settings Test concurrency + Mux protocol \ 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 9c3578f..afebcbc 100644 --- a/app/src/main/res/xml/global_preferences.xml +++ b/app/src/main/res/xml/global_preferences.xml @@ -140,6 +140,13 @@ app:key="mux" app:summary="@string/mux_sum" app:title="@string/enable_mux" /> +