Skip to content

Commit e7b5cdb

Browse files
author
MasterDNS Dev
committed
based on Release v2026.04.09.020149-a788a98
1 parent 4934326 commit e7b5cdb

12 files changed

Lines changed: 473 additions & 800 deletions

File tree

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -600,9 +600,9 @@ private fun defaultValuesFor(profile: ProfileEntity): Map<String, String> {
600600
put("DOWNLOAD_COMPRESSION_TYPE", profile.downloadCompression.toString())
601601
put("COMPRESSION_MIN_SIZE", adv("COMPRESSION_MIN_SIZE", "120"))
602602
put("MIN_UPLOAD_MTU", adv("MIN_UPLOAD_MTU", "38"))
603-
put("MIN_DOWNLOAD_MTU", adv("MIN_DOWNLOAD_MTU", "500"))
603+
put("MIN_DOWNLOAD_MTU", adv("MIN_DOWNLOAD_MTU", "100"))
604604
put("MAX_UPLOAD_MTU", adv("MAX_UPLOAD_MTU", "150"))
605-
put("MAX_DOWNLOAD_MTU", adv("MAX_DOWNLOAD_MTU", "900"))
605+
put("MAX_DOWNLOAD_MTU", adv("MAX_DOWNLOAD_MTU", "500"))
606606
put("MTU_TEST_RETRIES", adv("MTU_TEST_RETRIES", "2"))
607607
put("MTU_TEST_TIMEOUT", adv("MTU_TEST_TIMEOUT", "2.0"))
608608
put("MTU_TEST_PARALLELISM", adv("MTU_TEST_PARALLELISM", "16"))
@@ -627,26 +627,26 @@ private fun defaultValuesFor(profile: ProfileEntity): Map<String, String> {
627627
put("SESSION_INIT_RETRY_MAX_SECONDS", adv("SESSION_INIT_RETRY_MAX_SECONDS", "60.0"))
628628
put("SESSION_INIT_BUSY_RETRY_INTERVAL_SECONDS", adv("SESSION_INIT_BUSY_RETRY_INTERVAL_SECONDS", "60.0"))
629629
put("SESSION_INIT_RACING_COUNT", adv("SESSION_INIT_RACING_COUNT", "3"))
630-
put("PING_AGGRESSIVE_INTERVAL_SECONDS", adv("PING_AGGRESSIVE_INTERVAL_SECONDS", "0.200"))
630+
put("PING_AGGRESSIVE_INTERVAL_SECONDS", adv("PING_AGGRESSIVE_INTERVAL_SECONDS", "0.100"))
631631
put("PING_LAZY_INTERVAL_SECONDS", adv("PING_LAZY_INTERVAL_SECONDS", "0.750"))
632632
put("PING_COOLDOWN_INTERVAL_SECONDS", adv("PING_COOLDOWN_INTERVAL_SECONDS", "2.0"))
633633
put("PING_COLD_INTERVAL_SECONDS", adv("PING_COLD_INTERVAL_SECONDS", "15.0"))
634-
put("PING_WARM_THRESHOLD_SECONDS", adv("PING_WARM_THRESHOLD_SECONDS", "5.0"))
635-
put("PING_COOL_THRESHOLD_SECONDS", adv("PING_COOL_THRESHOLD_SECONDS", "15.0"))
634+
put("PING_WARM_THRESHOLD_SECONDS", adv("PING_WARM_THRESHOLD_SECONDS", "8.0"))
635+
put("PING_COOL_THRESHOLD_SECONDS", adv("PING_COOL_THRESHOLD_SECONDS", "20.0"))
636636
put("PING_COLD_THRESHOLD_SECONDS", adv("PING_COLD_THRESHOLD_SECONDS", "30.0"))
637-
put("ARQ_WINDOW_SIZE", adv("ARQ_WINDOW_SIZE", "1000"))
637+
put("ARQ_WINDOW_SIZE", adv("ARQ_WINDOW_SIZE", "600"))
638638
put("MAX_PACKETS_PER_BATCH", adv("MAX_PACKETS_PER_BATCH", "8"))
639-
put("ARQ_INITIAL_RTO_SECONDS", adv("ARQ_INITIAL_RTO_SECONDS", "0.6"))
640-
put("ARQ_MAX_RTO_SECONDS", adv("ARQ_MAX_RTO_SECONDS", "3.0"))
639+
put("ARQ_INITIAL_RTO_SECONDS", adv("ARQ_INITIAL_RTO_SECONDS", "1.0"))
640+
put("ARQ_MAX_RTO_SECONDS", adv("ARQ_MAX_RTO_SECONDS", "5.0"))
641641
put("ARQ_CONTROL_INITIAL_RTO_SECONDS", adv("ARQ_CONTROL_INITIAL_RTO_SECONDS", "0.5"))
642-
put("ARQ_CONTROL_MAX_RTO_SECONDS", adv("ARQ_CONTROL_MAX_RTO_SECONDS", "2.0"))
643-
put("ARQ_MAX_CONTROL_RETRIES", adv("ARQ_MAX_CONTROL_RETRIES", "120"))
644-
put("ARQ_MAX_DATA_RETRIES", adv("ARQ_MAX_DATA_RETRIES", "120"))
642+
put("ARQ_CONTROL_MAX_RTO_SECONDS", adv("ARQ_CONTROL_MAX_RTO_SECONDS", "3.0"))
643+
put("ARQ_MAX_CONTROL_RETRIES", adv("ARQ_MAX_CONTROL_RETRIES", "400"))
644+
put("ARQ_MAX_DATA_RETRIES", adv("ARQ_MAX_DATA_RETRIES", "1200"))
645645
put("ARQ_DATA_PACKET_TTL_SECONDS", adv("ARQ_DATA_PACKET_TTL_SECONDS", "2400.0"))
646646
put("ARQ_CONTROL_PACKET_TTL_SECONDS", adv("ARQ_CONTROL_PACKET_TTL_SECONDS", "1200.0"))
647647
put("ARQ_DATA_NACK_MAX_GAP", adv("ARQ_DATA_NACK_MAX_GAP", "16"))
648-
put("ARQ_DATA_NACK_INITIAL_DELAY_SECONDS", adv("ARQ_DATA_NACK_INITIAL_DELAY_SECONDS", "0.4"))
649-
put("ARQ_DATA_NACK_REPEAT_SECONDS", adv("ARQ_DATA_NACK_REPEAT_SECONDS", "0.8"))
648+
put("ARQ_DATA_NACK_INITIAL_DELAY_SECONDS", adv("ARQ_DATA_NACK_INITIAL_DELAY_SECONDS", "0.1"))
649+
put("ARQ_DATA_NACK_REPEAT_SECONDS", adv("ARQ_DATA_NACK_REPEAT_SECONDS", "1.0"))
650650
put("ARQ_INACTIVITY_TIMEOUT_SECONDS", adv("ARQ_INACTIVITY_TIMEOUT_SECONDS", "1800.0"))
651651
put("ARQ_TERMINAL_DRAIN_TIMEOUT_SECONDS", adv("ARQ_TERMINAL_DRAIN_TIMEOUT_SECONDS", "120.0"))
652652
put("ARQ_TERMINAL_ACK_WAIT_TIMEOUT_SECONDS", adv("ARQ_TERMINAL_ACK_WAIT_TIMEOUT_SECONDS", "90.0"))

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ object ConfigGenerator {
9191

9292
// Section 6: MTU Discovery
9393
appendLine("MIN_UPLOAD_MTU = ${cfg("MIN_UPLOAD_MTU", "38")}")
94-
appendLine("MIN_DOWNLOAD_MTU = ${cfg("MIN_DOWNLOAD_MTU", "500")}")
94+
appendLine("MIN_DOWNLOAD_MTU = ${cfg("MIN_DOWNLOAD_MTU", "100")}")
9595
appendLine("MAX_UPLOAD_MTU = ${cfg("MAX_UPLOAD_MTU", "150")}")
96-
appendLine("MAX_DOWNLOAD_MTU = ${cfg("MAX_DOWNLOAD_MTU", "900")}")
96+
appendLine("MAX_DOWNLOAD_MTU = ${cfg("MAX_DOWNLOAD_MTU", "500")}")
9797
appendLine("MTU_TEST_RETRIES = ${cfg("MTU_TEST_RETRIES", "2")}")
9898
appendLine("MTU_TEST_TIMEOUT = ${cfg("MTU_TEST_TIMEOUT", "2.0")}")
9999
appendLine("MTU_TEST_PARALLELISM = ${cfg("MTU_TEST_PARALLELISM", "16")}")
@@ -120,29 +120,29 @@ object ConfigGenerator {
120120
appendLine("SESSION_INIT_RETRY_MAX_SECONDS = ${cfg("SESSION_INIT_RETRY_MAX_SECONDS", "60.0")}")
121121
appendLine("SESSION_INIT_BUSY_RETRY_INTERVAL_SECONDS = ${cfg("SESSION_INIT_BUSY_RETRY_INTERVAL_SECONDS", "60.0")}")
122122
appendLine("SESSION_INIT_RACING_COUNT = ${cfg("SESSION_INIT_RACING_COUNT", "3")}")
123-
appendLine("PING_AGGRESSIVE_INTERVAL_SECONDS = ${cfg("PING_AGGRESSIVE_INTERVAL_SECONDS", "0.200")}")
123+
appendLine("PING_AGGRESSIVE_INTERVAL_SECONDS = ${cfg("PING_AGGRESSIVE_INTERVAL_SECONDS", "0.100")}")
124124
appendLine("PING_LAZY_INTERVAL_SECONDS = ${cfg("PING_LAZY_INTERVAL_SECONDS", "0.750")}")
125125
appendLine("PING_COOLDOWN_INTERVAL_SECONDS = ${cfg("PING_COOLDOWN_INTERVAL_SECONDS", "2.0")}")
126126
appendLine("PING_COLD_INTERVAL_SECONDS = ${cfg("PING_COLD_INTERVAL_SECONDS", "15.0")}")
127-
appendLine("PING_WARM_THRESHOLD_SECONDS = ${cfg("PING_WARM_THRESHOLD_SECONDS", "5.0")}")
128-
appendLine("PING_COOL_THRESHOLD_SECONDS = ${cfg("PING_COOL_THRESHOLD_SECONDS", "15.0")}")
127+
appendLine("PING_WARM_THRESHOLD_SECONDS = ${cfg("PING_WARM_THRESHOLD_SECONDS", "8.0")}")
128+
appendLine("PING_COOL_THRESHOLD_SECONDS = ${cfg("PING_COOL_THRESHOLD_SECONDS", "20.0")}")
129129
appendLine("PING_COLD_THRESHOLD_SECONDS = ${cfg("PING_COLD_THRESHOLD_SECONDS", "30.0")}")
130130
appendLine()
131131

132132
// Section 8: ARQ
133133
appendLine("MAX_PACKETS_PER_BATCH = ${cfg("MAX_PACKETS_PER_BATCH", "8")}")
134-
appendLine("ARQ_WINDOW_SIZE = ${cfg("ARQ_WINDOW_SIZE", "1000")}")
135-
appendLine("ARQ_INITIAL_RTO_SECONDS = ${cfg("ARQ_INITIAL_RTO_SECONDS", "0.6")}")
136-
appendLine("ARQ_MAX_RTO_SECONDS = ${cfg("ARQ_MAX_RTO_SECONDS", "3.0")}")
134+
appendLine("ARQ_WINDOW_SIZE = ${cfg("ARQ_WINDOW_SIZE", "600")}")
135+
appendLine("ARQ_INITIAL_RTO_SECONDS = ${cfg("ARQ_INITIAL_RTO_SECONDS", "1.0")}")
136+
appendLine("ARQ_MAX_RTO_SECONDS = ${cfg("ARQ_MAX_RTO_SECONDS", "5.0")}")
137137
appendLine("ARQ_CONTROL_INITIAL_RTO_SECONDS = ${cfg("ARQ_CONTROL_INITIAL_RTO_SECONDS", "0.5")}")
138-
appendLine("ARQ_CONTROL_MAX_RTO_SECONDS = ${cfg("ARQ_CONTROL_MAX_RTO_SECONDS", "2.0")}")
139-
appendLine("ARQ_MAX_CONTROL_RETRIES = ${cfg("ARQ_MAX_CONTROL_RETRIES", "120")}")
140-
appendLine("ARQ_MAX_DATA_RETRIES = ${cfg("ARQ_MAX_DATA_RETRIES", "120")}")
138+
appendLine("ARQ_CONTROL_MAX_RTO_SECONDS = ${cfg("ARQ_CONTROL_MAX_RTO_SECONDS", "3.0")}")
139+
appendLine("ARQ_MAX_CONTROL_RETRIES = ${cfg("ARQ_MAX_CONTROL_RETRIES", "400")}")
140+
appendLine("ARQ_MAX_DATA_RETRIES = ${cfg("ARQ_MAX_DATA_RETRIES", "1200")}")
141141
appendLine("ARQ_DATA_PACKET_TTL_SECONDS = ${cfg("ARQ_DATA_PACKET_TTL_SECONDS", "2400.0")}")
142142
appendLine("ARQ_CONTROL_PACKET_TTL_SECONDS = ${cfg("ARQ_CONTROL_PACKET_TTL_SECONDS", "1200.0")}")
143143
appendLine("ARQ_DATA_NACK_MAX_GAP = ${cfg("ARQ_DATA_NACK_MAX_GAP", "16")}")
144-
appendLine("ARQ_DATA_NACK_INITIAL_DELAY_SECONDS = ${cfg("ARQ_DATA_NACK_INITIAL_DELAY_SECONDS", "0.4")}")
145-
appendLine("ARQ_DATA_NACK_REPEAT_SECONDS = ${cfg("ARQ_DATA_NACK_REPEAT_SECONDS", "0.8")}")
144+
appendLine("ARQ_DATA_NACK_INITIAL_DELAY_SECONDS = ${cfg("ARQ_DATA_NACK_INITIAL_DELAY_SECONDS", "0.1")}")
145+
appendLine("ARQ_DATA_NACK_REPEAT_SECONDS = ${cfg("ARQ_DATA_NACK_REPEAT_SECONDS", "1.0")}")
146146
appendLine("ARQ_INACTIVITY_TIMEOUT_SECONDS = ${cfg("ARQ_INACTIVITY_TIMEOUT_SECONDS", "1800.0")}")
147147
appendLine("ARQ_TERMINAL_DRAIN_TIMEOUT_SECONDS = ${cfg("ARQ_TERMINAL_DRAIN_TIMEOUT_SECONDS", "120.0")}")
148148
appendLine("ARQ_TERMINAL_ACK_WAIT_TIMEOUT_SECONDS = ${cfg("ARQ_TERMINAL_ACK_WAIT_TIMEOUT_SECONDS", "90.0")}")

android/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@
77
<string name="project_main_github">github.com/masterking32/MasterDnsVPN</string>
88
<string name="project_main_telegram">t.me/masterdnsvpn</string>
99
<string name="project_android_client_github">github.com/Hidden-Node/MasterDnsVPN-AndroidClient</string>
10-
<string name="engine_version">v2026.04.07</string>
10+
<string name="engine_version">v2026.04.09.020149-a788a98</string>
1111
</resources>

client_config.toml.simple

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,12 @@ COMPRESSION_MIN_SIZE = 120
177177
# Minimum accepted upload/download MTUs after testing.
178178
# 0 can be used to effectively disable a bound, but keep realistic values.
179179
MIN_UPLOAD_MTU = 38
180-
MIN_DOWNLOAD_MTU = 500
180+
MIN_DOWNLOAD_MTU = 100
181181

182182
# Initial maximum MTU search bounds.
183183
# Must be >= the matching MIN value if both are set.
184184
MAX_UPLOAD_MTU = 150
185-
MAX_DOWNLOAD_MTU = 900
185+
MAX_DOWNLOAD_MTU = 500
186186

187187
# MTU probe retries and timeout.
188188
# Parallelism is auto-raised internally when resolver count is large, but you
@@ -262,12 +262,12 @@ SESSION_INIT_RACING_COUNT = 3
262262
# Ping/keepalive pacing.
263263
# These control how aggressively the client sends ping traffic depending on
264264
# recent activity.
265-
PING_AGGRESSIVE_INTERVAL_SECONDS = 0.200
265+
PING_AGGRESSIVE_INTERVAL_SECONDS = 0.100
266266
PING_LAZY_INTERVAL_SECONDS = 0.750
267267
PING_COOLDOWN_INTERVAL_SECONDS = 2.0
268268
PING_COLD_INTERVAL_SECONDS = 15.0
269-
PING_WARM_THRESHOLD_SECONDS = 5.0
270-
PING_COOL_THRESHOLD_SECONDS = 15.0
269+
PING_WARM_THRESHOLD_SECONDS = 8.0
270+
PING_COOL_THRESHOLD_SECONDS = 20.0
271271
PING_COLD_THRESHOLD_SECONDS = 30.0
272272

273273
# ------------------------------------------------------------------------------
@@ -284,16 +284,16 @@ MAX_PACKETS_PER_BATCH = 8
284284

285285
# ARQ data/control behavior.
286286
# These values are clamped in code and should stay internally consistent.
287-
ARQ_WINDOW_SIZE = 1000
288-
ARQ_INITIAL_RTO_SECONDS = 0.6
289-
ARQ_MAX_RTO_SECONDS = 3.0
287+
ARQ_WINDOW_SIZE = 600
288+
ARQ_INITIAL_RTO_SECONDS = 1.0
289+
ARQ_MAX_RTO_SECONDS = 5.0
290290
ARQ_CONTROL_INITIAL_RTO_SECONDS = 0.5
291-
ARQ_CONTROL_MAX_RTO_SECONDS = 2.0
292-
ARQ_MAX_CONTROL_RETRIES = 120
291+
ARQ_CONTROL_MAX_RTO_SECONDS = 3.0
292+
ARQ_MAX_CONTROL_RETRIES = 400
293293
ARQ_INACTIVITY_TIMEOUT_SECONDS = 1800.0
294294
ARQ_DATA_PACKET_TTL_SECONDS = 2400.0
295295
ARQ_CONTROL_PACKET_TTL_SECONDS = 1200.0
296-
ARQ_MAX_DATA_RETRIES = 120
296+
ARQ_MAX_DATA_RETRIES = 1200
297297

298298
# Maximum out-of-order gap ahead of rcvNxt that can trigger STREAM_DATA_NACK.
299299
# 0 disables NACK generation entirely.
@@ -302,8 +302,8 @@ ARQ_DATA_NACK_MAX_GAP = 16
302302

303303
# Minimum seconds between repeated NACKs for the same missing sequence number.
304304
# Clamped to [0.1s, 30s].
305-
ARQ_DATA_NACK_INITIAL_DELAY_SECONDS = 0.4
306-
ARQ_DATA_NACK_REPEAT_SECONDS = 0.8
305+
ARQ_DATA_NACK_INITIAL_DELAY_SECONDS = 0.1
306+
ARQ_DATA_NACK_REPEAT_SECONDS = 1.0
307307

308308
ARQ_TERMINAL_DRAIN_TIMEOUT_SECONDS = 120.0
309309
ARQ_TERMINAL_ACK_WAIT_TIMEOUT_SECONDS = 90.0

cmd/client/main.go

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
"fmt"
1515
"os"
1616
"os/signal"
17+
"path/filepath"
18+
"strings"
1719
"syscall"
1820

1921
"masterdnsvpn-go/internal/client"
@@ -28,31 +30,91 @@ func waitForExitInput() {
2830
_, _ = reader.ReadString('\n')
2931
}
3032

33+
func printClientUsage(fs *flag.FlagSet) {
34+
bin := filepath.Base(os.Args[0])
35+
if bin == "" || bin == "." || strings.Contains(bin, "go-build") || strings.HasPrefix(bin, "main") {
36+
bin = "masterdnsvpn-client"
37+
}
38+
39+
fmt.Fprintf(fs.Output(), "MasterDnsVPN Client - A high-performance DNS-based VPN Tunnel\n\n")
40+
fmt.Fprintf(fs.Output(), "Usage:\n")
41+
fmt.Fprintf(fs.Output(), " %s [flags]\n\n", bin)
42+
fmt.Fprintf(fs.Output(), "Examples:\n")
43+
fmt.Fprintf(fs.Output(), " %s -config client_config.toml\n", bin)
44+
fmt.Fprintf(fs.Output(), " %s -config ./client_config.toml -resolvers ./client_resolvers.txt\n", bin)
45+
fmt.Fprintf(fs.Output(), " %s -log ./client.log -version\n", bin)
46+
fmt.Fprintf(fs.Output(), " %s -config ./client_config.toml -d domain1.com,domain2.com -k my-secret-key\n\n", bin)
47+
fmt.Fprintf(fs.Output(), "Flags:\n")
48+
fs.PrintDefaults()
49+
}
50+
3151
func main() {
32-
configPath := flag.String("config", "client_config.toml", "Path to client configuration file")
33-
logPath := flag.String("log", "", "Path to log file (optional)")
34-
resolversPath := flag.String("resolvers", "", "Path to resolver file override (optional)")
35-
versionFlag := flag.Bool("version", false, "Print version and exit")
52+
flag.CommandLine.SetOutput(os.Stdout)
53+
flag.Usage = func() {
54+
printClientUsage(flag.CommandLine)
55+
}
56+
57+
var configPath string
58+
flag.StringVar(&configPath, "config", "client_config.toml", "Path to client configuration file")
59+
flag.StringVar(&configPath, "c", "client_config.toml", "Alias for -config")
60+
61+
var logPath string
62+
flag.StringVar(&logPath, "log", "", "Path to log file (optional)")
63+
flag.StringVar(&logPath, "l", "", "Alias for -log")
64+
65+
var resolversPath string
66+
flag.StringVar(&resolversPath, "resolvers", "", "Path to resolver file override (optional)")
67+
flag.StringVar(&resolversPath, "r", "", "Alias for -resolvers")
68+
69+
var showVersion bool
70+
flag.BoolVar(&showVersion, "version", false, "Print version and exit")
71+
flag.BoolVar(&showVersion, "v", false, "Alias for -version")
72+
73+
var showHelp bool
74+
flag.BoolVar(&showHelp, "help", false, "Show help and exit")
75+
flag.BoolVar(&showHelp, "h", false, "Alias for -help")
76+
77+
domainsShort := flag.String("d", "", "Alias for -domains (comma separated)")
78+
keyShort := flag.String("k", "", "Alias for -encryption-key")
79+
3680
configFlags, err := config.NewClientConfigFlagBinder(flag.CommandLine)
3781
if err != nil {
3882
fmt.Fprintf(os.Stderr, "Client flag setup failed: %v\n", err)
3983
os.Exit(2)
4084
}
4185
flag.Parse()
4286

43-
if *versionFlag {
87+
if showHelp {
88+
flag.Usage()
89+
return
90+
}
91+
92+
if flag.NArg() > 0 {
93+
fmt.Fprintf(os.Stderr, "Unexpected positional arguments: %v\n\n", flag.Args())
94+
flag.Usage()
95+
os.Exit(2)
96+
}
97+
98+
if showVersion {
4499
fmt.Printf("MasterDnsVPN Client Version: %s\n", version.GetVersion())
45100
return
46101
}
47102

48-
resolvedConfigPath := runtimepath.Resolve(*configPath)
103+
resolvedConfigPath := runtimepath.Resolve(configPath)
49104
overrides := configFlags.Overrides()
50-
if *resolversPath != "" {
51-
resolvedResolversPath := runtimepath.Resolve(*resolversPath)
105+
if resolversPath != "" {
106+
resolvedResolversPath := runtimepath.Resolve(resolversPath)
52107
overrides.ResolversFilePath = &resolvedResolversPath
53108
}
109+
110+
if *domainsShort != "" {
111+
overrides.Values["Domains"] = strings.Split(*domainsShort, ",")
112+
}
113+
if *keyShort != "" {
114+
overrides.Values["EncryptionKey"] = *keyShort
115+
}
54116

55-
app, err := client.Bootstrap(resolvedConfigPath, *logPath, overrides)
117+
app, err := client.Bootstrap(resolvedConfigPath, logPath, overrides)
56118
if err != nil {
57119
fmt.Fprintf(os.Stderr, "Client startup failed: %v\n", err)
58120
waitForExitInput()

cmd/client/versioninfo.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
"FixedFileInfo": {
33
"FileVersion": {
44
"Major": 1,
5-
"Minor": 0,
5+
"Minor": 1,
66
"Patch": 0,
77
"Build": 0
88
},
99
"ProductVersion": {
1010
"Major": 1,
11-
"Minor": 0,
11+
"Minor": 1,
1212
"Patch": 0,
1313
"Build": 0
1414
},
@@ -22,13 +22,13 @@
2222
"Comments": "MasterDnsVPN Client",
2323
"CompanyName": "MasterkinG32",
2424
"FileDescription": "MasterDnsVPN Client",
25-
"FileVersion": "1.0.0.0",
25+
"FileVersion": "1.1.0.0",
2626
"InternalName": "MasterDnsVPN_Client",
2727
"LegalCopyright": "Copyright (c) 2026 MasterkinG32",
2828
"LegalTrademarks": "",
2929
"OriginalFilename": "MasterDnsVPN_Client.exe",
3030
"ProductName": "MasterDnsVPN",
31-
"ProductVersion": "1.0.0.0"
31+
"ProductVersion": "1.1.0.0"
3232
},
3333
"VarFileInfo": {
3434
"Translation": {

0 commit comments

Comments
 (0)