diff --git a/application/applicationconstants.h b/application/applicationconstants.h
index e5a5a3b..b639140 100644
--- a/application/applicationconstants.h
+++ b/application/applicationconstants.h
@@ -8,7 +8,7 @@ namespace ApplicationConstants
const inline QString RepositoryName("chenx-dust/EZ4Connect");
const inline QString CoreRepositoryName("Mythologyli/zju-connect");
const inline QString ApplicationName("EZ4Connect");
-constexpr inline int ConfigVersion = 9;
+constexpr inline int ConfigVersion = 8;
}
#endif // APPLICATIONCONSTANTS_H
diff --git a/application/defaultsettings.cpp b/application/defaultsettings.cpp
index 8192090..872204e 100644
--- a/application/defaultsettings.cpp
+++ b/application/defaultsettings.cpp
@@ -56,6 +56,7 @@ void DefaultSettings::reset(QSettings &settings)
settings.setValue("ZJUConnect/AddRoute", false);
settings.setValue("ZJUConnect/DNSHijack", false);
settings.setValue("ZJUConnect/FakeIP", false);
+ settings.setValue("ZJUConnect/TCPTunnelMode", false);
settings.setValue("ZJUConnect/AutoDetectInterface", false);
settings.setValue("ZJUConnect/TCPPortForwarding", "");
diff --git a/application/settingsmigrator.cpp b/application/settingsmigrator.cpp
index 07eac1c..003c776 100644
--- a/application/settingsmigrator.cpp
+++ b/application/settingsmigrator.cpp
@@ -22,11 +22,6 @@ SettingsMigrationAction SettingsMigrator::prepare(QSettings &settings)
{
return SettingsMigrationAction::MigrateAutoStart;
}
- if (configVersion == 8)
- {
- settings.remove("ZJUConnect/TCPTunnelMode");
- return SettingsMigrationAction::None;
- }
if (configVersion < ApplicationConstants::ConfigVersion)
{
return SettingsMigrationAction::RecommendReset;
diff --git a/core/connectionprofile.h b/core/connectionprofile.h
index f9b0c4c..0784933 100644
--- a/core/connectionprofile.h
+++ b/core/connectionprofile.h
@@ -49,6 +49,7 @@ struct TunnelOptions
bool addRoute = false;
bool dnsHijack = false;
bool fakeIp = false;
+ bool tcpTunnelMode = false;
QString tcpPortForwarding;
QString udpPortForwarding;
};
diff --git a/infrastructure/coreprocess/corecommandbuilder.cpp b/infrastructure/coreprocess/corecommandbuilder.cpp
index 0a5e942..744bde2 100644
--- a/infrastructure/coreprocess/corecommandbuilder.cpp
+++ b/infrastructure/coreprocess/corecommandbuilder.cpp
@@ -217,6 +217,10 @@ CoreCommand CoreCommandBuilder::build(const ConnectionProfile &profile, const Co
arguments << "-add-route";
}
}
+ if (profile.tunnel.tcpTunnelMode)
+ {
+ arguments << "-tcp-tunnel-mode";
+ }
if (profile.debug.detailedOutput)
{
arguments << "-debug-dump";
diff --git a/infrastructure/settings/settingsprofileloader.cpp b/infrastructure/settings/settingsprofileloader.cpp
index fcb3484..884cbd3 100644
--- a/infrastructure/settings/settingsprofileloader.cpp
+++ b/infrastructure/settings/settingsprofileloader.cpp
@@ -73,6 +73,7 @@ ConnectionProfile SettingsProfileLoader::load(
settings.value("ZJUConnect/AddRoute").toBool(),
settings.value("ZJUConnect/DNSHijack").toBool(),
settings.value("ZJUConnect/FakeIP").toBool(),
+ settings.value("ZJUConnect/TCPTunnelMode").toBool(),
settings.value("ZJUConnect/TCPPortForwarding").toString(),
settings.value("ZJUConnect/UDPPortForwarding").toString()
};
diff --git a/presentation/dialogs/settingwindow/settingwindow.cpp b/presentation/dialogs/settingwindow/settingwindow.cpp
index e638a17..c29a7bf 100644
--- a/presentation/dialogs/settingwindow/settingwindow.cpp
+++ b/presentation/dialogs/settingwindow/settingwindow.cpp
@@ -288,6 +288,7 @@ void SettingWindow::loadSettings()
ui->routeCheckBox->setChecked(settings->value("ZJUConnect/AddRoute").toBool());
ui->dnsHijackCheckBox->setChecked(settings->value("ZJUConnect/DNSHijack").toBool());
ui->fakeIPCheckBox->setChecked(settings->value("ZJUConnect/FakeIP").toBool());
+ ui->tcpTunnelModeCheckBox->setChecked(settings->value("ZJUConnect/TCPTunnelMode").toBool());
ui->autoDetectInterfaceCheckBox->setChecked(settings->value("ZJUConnect/AutoDetectInterface", false).toBool());
tcpPortForwarding = settings->value("ZJUConnect/TCPPortForwarding").toString();
@@ -384,7 +385,7 @@ void SettingWindow::applySettings()
settings->setValue("ZJUConnect/AddRoute", ui->routeCheckBox->isChecked());
settings->setValue("ZJUConnect/DNSHijack", ui->dnsHijackCheckBox->isChecked());
settings->setValue("ZJUConnect/FakeIP", ui->fakeIPCheckBox->isChecked());
- settings->remove("ZJUConnect/TCPTunnelMode");
+ settings->setValue("ZJUConnect/TCPTunnelMode", ui->tcpTunnelModeCheckBox->isChecked());
settings->setValue("ZJUConnect/AutoDetectInterface", ui->autoDetectInterfaceCheckBox->isChecked());
diff --git a/presentation/dialogs/settingwindow/settingwindow.ui b/presentation/dialogs/settingwindow/settingwindow.ui
index 5f2e9ca..b8580a6 100644
--- a/presentation/dialogs/settingwindow/settingwindow.ui
+++ b/presentation/dialogs/settingwindow/settingwindow.ui
@@ -915,6 +915,13 @@
+ -
+
+
+ 禁用 L3 隧道
+
+
+
-
diff --git a/tests/corecommandbuilder_test.cpp b/tests/corecommandbuilder_test.cpp
index 67e539e..2547270 100644
--- a/tests/corecommandbuilder_test.cpp
+++ b/tests/corecommandbuilder_test.cpp
@@ -83,7 +83,7 @@ bool buildsCompleteCommandInCompatibleOrder()
profile.dns = {"10.0.0.1", false, "10.0.0.2", 60, true, "example.org=1.1.1.1"};
profile.proxy = {"127.0.0.1:1080", "127.0.0.1:1081", "ss://url", "http://direct",
true, "example.org"};
- profile.tunnel = {true, true, true, true, "127.0.0.1:80/10.0.0.1:80",
+ profile.tunnel = {true, true, true, true, true, "127.0.0.1:80/10.0.0.1:80",
"127.0.0.1:53/10.0.0.1:53"};
profile.behavior = {30, true, true, "https://keepalive", "en0", true, true, true,
true};
@@ -121,6 +121,7 @@ bool buildsCompleteCommandInCompatibleOrder()
"-dns-hijack",
"-fake-ip",
"-add-route",
+ "-tcp-tunnel-mode",
"-debug-dump",
"-debug-pcap-file", "/tmp/debug capture.pcap",
"-debug-tls-log-file", "/tmp/debug capture.keys.log",
diff --git a/tests/settingsmigrator_test.cpp b/tests/settingsmigrator_test.cpp
index 6889be3..92db000 100644
--- a/tests/settingsmigrator_test.cpp
+++ b/tests/settingsmigrator_test.cpp
@@ -38,29 +38,10 @@ bool recommendsResetForUnsupportedVersions()
}
return passed;
}
-
-bool removesTcpTunnelModeFromVersionEightProfiles()
-{
- QTemporaryDir directory;
- QSettings settings(directory.filePath("profile.ini"), QSettings::IniFormat);
- settings.setValue("Common/ConfigVersion", 8);
- settings.setValue("ZJUConnect/TCPTunnelMode", true);
-
- const bool passed =
- SettingsMigrator::prepare(settings) == SettingsMigrationAction::None
- && !settings.contains("ZJUConnect/TCPTunnelMode");
- if (!passed)
- {
- qCritical() << "removesTcpTunnelModeFromVersionEightProfiles failed";
- }
- return passed;
-}
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
- return migratesKnownVersions()
- && recommendsResetForUnsupportedVersions()
- && removesTcpTunnelModeFromVersionEightProfiles() ? 0 : 1;
+ return migratesKnownVersions() && recommendsResetForUnsupportedVersions() ? 0 : 1;
}
diff --git a/tests/settingsprofileloader_test.cpp b/tests/settingsprofileloader_test.cpp
index 5b45ac0..a9897c5 100644
--- a/tests/settingsprofileloader_test.cpp
+++ b/tests/settingsprofileloader_test.cpp
@@ -47,6 +47,7 @@ bool loadsSettingsIntoTypedProfile()
settings.setValue("ZJUConnect/AddRoute", true);
settings.setValue("ZJUConnect/DNSHijack", true);
settings.setValue("ZJUConnect/FakeIP", true);
+ settings.setValue("ZJUConnect/TCPTunnelMode", true);
settings.setValue("ZJUConnect/TCPPortForwarding", "tcp-forward");
settings.setValue("ZJUConnect/UDPPortForwarding", "udp-forward");
settings.setValue("ZJUConnect/UpdateBestNodesInterval", 30);
@@ -97,6 +98,7 @@ bool loadsSettingsIntoTypedProfile()
&& profile.tunnel.addRoute
&& profile.tunnel.dnsHijack
&& profile.tunnel.fakeIp
+ && profile.tunnel.tcpTunnelMode
&& profile.tunnel.tcpPortForwarding == "tcp-forward"
&& profile.tunnel.udpPortForwarding == "udp-forward"
&& profile.behavior.updateBestNodesInterval == 30