From ea993d82495ee9b9713931af95b93b128bcc1055 Mon Sep 17 00:00:00 2001 From: arm64v8a <48624112+arm64v8a@users.noreply.github.com> Date: Thu, 25 May 2023 09:53:10 +0900 Subject: [PATCH] feat: v2ray freedom strategy --- db/ConfigBuilder.cpp | 2 ++ main/NekoGui.cpp | 1 + main/NekoGui_DataStore.hpp | 1 + ui/dialog_basic_settings.cpp | 9 +++++++++ 4 files changed, 13 insertions(+) diff --git a/db/ConfigBuilder.cpp b/db/ConfigBuilder.cpp index 066186a..6da09d9 100644 --- a/db/ConfigBuilder.cpp +++ b/db/ConfigBuilder.cpp @@ -241,10 +241,12 @@ namespace NekoGui { // direct & bypass & block status->outbounds += QJsonObject{ {"protocol", "freedom"}, + {"domainStrategy", dataStore->core_ray_freedom_domainStrategy}, {"tag", "direct"}, }; status->outbounds += QJsonObject{ {"protocol", "freedom"}, + {"domainStrategy", dataStore->core_ray_freedom_domainStrategy}, {"tag", "bypass"}, }; status->outbounds += QJsonObject{ diff --git a/main/NekoGui.cpp b/main/NekoGui.cpp index 2a54add..80c5de4 100644 --- a/main/NekoGui.cpp +++ b/main/NekoGui.cpp @@ -277,6 +277,7 @@ namespace NekoGui { _add(new configItem("core_box_clash_api_secret", &core_box_clash_api_secret, itemType::string)); _add(new configItem("core_box_underlying_dns", &core_box_underlying_dns, itemType::string)); _add(new configItem("core_ray_direct_dns", &core_ray_direct_dns, itemType::boolean)); + _add(new configItem("core_ray_freedom_domainStrategy", &core_ray_freedom_domainStrategy, itemType::boolean)); _add(new configItem("vpn_internal_tun", &vpn_internal_tun, itemType::boolean)); #ifdef Q_OS_WIN _add(new configItem("core_ray_windows_disable_auto_interface", &core_ray_windows_disable_auto_interface, itemType::boolean)); diff --git a/main/NekoGui_DataStore.hpp b/main/NekoGui_DataStore.hpp index b9acf2b..8821d20 100644 --- a/main/NekoGui_DataStore.hpp +++ b/main/NekoGui_DataStore.hpp @@ -162,6 +162,7 @@ namespace NekoGui { QString core_box_underlying_dns = ""; bool core_ray_direct_dns = false; bool core_ray_windows_disable_auto_interface = false; + QString core_ray_freedom_domainStrategy = ""; // Other Core ExtraCore *extraCore = new ExtraCore; diff --git a/ui/dialog_basic_settings.cpp b/ui/dialog_basic_settings.cpp index 8dc3da5..674896b 100644 --- a/ui/dialog_basic_settings.cpp +++ b/ui/dialog_basic_settings.cpp @@ -404,6 +404,7 @@ void DialogBasicSettings::on_core_settings_clicked() { MyLineEdit *core_box_underlying_dns; QCheckBox *core_ray_direct_dns; QCheckBox *core_ray_windows_disable_auto_interface; + QComboBox *core_ray_freedom_domainStrategy; // auto core_box_underlying_dns_l = new QLabel(tr("Override underlying DNS")); core_box_underlying_dns_l->setToolTip(tr( @@ -442,6 +443,13 @@ void DialogBasicSettings::on_core_settings_clicked() { connect(core_ray_direct_dns, &QCheckBox::clicked, this, [&] { CACHE.needRestart = true; }); layout->addWidget(core_ray_direct_dns_l, ++line, 0); layout->addWidget(core_ray_direct_dns, line, 1); + // + auto core_ray_freedom_domainStrategy_l = new QLabel("Freedom Strategy"); + core_ray_freedom_domainStrategy = new QComboBox; + core_ray_freedom_domainStrategy->addItems({"", "AsIs", "UseIP", "UseIPv4", "UseIPv6"}); + core_ray_freedom_domainStrategy->setCurrentText(NekoGui::dataStore->core_ray_freedom_domainStrategy); + layout->addWidget(core_ray_freedom_domainStrategy_l, ++line, 0); + layout->addWidget(core_ray_freedom_domainStrategy, line, 1); #ifdef Q_OS_WIN auto core_ray_windows_disable_auto_interface_l = new QLabel("NKR_CORE_RAY_WINDOWS_DISABLE_AUTO_INTERFACE"); core_ray_windows_disable_auto_interface_l->setToolTip(tr("If you VPN mode is not working, try to change this option.")); @@ -463,6 +471,7 @@ void DialogBasicSettings::on_core_settings_clicked() { NekoGui::dataStore->core_box_clash_api_secret = core_box_clash_api_secret->text(); } else { NekoGui::dataStore->core_ray_direct_dns = core_ray_direct_dns->isChecked(); + NekoGui::dataStore->core_ray_freedom_domainStrategy = core_ray_freedom_domainStrategy->currentText(); #ifdef Q_OS_WIN NekoGui::dataStore->core_ray_windows_disable_auto_interface = core_ray_windows_disable_auto_interface->isChecked(); #endif