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