Skip to content

Commit ba96634

Browse files
committed
based on Release v2026.04.05.191930-7757d2d
1 parent a2ab04d commit ba96634

17 files changed

Lines changed: 421 additions & 132 deletions

android/app/src/main/java/com/masterdns/vpn/ui/settings/SettingsScreen.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -509,11 +509,15 @@ private fun defaultValuesFor(profile: ProfileEntity): Map<String, String> {
509509
put("RESOLVER_BALANCING_STRATEGY", profile.resolverBalancingStrategy.takeIf { it != 0 }?.toString() ?: "2")
510510
put("PACKET_DUPLICATION_COUNT", profile.packetDuplicationCount.toString())
511511
put("SETUP_PACKET_DUPLICATION_COUNT", profile.setupPacketDuplicationCount.toString())
512-
put("STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD", adv("STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD", "3"))
513-
put("STREAM_RESOLVER_FAILOVER_COOLDOWN", adv("STREAM_RESOLVER_FAILOVER_COOLDOWN", "8.0"))
512+
put("STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD", adv("STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD", "2"))
513+
put("STREAM_RESOLVER_FAILOVER_COOLDOWN", adv("STREAM_RESOLVER_FAILOVER_COOLDOWN", "2.5"))
514514
put("RECHECK_SERVER_INTERVAL_SECONDS", adv("RECHECK_SERVER_INTERVAL_SECONDS", "5.0"))
515+
put("RECHECK_BATCH_SIZE", adv("RECHECK_BATCH_SIZE", "10"))
515516
put("RECHECK_INACTIVE_SERVERS_ENABLED", adv("RECHECK_INACTIVE_SERVERS_ENABLED", "true"))
516517
put("AUTO_DISABLE_TIMEOUT_SERVERS", adv("AUTO_DISABLE_TIMEOUT_SERVERS", "true"))
518+
put("AUTO_DISABLE_TIMEOUT_WINDOW_SECONDS", adv("AUTO_DISABLE_TIMEOUT_WINDOW_SECONDS", "30.0"))
519+
put("AUTO_DISABLE_MIN_OBSERVATIONS", adv("AUTO_DISABLE_MIN_OBSERVATIONS", "5"))
520+
put("AUTO_DISABLE_CHECK_INTERVAL_SECONDS", adv("AUTO_DISABLE_CHECK_INTERVAL_SECONDS", "2.0"))
517521
put("BASE_ENCODE_DATA", adv("BASE_ENCODE_DATA", "false"))
518522
put("UPLOAD_COMPRESSION_TYPE", profile.uploadCompression.toString())
519523
put("DOWNLOAD_COMPRESSION_TYPE", profile.downloadCompression.toString())
@@ -531,8 +535,7 @@ private fun defaultValuesFor(profile: ProfileEntity): Map<String, String> {
531535
put("MTU_USING_SECTION_SEPARATOR_TEXT", adv("MTU_USING_SECTION_SEPARATOR_TEXT", ""))
532536
put("MTU_REMOVED_SERVER_LOG_FORMAT", adv("MTU_REMOVED_SERVER_LOG_FORMAT", "Resolver {IP} removed at {TIME} due to {CAUSE}"))
533537
put("MTU_ADDED_SERVER_LOG_FORMAT", adv("MTU_ADDED_SERVER_LOG_FORMAT", "Resolver {IP} added back at {TIME} (UP {UP_MTU}, DOWN {DOWN_MTU})"))
534-
put("TUNNEL_READER_WORKERS", adv("TUNNEL_READER_WORKERS", "5"))
535-
put("TUNNEL_WRITER_WORKERS", adv("TUNNEL_WRITER_WORKERS", "5"))
538+
put("RX_TX_WORKERS", adv("RX_TX_WORKERS", "4"))
536539
put("TUNNEL_PROCESS_WORKERS", adv("TUNNEL_PROCESS_WORKERS", "5"))
537540
put("TUNNEL_PACKET_TIMEOUT_SECONDS", adv("TUNNEL_PACKET_TIMEOUT_SECONDS", "10.0"))
538541
put("TX_CHANNEL_SIZE", adv("TX_CHANNEL_SIZE", "12288"))

android/app/src/main/java/com/masterdns/vpn/ui/settings/SettingsViewModel.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,12 @@ class SettingsViewModel @Inject constructor(
213213
"STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD",
214214
"STREAM_RESOLVER_FAILOVER_COOLDOWN",
215215
"RECHECK_SERVER_INTERVAL_SECONDS",
216+
"RECHECK_BATCH_SIZE",
216217
"RECHECK_INACTIVE_SERVERS_ENABLED",
217218
"AUTO_DISABLE_TIMEOUT_SERVERS",
219+
"AUTO_DISABLE_TIMEOUT_WINDOW_SECONDS",
220+
"AUTO_DISABLE_MIN_OBSERVATIONS",
221+
"AUTO_DISABLE_CHECK_INTERVAL_SECONDS",
218222
"BASE_ENCODE_DATA",
219223
"COMPRESSION_MIN_SIZE",
220224
"MIN_UPLOAD_MTU",
@@ -230,8 +234,7 @@ class SettingsViewModel @Inject constructor(
230234
"MTU_USING_SECTION_SEPARATOR_TEXT",
231235
"MTU_REMOVED_SERVER_LOG_FORMAT",
232236
"MTU_ADDED_SERVER_LOG_FORMAT",
233-
"TUNNEL_READER_WORKERS",
234-
"TUNNEL_WRITER_WORKERS",
237+
"RX_TX_WORKERS",
235238
"TUNNEL_PROCESS_WORKERS",
236239
"TUNNEL_PACKET_TIMEOUT_SECONDS",
237240
"TX_CHANNEL_SIZE",

android/app/src/main/java/com/masterdns/vpn/util/ConfigGenerator.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,15 @@ object ConfigGenerator {
6969
appendLine("RESOLVER_BALANCING_STRATEGY = ${profile.resolverBalancingStrategy.takeIf { it != 0 } ?: 2}")
7070
appendLine("PACKET_DUPLICATION_COUNT = ${profile.packetDuplicationCount}")
7171
appendLine("SETUP_PACKET_DUPLICATION_COUNT = ${profile.setupPacketDuplicationCount}")
72-
appendLine("STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD = ${cfg("STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD", "3")}")
73-
appendLine("STREAM_RESOLVER_FAILOVER_COOLDOWN = ${cfg("STREAM_RESOLVER_FAILOVER_COOLDOWN", "8.0")}")
72+
appendLine("STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD = ${cfg("STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD", "2")}")
73+
appendLine("STREAM_RESOLVER_FAILOVER_COOLDOWN = ${cfg("STREAM_RESOLVER_FAILOVER_COOLDOWN", "2.5")}")
7474
appendLine("RECHECK_SERVER_INTERVAL_SECONDS = ${cfg("RECHECK_SERVER_INTERVAL_SECONDS", "5.0")}")
75+
appendLine("RECHECK_BATCH_SIZE = ${cfg("RECHECK_BATCH_SIZE", "10")}")
7576
appendLine("RECHECK_INACTIVE_SERVERS_ENABLED = ${cfg("RECHECK_INACTIVE_SERVERS_ENABLED", "true")}")
7677
appendLine("AUTO_DISABLE_TIMEOUT_SERVERS = ${cfg("AUTO_DISABLE_TIMEOUT_SERVERS", "true")}")
78+
appendLine("AUTO_DISABLE_TIMEOUT_WINDOW_SECONDS = ${cfg("AUTO_DISABLE_TIMEOUT_WINDOW_SECONDS", "30.0")}")
79+
appendLine("AUTO_DISABLE_MIN_OBSERVATIONS = ${cfg("AUTO_DISABLE_MIN_OBSERVATIONS", "5")}")
80+
appendLine("AUTO_DISABLE_CHECK_INTERVAL_SECONDS = ${cfg("AUTO_DISABLE_CHECK_INTERVAL_SECONDS", "2.0")}")
7781
appendLine("BASE_ENCODE_DATA = ${cfg("BASE_ENCODE_DATA", "false")}")
7882
appendLine()
7983

@@ -100,8 +104,7 @@ object ConfigGenerator {
100104
appendLine()
101105

102106
// Section 7: Runtime Workers
103-
appendLine("TUNNEL_READER_WORKERS = ${cfg("TUNNEL_READER_WORKERS", "5")}")
104-
appendLine("TUNNEL_WRITER_WORKERS = ${cfg("TUNNEL_WRITER_WORKERS", "5")}")
107+
appendLine("RX_TX_WORKERS = ${cfg("RX_TX_WORKERS", "4")}")
105108
appendLine("TUNNEL_PROCESS_WORKERS = ${cfg("TUNNEL_PROCESS_WORKERS", "5")}")
106109
appendLine("TUNNEL_PACKET_TIMEOUT_SECONDS = ${cfg("TUNNEL_PACKET_TIMEOUT_SECONDS", "10.0")}")
107110
appendLine("TX_CHANNEL_SIZE = ${cfg("TX_CHANNEL_SIZE", "12288")}")

android/app/src/main/java/com/masterdns/vpn/util/VpnManager.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,17 +241,23 @@ object VpnManager {
241241
"yyyy-MM-dd'T'HH:mm:ss'Z'",
242242
"yyyy-MM-dd HH:mm:ss"
243243
),
244-
// Example: 2026/04/05 10:20:30
244+
// Example: 2026-04-05 10:20:30 UTC (check UTC variant first)
245245
Triple(
246-
Regex("^(\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2})(.*)$"),
247-
"yyyy/MM/dd HH:mm:ss",
248-
"yyyy/MM/dd HH:mm:ss"
246+
Regex("^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\s+UTC(.*)$"),
247+
"yyyy-MM-dd HH:mm:ss",
248+
"yyyy-MM-dd HH:mm:ss"
249249
),
250-
// Example: 2026-04-05 10:20:30 UTC
250+
// Example: 2026-04-05 10:20:30 (from mtu_logging.go, no UTC)
251251
Triple(
252-
Regex("^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\s+UTC(.*)$"),
252+
Regex("^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\s(.*)$"),
253253
"yyyy-MM-dd HH:mm:ss",
254254
"yyyy-MM-dd HH:mm:ss"
255+
),
256+
// Example: 2026/04/05 10:20:30 (from logger.go)
257+
Triple(
258+
Regex("^(\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2})(.*)$"),
259+
"yyyy/MM/dd HH:mm:ss",
260+
"yyyy/MM/dd HH:mm:ss"
255261
)
256262
)
257263

client_config.toml.simple

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,11 @@ SETUP_PACKET_DUPLICATION_COUNT = 2
127127
# Stream-aware resolver failover.
128128
# If a stream keeps resending on the same preferred resolver, it can move.
129129
# Threshold is clamped to [1, 128].
130-
STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD = 3
130+
STREAM_RESOLVER_FAILOVER_RESEND_THRESHOLD = 2
131131

132132
# Minimum seconds between preferred-resolver switches for the same stream.
133133
# Clamped to [0.1s, 120s].
134-
STREAM_RESOLVER_FAILOVER_COOLDOWN = 8.0
134+
STREAM_RESOLVER_FAILOVER_COOLDOWN = 2.5
135135

136136
# If true, resolvers rejected during initial MTU testing are rechecked in the
137137
# background using the current synced upload/download MTUs.
@@ -147,23 +147,23 @@ RECHECK_SERVER_INTERVAL_SECONDS = 5.0
147147

148148
# Number of inactive/runtime-disabled resolver entries rechecked per cycle.
149149
# Clamped to [1, 1024].
150-
RECHECK_BATCH_SIZE = 5
150+
RECHECK_BATCH_SIZE = 10
151151

152152
# If true, a resolver is runtime-disabled when it stays timeout-only across the
153153
# configured window and enough observations have been collected.
154154
AUTO_DISABLE_TIMEOUT_SERVERS = true
155155

156156
# Timeout-only observation window in seconds.
157157
# Clamped to [1s, 86400s].
158-
AUTO_DISABLE_TIMEOUT_WINDOW_SECONDS = 90.0
158+
AUTO_DISABLE_TIMEOUT_WINDOW_SECONDS = 30.0
159159

160160
# Minimum observations required before auto-disable can trigger.
161161
# Clamped to [1, 10000].
162-
AUTO_DISABLE_MIN_OBSERVATIONS = 8
162+
AUTO_DISABLE_MIN_OBSERVATIONS = 5
163163

164164
# Frequency of auto-disable evaluation.
165165
# Clamped to [0.25s, 600s].
166-
AUTO_DISABLE_CHECK_INTERVAL_SECONDS = 4.0
166+
AUTO_DISABLE_CHECK_INTERVAL_SECONDS = 2.0
167167

168168
# If true, payload labels are base-encoded before tunneling.
169169
# Usually keep false unless a specific resolver path behaves better with it.
@@ -232,8 +232,7 @@ MTU_ADDED_SERVER_LOG_FORMAT = "Resolver {IP} added back at {TIME} (UP {UP_MTU},
232232

233233
# Async tunnel runtime worker counts.
234234
# Each must be >= 1.
235-
TUNNEL_READER_WORKERS = 5
236-
TUNNEL_WRITER_WORKERS = 5
235+
RX_TX_WORKERS = 4
237236
TUNNEL_PROCESS_WORKERS = 5
238237

239238
# Per-packet tunnel timeout used in async runtime paths.

0 commit comments

Comments
 (0)