diff --git a/client/configurators/vpn_configurator.cpp b/client/configurators/vpn_configurator.cpp index d9887f0a..28669168 100644 --- a/client/configurators/vpn_configurator.cpp +++ b/client/configurators/vpn_configurator.cpp @@ -10,6 +10,7 @@ #include #include "containers/containers_defs.h" +#include "utils.h" Settings &VpnConfigurator::m_settings() { @@ -41,24 +42,59 @@ QString VpnConfigurator::genVpnProtocolConfig(const ServerCredentials &credentia } } -QString VpnConfigurator::processConfigWithLocalSettings(DockerContainer container, Proto proto, QString config) +QPair VpnConfigurator::getDnsForConfig(int serverIndex) { - config.replace("$PRIMARY_DNS", m_settings().primaryDns()); - config.replace("$SECONDARY_DNS", m_settings().secondaryDns()); + QPair dns; + + bool useAmneziaDns = m_settings().useAmneziaDns(); + const QJsonObject &server = m_settings().server(serverIndex); + + dns.first = server.value(config_key::dns1).toString(); + dns.second = server.value(config_key::dns2).toString(); + + if (dns.first.isEmpty() || !Utils::checkIPv4Format(dns.first)) { + if (useAmneziaDns && m_settings().containers(serverIndex).contains(DockerContainer::Dns)) { + dns.first = protocols::dns::amneziaDnsIp; + } + else dns.first = m_settings().primaryDns(); + } + if (dns.second.isEmpty() || !Utils::checkIPv4Format(dns.second)) { + dns.second = m_settings().secondaryDns(); + } + + qDebug() << "VpnConfigurator::getDnsForConfig" << dns.first << dns.second; + return dns; +} + +QString &VpnConfigurator::processConfigWithDnsSettings(int serverIndex, DockerContainer container, + Proto proto, QString &config) +{ + auto dns = getDnsForConfig(serverIndex); + + config.replace("$PRIMARY_DNS", dns.first); + config.replace("$SECONDARY_DNS", dns.second); + + return config; +} + +QString &VpnConfigurator::processConfigWithLocalSettings(int serverIndex, DockerContainer container, + Proto proto, QString &config) +{ + processConfigWithDnsSettings(serverIndex, container, proto, config); if (proto == Proto::OpenVpn) { - return OpenVpnConfigurator::processConfigWithLocalSettings(config); + config = OpenVpnConfigurator::processConfigWithLocalSettings(config); } return config; } -QString VpnConfigurator::processConfigWithExportSettings(DockerContainer container, Proto proto, QString config) +QString &VpnConfigurator::processConfigWithExportSettings(int serverIndex, DockerContainer container, + Proto proto, QString &config) { - config.replace("$PRIMARY_DNS", m_settings().primaryDns()); - config.replace("$SECONDARY_DNS", m_settings().secondaryDns()); + processConfigWithDnsSettings(serverIndex, container, proto, config); if (proto == Proto::OpenVpn) { - return OpenVpnConfigurator::processConfigWithExportSettings(config); + config = OpenVpnConfigurator::processConfigWithExportSettings(config); } return config; } diff --git a/client/configurators/vpn_configurator.h b/client/configurators/vpn_configurator.h index b7ced4d6..702fc9d4 100644 --- a/client/configurators/vpn_configurator.h +++ b/client/configurators/vpn_configurator.h @@ -15,8 +15,11 @@ public: static QString genVpnProtocolConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, Proto proto, ErrorCode *errorCode = nullptr); - static QString processConfigWithLocalSettings(DockerContainer container, Proto proto, QString config); - static QString processConfigWithExportSettings(DockerContainer container, Proto proto, QString config); + static QPair getDnsForConfig(int serverIndex); + static QString &processConfigWithDnsSettings(int serverIndex, DockerContainer container, Proto proto, QString &config); + + static QString &processConfigWithLocalSettings(int serverIndex, DockerContainer container, Proto proto, QString &config); + static QString &processConfigWithExportSettings(int serverIndex, DockerContainer container, Proto proto, QString &config); // workaround for containers which is not support normal configaration static void updateContainerConfigAfterInstallation(DockerContainer container, diff --git a/client/debug.cpp b/client/debug.cpp index caccbd37..c1af0ffb 100644 --- a/client/debug.cpp +++ b/client/debug.cpp @@ -62,6 +62,20 @@ QString Debug::userLogsDir() return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/log"; } +QString Debug::userLogsFilePath() +{ + return userLogsDir() + QDir::separator() + m_logFileName; +} + +QString Debug::getLogs() +{ + m_file.flush(); + QFile file(userLogsFilePath()); + + file.open(QIODevice::ReadOnly); + return file.readAll(); +} + bool Debug::openLogsFolder() { QString path = userLogsDir(); @@ -93,11 +107,7 @@ void Debug::clearLogs() bool isLogActive = m_file.isOpen(); m_file.close(); - - QString path = userLogsDir(); - QDir appDir(path); - QFile file; - file.setFileName(appDir.filePath(m_logFileName)); + QFile file(userLogsFilePath()); file.open(QIODevice::WriteOnly | QIODevice::Truncate); file.resize(0); diff --git a/client/debug.h b/client/debug.h index 50bf82ca..3e560ffa 100644 --- a/client/debug.h +++ b/client/debug.h @@ -18,6 +18,9 @@ public: static void clearServiceLogs(); static void cleanUp(); + static QString userLogsFilePath(); + static QString getLogs(); + private: static QString userLogsDir(); diff --git a/client/protocols/protocols_defs.h b/client/protocols/protocols_defs.h index 6eabcd39..e1b50a58 100644 --- a/client/protocols/protocols_defs.h +++ b/client/protocols/protocols_defs.h @@ -15,6 +15,10 @@ constexpr char password[] = "password"; constexpr char port[] = "port"; constexpr char local_port[] = "local_port"; +constexpr char dns1[] = "dns1"; +constexpr char dns2[] = "dns2"; + + constexpr char description[] = "description"; constexpr char cert[] = "cert"; constexpr char config[] = "config"; @@ -55,6 +59,9 @@ constexpr char last_config[] = "last_config"; namespace protocols { +namespace dns { +constexpr char amneziaDnsIp[] = "172.29.172.254"; +} namespace openvpn { constexpr char defaultSubnetAddress[] = "10.8.0.0"; diff --git a/client/settings.h b/client/settings.h index de0207b6..d5cb1639 100644 --- a/client/settings.h +++ b/client/settings.h @@ -92,6 +92,8 @@ public: void addVpnIps(RouteMode mode, const QStringList &ip); void removeVpnSites(RouteMode mode, const QStringList &sites); + bool useAmneziaDns() const { return m_settings.value("Conf/useAmneziaDns", true).toBool(); } + void setUseAmneziaDns(bool enabled) { m_settings.setValue("Conf/useAmneziaDns", enabled); } QString primaryDns() const; QString secondaryDns() const; diff --git a/client/ui/pages_logic/AppSettingsLogic.cpp b/client/ui/pages_logic/AppSettingsLogic.cpp index 4278141b..adbc8e00 100644 --- a/client/ui/pages_logic/AppSettingsLogic.cpp +++ b/client/ui/pages_logic/AppSettingsLogic.cpp @@ -4,6 +4,10 @@ #include "defines.h" #include "ui/qautostart.h" +#include +#include +#include + using namespace amnezia; using namespace PageEnumNS; @@ -61,7 +65,22 @@ void AppSettingsLogic::onPushButtonOpenLogsClicked() void AppSettingsLogic::onPushButtonExportLogsClicked() { + QString log = Debug::getLogs(); + QString ext = ".log"; + QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save log"), + QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*" + ext); + + if (fileName.isEmpty()) return; + if (!fileName.endsWith(ext)) fileName.append(ext); + + QFile save(fileName); + save.open(QIODevice::WriteOnly); + save.write(log.toUtf8()); + save.close(); + + QFileInfo fi(fileName); + QDesktopServices::openUrl(fi.absoluteDir().absolutePath()); } void AppSettingsLogic::onPushButtonClearLogsClicked() diff --git a/client/ui/pages_logic/NetworkSettingsLogic.cpp b/client/ui/pages_logic/NetworkSettingsLogic.cpp index 668007e6..bd593e3a 100644 --- a/client/ui/pages_logic/NetworkSettingsLogic.cpp +++ b/client/ui/pages_logic/NetworkSettingsLogic.cpp @@ -5,6 +5,7 @@ NetworkSettingsLogic::NetworkSettingsLogic(UiLogic *logic, QObject *parent): PageLogicBase(logic, parent), + m_checkBoxUseAmneziaDnsChecked{false}, m_ipAddressRegex{Utils::ipAddressRegExp()} { @@ -12,6 +13,8 @@ NetworkSettingsLogic::NetworkSettingsLogic(UiLogic *logic, QObject *parent): void NetworkSettingsLogic::onUpdatePage() { + set_checkBoxUseAmneziaDnsChecked(m_settings.useAmneziaDns()); + set_lineEditDns1Text(m_settings.primaryDns()); set_lineEditDns2Text(m_settings.secondaryDns()); } @@ -41,3 +44,8 @@ void NetworkSettingsLogic::onPushButtonResetDns2Clicked() m_settings.setSecondaryDns(m_settings.cloudFlareNs2); onUpdatePage(); } + +void NetworkSettingsLogic::onCheckBoxUseAmneziaDnsToggled(bool checked) +{ + m_settings.setUseAmneziaDns(checked); +} diff --git a/client/ui/pages_logic/NetworkSettingsLogic.h b/client/ui/pages_logic/NetworkSettingsLogic.h index 336f5aea..b70bc143 100644 --- a/client/ui/pages_logic/NetworkSettingsLogic.h +++ b/client/ui/pages_logic/NetworkSettingsLogic.h @@ -9,6 +9,8 @@ class NetworkSettingsLogic : public PageLogicBase { Q_OBJECT + AUTO_PROPERTY(bool, checkBoxUseAmneziaDnsChecked) + AUTO_PROPERTY(QString, lineEditDns1Text) AUTO_PROPERTY(QString, lineEditDns2Text) READONLY_PROPERTY(QRegExp, ipAddressRegex) @@ -21,6 +23,8 @@ public: Q_INVOKABLE void onPushButtonResetDns1Clicked(); Q_INVOKABLE void onPushButtonResetDns2Clicked(); + Q_INVOKABLE void onCheckBoxUseAmneziaDnsToggled(bool checked); + public: explicit NetworkSettingsLogic(UiLogic *uiLogic, QObject *parent = nullptr); ~NetworkSettingsLogic() = default; diff --git a/client/ui/pages_logic/ServerSettingsLogic.cpp b/client/ui/pages_logic/ServerSettingsLogic.cpp index 50c62f35..16efe55b 100644 --- a/client/ui/pages_logic/ServerSettingsLogic.cpp +++ b/client/ui/pages_logic/ServerSettingsLogic.cpp @@ -28,8 +28,8 @@ void ServerSettingsLogic::onUpdatePage() set_pushButtonClearVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex)); set_pushButtonClearClientCacheVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex)); set_pushButtonShareFullVisible(m_settings.haveAuthData(uiLogic()->selectedServerIndex)); - QJsonObject server = m_settings.server(uiLogic()->selectedServerIndex); - QString port = server.value(config_key::port).toString(); + const QJsonObject &server = m_settings.server(uiLogic()->selectedServerIndex); + const QString &port = server.value(config_key::port).toString(); set_labelServerText(QString("%1@%2%3%4") .arg(server.value(config_key::userName).toString()) .arg(server.value(config_key::hostName).toString()) diff --git a/client/ui/pages_logic/ShareConnectionLogic.cpp b/client/ui/pages_logic/ShareConnectionLogic.cpp index 664c8dad..eb6adf08 100644 --- a/client/ui/pages_logic/ShareConnectionLogic.cpp +++ b/client/ui/pages_logic/ShareConnectionLogic.cpp @@ -60,21 +60,24 @@ void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked() set_shareAmneziaQrCodeTextSeriesLength(0); QJsonObject serverConfig; + int serverIndex = uiLogic()->selectedServerIndex; + DockerContainer container = uiLogic()->selectedDockerContainer; + // Full access if (shareFullAccess()) { - serverConfig = m_settings.server(uiLogic()->selectedServerIndex); + serverConfig = m_settings.server(serverIndex); } // Container share else { - ServerCredentials credentials = m_settings.serverCredentials(uiLogic()->selectedServerIndex); - QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer); - containerConfig.insert(config_key::container, ContainerProps::containerToString(uiLogic()->selectedDockerContainer)); + ServerCredentials credentials = m_settings.serverCredentials(serverIndex); + QJsonObject containerConfig = m_settings.containerConfig(serverIndex, container); + containerConfig.insert(config_key::container, ContainerProps::containerToString(container)); ErrorCode e = ErrorCode::NoError; - for (Proto p: ContainerProps::protocolsForContainer(uiLogic()->selectedDockerContainer)) { - QJsonObject protoConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, p); + for (Proto p: ContainerProps::protocolsForContainer(container)) { + QJsonObject protoConfig = m_settings.protocolConfig(serverIndex, container, p); - QString cfg = VpnConfigurator::genVpnProtocolConfig(credentials, uiLogic()->selectedDockerContainer, containerConfig, p, &e); + QString cfg = VpnConfigurator::genVpnProtocolConfig(credentials, container, containerConfig, p, &e); if (e) { cfg = "Error generating config"; break; @@ -85,12 +88,17 @@ void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked() QByteArray ba; if (!e) { - serverConfig = m_settings.server(uiLogic()->selectedServerIndex); + serverConfig = m_settings.server(serverIndex); serverConfig.remove(config_key::userName); serverConfig.remove(config_key::password); serverConfig.remove(config_key::port); serverConfig.insert(config_key::containers, QJsonArray {containerConfig}); - serverConfig.insert(config_key::defaultContainer, ContainerProps::containerToString(uiLogic()->selectedDockerContainer)); + serverConfig.insert(config_key::defaultContainer, ContainerProps::containerToString(container)); + + auto dns = VpnConfigurator::getDnsForConfig(serverIndex); + serverConfig.insert(config_key::dns1, dns.first); + serverConfig.insert(config_key::dns2, dns.second); + } else { set_textEditShareAmneziaCodeText(tr("Error while generating connection profile")); @@ -111,12 +119,15 @@ void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked() void ShareConnectionLogic::onPushButtonShareOpenVpnGenerateClicked() { - ServerCredentials credentials = m_settings.serverCredentials(uiLogic()->selectedServerIndex); - const QJsonObject &containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer); + int serverIndex = uiLogic()->selectedServerIndex; + DockerContainer container = uiLogic()->selectedDockerContainer; + ServerCredentials credentials = m_settings.serverCredentials(serverIndex); + + const QJsonObject &containerConfig = m_settings.containerConfig(serverIndex, container); ErrorCode e = ErrorCode::NoError; - QString cfg = OpenVpnConfigurator::genOpenVpnConfig(credentials, uiLogic()->selectedDockerContainer, containerConfig, &e); - cfg = VpnConfigurator::processConfigWithExportSettings(uiLogic()->selectedDockerContainer, Proto::OpenVpn, cfg); + QString cfg = OpenVpnConfigurator::genOpenVpnConfig(credentials, container, containerConfig, &e); + cfg = VpnConfigurator::processConfigWithExportSettings(serverIndex, container, Proto::OpenVpn, cfg); set_textEditShareOpenVpnCodeText(QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::config].toString()); } @@ -202,7 +213,7 @@ void ShareConnectionLogic::onPushButtonShareWireGuardGenerateClicked() errorString(e)); return; } - cfg = VpnConfigurator::processConfigWithExportSettings(container, Proto::WireGuard, cfg); + cfg = VpnConfigurator::processConfigWithExportSettings(serverIndex, container, Proto::WireGuard, cfg); cfg = QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::config].toString(); set_textEditShareWireGuardCodeText(cfg); @@ -223,7 +234,7 @@ void ShareConnectionLogic::onPushButtonShareIkev2GenerateClicked() Ikev2Configurator::ConnectionData connData = Ikev2Configurator::prepareIkev2Config(credentials, container); QString cfg = Ikev2Configurator::genIkev2Config(connData); - cfg = VpnConfigurator::processConfigWithExportSettings(container, Proto::Ikev2, cfg); + cfg = VpnConfigurator::processConfigWithExportSettings(serverIndex, container, Proto::Ikev2, cfg); cfg = QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::cert].toString(); set_textEditShareIkev2CertText(cfg); diff --git a/client/ui/qml/Pages/PageAbout.qml b/client/ui/qml/Pages/PageAbout.qml index 7bf406d3..4910243f 100644 --- a/client/ui/qml/Pages/PageAbout.qml +++ b/client/ui/qml/Pages/PageAbout.qml @@ -58,9 +58,19 @@ PageBase { anchors.topMargin: 20 font.pixelSize: 22 text: qsTr("Donate") + width: undefined anchors.top: label_support.bottom } + LabelType { + anchors.bottom: caption3.bottom + anchors.left: caption3.right + anchors.leftMargin: 5 + font.pixelSize: 24 + text: "♥" + color: "red" + } + RichLabelType { id: label_donate anchors.top: caption3.bottom diff --git a/client/ui/qml/Pages/PageNetworkSetting.qml b/client/ui/qml/Pages/PageNetworkSetting.qml index ef23c200..1665575b 100644 --- a/client/ui/qml/Pages/PageNetworkSetting.qml +++ b/client/ui/qml/Pages/PageNetworkSetting.qml @@ -17,17 +17,41 @@ PageBase { id: caption text: qsTr("DNS Servers") } + + CheckBoxType { + id: cb_amnezia_dns + anchors.top: caption.bottom + x: 30 + width: parent.width - 60 + text: qsTr("Use AmneziaDNS service (recommended)") + checked: NetworkSettingsLogic.checkBoxUseAmneziaDnsChecked + onCheckedChanged: { + NetworkSettingsLogic.checkBoxUseAmneziaDnsChecked = checked + NetworkSettingsLogic.onCheckBoxUseAmneziaDnsToggled(checked) + } + } + + LabelType { + id: lb_amnezia_dns + x: 30 + anchors.top: cb_amnezia_dns.bottom + width: parent.width - 60 + text: qsTr("Use AmneziaDNS container on your server, when it installed.\n +Your AmneziaDNS server available only when it installed and VPN connected, it has internal IP address 172.29.172.254\n +If AmneziaDNS service is not installed on the same server, or this option is unchecked, the following DNS servers will be used:") + } + LabelType { id: l1 - x: 40 - anchors.top: caption.bottom - width: parent.width - 40 + x: 30 + anchors.top: lb_amnezia_dns.bottom + width: parent.width - 30 height: 21 text: qsTr("Primary DNS server") } TextFieldType { id: dns1 - x: 40 + x: 30 anchors.top: l1.bottom width: parent.width - 90 height: 40 @@ -55,16 +79,16 @@ PageBase { LabelType { id: l2 - x: 40 + x: 30 anchors.top: dns1.bottom anchors.topMargin: 20 - width: parent.width - 40 + width: parent.width - 60 height: 21 text: qsTr("Secondray DNS server") } TextFieldType { id: dns2 - x: 40 + x: 30 anchors.top: l2.bottom width: parent.width - 90 height: 40 diff --git a/client/ui/uilogic.cpp b/client/ui/uilogic.cpp index 1f4eb3a8..400020e6 100644 --- a/client/ui/uilogic.cpp +++ b/client/ui/uilogic.cpp @@ -600,10 +600,11 @@ PageEnumNS::Page UiLogic::currentPage() return static_cast(currentPageValue()); } -void UiLogic::saveTextFile(const QString& desc, const QString& ext, const QString& data) +void UiLogic::saveTextFile(const QString& desc, QString ext, const QString& data) { + ext.replace("*", ""); QString fileName = QFileDialog::getSaveFileName(nullptr, desc, - QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), ext); + QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*" + ext); if (fileName.isEmpty()) return; if (!fileName.endsWith(ext)) fileName.append(ext); @@ -617,10 +618,11 @@ void UiLogic::saveTextFile(const QString& desc, const QString& ext, const QStrin QDesktopServices::openUrl(fi.absoluteDir().absolutePath()); } -void UiLogic::saveBinaryFile(const QString &desc, const QString &ext, const QString &data) +void UiLogic::saveBinaryFile(const QString &desc, QString ext, const QString &data) { + ext.replace("*", ""); QString fileName = QFileDialog::getSaveFileName(nullptr, desc, - QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), ext); + QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*" + ext); if (fileName.isEmpty()) return; if (!fileName.endsWith(ext)) fileName.append(ext); diff --git a/client/ui/uilogic.h b/client/ui/uilogic.h index 1363aca9..b3ee5126 100644 --- a/client/ui/uilogic.h +++ b/client/ui/uilogic.h @@ -100,8 +100,8 @@ public: Q_INVOKABLE void keyPressEvent(Qt::Key key); - Q_INVOKABLE void saveTextFile(const QString& desc, const QString& ext, const QString& data); - Q_INVOKABLE void saveBinaryFile(const QString& desc, const QString& ext, const QString& data); + Q_INVOKABLE void saveTextFile(const QString& desc, QString ext, const QString& data); + Q_INVOKABLE void saveBinaryFile(const QString& desc, QString ext, const QString& data); Q_INVOKABLE void copyToClipboard(const QString& text); QString getDialogConnectErrorText() const; diff --git a/client/vpnconnection.cpp b/client/vpnconnection.cpp index 265773f6..2e55901b 100644 --- a/client/vpnconnection.cpp +++ b/client/vpnconnection.cpp @@ -55,8 +55,11 @@ void VpnConnection::onConnectionStateChanged(VpnProtocol::VpnConnectionState sta IpcClient::Interface()->routeDeleteList(m_vpnProtocol->vpnGateway(), QStringList() << "0.0.0.0"); //qDebug() << "VpnConnection::onConnectionStateChanged :: adding custom routes, count:" << forwardIps.size(); } + QString dns1 = m_vpnConfiguration.value(config_key::dns1).toString(); + QString dns2 = m_vpnConfiguration.value(config_key::dns1).toString(); + IpcClient::Interface()->routeAddList(m_vpnProtocol->vpnGateway(), - QStringList() << m_settings.primaryDns() << m_settings.secondaryDns()); + QStringList() << dns1 << dns2); if (m_settings.routeMode() == Settings::VpnOnlyForwardSites) { @@ -194,12 +197,12 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex, ErrorCode *errorCode) { ErrorCode e = ErrorCode::NoError; - auto lastVpnConfig = getLastVpnConfig(containerConfig); + QMap lastVpnConfig = getLastVpnConfig(containerConfig); QString configData; if (lastVpnConfig.contains(proto)) { configData = lastVpnConfig.value(proto); - configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData); + configData = VpnConfigurator::processConfigWithLocalSettings(serverIndex, container, proto, configData); qDebug() << "VpnConnection::createVpnConfiguration: using saved config for" << ProtocolProps::protoToString(proto); } @@ -210,7 +213,7 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex, QString configDataBeforeLocalProcessing = configData; - configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData); + configData = VpnConfigurator::processConfigWithLocalSettings(serverIndex, container, proto, configData); if (errorCode && e) { @@ -256,6 +259,11 @@ QJsonObject VpnConnection::createVpnConfiguration(int serverIndex, Proto proto = ContainerProps::defaultProtocol(container); vpnConfiguration[config_key::vpnproto] = ProtocolProps::protoToString(proto); + auto dns = VpnConfigurator::getDnsForConfig(serverIndex); + + vpnConfiguration[config_key::dns1] = dns.first; + vpnConfiguration[config_key::dns2] = dns.second; + return vpnConfiguration; } @@ -285,11 +293,8 @@ void VpnConnection::connectToVpn(int serverIndex, if (m_vpnProtocol) { disconnect(m_vpnProtocol.data(), &VpnProtocol::protocolError, this, &VpnConnection::vpnProtocolError); - //qDebug() << "VpnConnection::connectToVpn 1"; m_vpnProtocol->stop(); - //qDebug() << "VpnConnection::connectToVpn 2"; m_vpnProtocol.reset(); - //qDebug() << "VpnConnection::connectToVpn 3"; } ErrorCode e = ErrorCode::NoError;