diff --git a/client/configurators/vpn_configurator.cpp b/client/configurators/vpn_configurator.cpp index cb67c351..245e4d6f 100644 --- a/client/configurators/vpn_configurator.cpp +++ b/client/configurators/vpn_configurator.cpp @@ -2,7 +2,7 @@ #include "openvpn_configurator.h" #include "cloak_configurator.h" #include "shadowsocks_configurator.h" -//#include "wireguard_configurator.h" +#include "wireguard_configurator.h" #include #include @@ -24,14 +24,30 @@ QString VpnConfigurator::genVpnProtocolConfig(const ServerCredentials &credentia case Protocol::Cloak: return CloakConfigurator::genCloakConfig(credentials, container, containerConfig, errorCode); -// case Protocol::WireGuard: -// return WireGuardConfigurator::genWireGuardConfig(credentials, container, containerConfig, errorCode); + case Protocol::WireGuard: + return WireguardConfigurator::genWireguardConfig(credentials, container, containerConfig, errorCode); default: return ""; } } +QString VpnConfigurator::processConfigWithLocalSettings(DockerContainer container, Protocol proto, QString config) +{ + if (proto == Protocol::OpenVpn) { + return OpenVpnConfigurator::processConfigWithLocalSettings(config); + } + return config; +} + +QString VpnConfigurator::processConfigWithExportSettings(DockerContainer container, Protocol proto, QString config) +{ + if (proto == Protocol::OpenVpn) { + return OpenVpnConfigurator::processConfigWithExportSettings(config); + } + return config; +} + void VpnConfigurator::updateContainerConfigAfterInstallation(DockerContainer container, QJsonObject &containerConfig, const QString &stdOut) { diff --git a/client/configurators/vpn_configurator.h b/client/configurators/vpn_configurator.h index d6b4c5d8..32c030d7 100644 --- a/client/configurators/vpn_configurator.h +++ b/client/configurators/vpn_configurator.h @@ -14,6 +14,10 @@ public: static QString genVpnProtocolConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, Protocol proto, ErrorCode *errorCode = nullptr); + static QString processConfigWithLocalSettings(DockerContainer container, Protocol proto, QString config); + static QString processConfigWithExportSettings(DockerContainer container, Protocol proto, QString config); + + // workaround for containers which is not support normal configaration static void updateContainerConfigAfterInstallation(DockerContainer container, QJsonObject &containerConfig, const QString &stdOut); diff --git a/client/protocols/openvpnovercloakprotocol.cpp b/client/protocols/openvpnovercloakprotocol.cpp index d034cf93..6636c27a 100644 --- a/client/protocols/openvpnovercloakprotocol.cpp +++ b/client/protocols/openvpnovercloakprotocol.cpp @@ -44,7 +44,8 @@ ErrorCode OpenVpnOverCloakProtocol::start() << "-p" << m_cloakConfig.value(config_key::port).toString(amnezia::protocols::cloak::defaultPort) << "-l" << amnezia::protocols::openvpn::defaultPort; - if (m_cloakConfig.value(config_key::transport_proto).toString() == protocols::UDP) { + ProtocolEnumNS::TransportProto tp = ProtocolProps::transportProtoFromString(m_cloakConfig.value(config_key::transport_proto).toString()); + if (tp == ProtocolEnumNS::TransportProto::Udp) { args << "-u"; } diff --git a/client/protocols/protocols_defs.cpp b/client/protocols/protocols_defs.cpp index ed316c8d..26c86c4c 100644 --- a/client/protocols/protocols_defs.cpp +++ b/client/protocols/protocols_defs.cpp @@ -43,7 +43,7 @@ TransportProto ProtocolProps::transportProtoFromString(QString p) QMetaEnum metaEnum = QMetaEnum::fromType(); for (int i = 0; i < metaEnum.keyCount(); ++i) { TransportProto tp = static_cast(i); - if (p.toLower() == transportProtoToString(tp)) return tp; + if (p.toLower() == transportProtoToString(tp).toLower()) return tp; } return TransportProto::Udp; } @@ -52,12 +52,17 @@ QString ProtocolProps::transportProtoToString(TransportProto proto, Protocol p) { QMetaEnum metaEnum = QMetaEnum::fromType(); QString protoKey = metaEnum.valueToKey(static_cast(proto)); - if (p == Protocol::OpenVpn){ - return protoKey.toUpper(); - } - else { - return protoKey.toLower(); - } + return protoKey.toLower(); + +// if (p == Protocol::OpenVpn){ +// return protoKey.toLower(); +// } +// else if (p == Protocol::ShadowSocks) { +// return protoKey.toUpper(); +// } +// else { +// return protoKey.toLower(); +// } } @@ -103,6 +108,9 @@ int ProtocolProps::defaultPort(Protocol p) case Protocol::Cloak : return 443; case Protocol::ShadowSocks : return 6789; case Protocol::WireGuard : return 51820; + case Protocol::Ikev2 : return -1; + case Protocol::L2tp : return -1; + case Protocol::TorWebSite : return -1; case Protocol::Dns : return 53; case Protocol::FileShare : return 139; @@ -119,7 +127,11 @@ bool ProtocolProps::defaultPortChangeable(Protocol p) case Protocol::Cloak : return true; case Protocol::ShadowSocks : return true; case Protocol::WireGuard : return true; - case Protocol::TorWebSite : return true; + case Protocol::Ikev2 : return false; + case Protocol::L2tp : return false; + + + case Protocol::TorWebSite : return true; case Protocol::Dns : return false; case Protocol::FileShare : return false; default: return -1; @@ -134,12 +146,13 @@ TransportProto ProtocolProps::defaultTransportProto(Protocol p) case Protocol::Cloak : return TransportProto::Tcp; case Protocol::ShadowSocks : return TransportProto::Tcp; case Protocol::WireGuard : return TransportProto::Udp; + case Protocol::Ikev2 : return TransportProto::Udp; + case Protocol::L2tp : return TransportProto::Udp; // non-vpn case Protocol::TorWebSite : return TransportProto::Tcp; case Protocol::Dns : return TransportProto::Udp; case Protocol::FileShare : return TransportProto::Udp; case Protocol::Sftp : return TransportProto::Tcp; - default: return TransportProto::Udp; } } @@ -151,6 +164,8 @@ bool ProtocolProps::defaultTransportProtoChangeable(Protocol p) case Protocol::Cloak : return false; case Protocol::ShadowSocks : return false; case Protocol::WireGuard : return false; + case Protocol::Ikev2 : return false; + case Protocol::L2tp : return false; // non-vpn case Protocol::TorWebSite : return false; case Protocol::Dns : return false; diff --git a/client/protocols/protocols_defs.h b/client/protocols/protocols_defs.h index 669682e0..98f16f3f 100644 --- a/client/protocols/protocols_defs.h +++ b/client/protocols/protocols_defs.h @@ -46,10 +46,6 @@ constexpr char last_config[] = "last_config"; namespace protocols { - -constexpr char UDP[] = "udp"; // case sens -constexpr char TCP[] = "tcp"; - namespace openvpn { constexpr char defaultSubnetAddress[] = "10.8.0.0"; constexpr char defaultSubnetMask[] = "255.255.255.0"; @@ -122,6 +118,8 @@ enum Protocol { ShadowSocks, Cloak, WireGuard, + Ikev2, + L2tp, // non-vpn TorWebSite, diff --git a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp index 704b2937..e81249cf 100644 --- a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp +++ b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp @@ -133,7 +133,9 @@ void OpenVpnLogic::onPushButtonProtoOpenVpnSaveClicked() QJsonObject OpenVpnLogic::getProtocolConfigFromPage(QJsonObject oldConfig) { oldConfig.insert(config_key::subnet_address, lineEditSubnetText()); - oldConfig.insert(config_key::transport_proto, radioButtonUdpChecked() ? protocols::UDP : protocols::TCP); + oldConfig.insert(config_key::transport_proto, + ProtocolProps::transportProtoToString(radioButtonUdpChecked() ? ProtocolEnumNS::Udp : ProtocolEnumNS::Tcp)); + oldConfig.insert(config_key::ncp_disable, ! checkBoxAutoEncryptionChecked()); oldConfig.insert(config_key::cipher, comboBoxVpnCipherText()); oldConfig.insert(config_key::hash, comboBoxVpnHashText()); diff --git a/client/vpnconnection.cpp b/client/vpnconnection.cpp index 48b164e9..1e589f45 100644 --- a/client/vpnconnection.cpp +++ b/client/vpnconnection.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -154,30 +155,19 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex, QString configData; if (lastVpnConfig.contains(proto)) { configData = lastVpnConfig.value(proto); - if (proto == Protocol::OpenVpn) { - configData = OpenVpnConfigurator::processConfigWithLocalSettings(configData); - } + configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData); + qDebug() << "VpnConnection::createVpnConfiguration: using saved config for" << ProtocolProps::protoToString(proto); } else { qDebug() << "VpnConnection::createVpnConfiguration: gen new config for" << ProtocolProps::protoToString(proto); - if (proto == Protocol::OpenVpn) { - configData = OpenVpnConfigurator::genOpenVpnConfig(credentials, - container, containerConfig, &e); - configData = OpenVpnConfigurator::processConfigWithLocalSettings(configData); - } - else if (proto == Protocol::Cloak) { - configData = CloakConfigurator::genCloakConfig(credentials, - container, containerConfig, &e); - } - else if (proto == Protocol::ShadowSocks) { - configData = ShadowSocksConfigurator::genShadowSocksConfig(credentials, - container, containerConfig, &e); - } - else if (proto == Protocol::WireGuard) { - configData = WireguardConfigurator::genWireguardConfig(credentials, - container, containerConfig, &e); - } + configData = VpnConfigurator::genVpnProtocolConfig(credentials, + container, containerConfig, proto, &e); + + QString configDataBeforeLocalProcessing = configData; + + configData = VpnConfigurator::processConfigWithLocalSettings(container, proto, configData); + if (errorCode && e) { *errorCode = e; @@ -188,7 +178,7 @@ QString VpnConnection::createVpnConfigurationForProto(int serverIndex, if (serverIndex >= 0) { qDebug() << "VpnConnection::createVpnConfiguration: saving config for server #" << serverIndex << container << proto; QJsonObject protoObject = m_settings.protocolConfig(serverIndex, container, proto); - protoObject.insert(config_key::last_config, configData); + protoObject.insert(config_key::last_config, configDataBeforeLocalProcessing); m_settings.setProtocolConfig(serverIndex, container, proto, protoObject); } }