From 4ea1a195723ce9657adff7e7828e1702c642c9f3 Mon Sep 17 00:00:00 2001 From: Mykola Baibuz Date: Wed, 18 Oct 2023 13:41:58 -0400 Subject: [PATCH] Cleanup WG implementation --- .../src/org/amnezia/vpn/OpenVPNThreadv3.kt | 3 +- client/protocols/wireguardprotocol.cpp | 193 +----------------- client/protocols/wireguardprotocol.h | 13 -- 3 files changed, 4 insertions(+), 205 deletions(-) diff --git a/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt b/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt index a59dff6a..d96131af 100644 --- a/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt +++ b/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt @@ -175,9 +175,8 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna } mService.addRoute("2000::", 3) } - val Fd = mService.establish()!!.detachFd() - return Fd + return mService.establish()!!.detachFd() } override fun tun_builder_add_address(address: String , prefix_length: Int , gateway: String , ipv6:Boolean , net30: Boolean ): Boolean { diff --git a/client/protocols/wireguardprotocol.cpp b/client/protocols/wireguardprotocol.cpp index d675cd02..3b95a41a 100644 --- a/client/protocols/wireguardprotocol.cpp +++ b/client/protocols/wireguardprotocol.cpp @@ -16,8 +16,6 @@ WireguardProtocol::WireguardProtocol(const QJsonObject &configuration, QObject * m_configFile.setFileName(QDir::tempPath() + QDir::separator() + serviceName() + ".conf"); writeWireguardConfiguration(configuration); - // MZ -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) || defined(Q_OS_LINUX) m_impl.reset(new LocalSocketController()); connect(m_impl.get(), &ControllerImpl::connected, this, [this](const QString &pubkey, const QDateTime &connectionTimestamp) { @@ -26,7 +24,6 @@ WireguardProtocol::WireguardProtocol(const QJsonObject &configuration, QObject * connect(m_impl.get(), &ControllerImpl::disconnected, this, [this]() { emit connectionStateChanged(Vpn::ConnectionState::Disconnected); }); m_impl->initialize(nullptr, nullptr); -#endif } WireguardProtocol::~WireguardProtocol() @@ -37,68 +34,10 @@ WireguardProtocol::~WireguardProtocol() void WireguardProtocol::stop() { -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) || defined(Q_OS_LINUX) stopMzImpl(); return; -#endif - - if (!QFileInfo::exists(Utils::wireguardExecPath())) { - qCritical() << "Wireguard executable missing!"; - setLastError(ErrorCode::ExecutableMissing); - return; - } - - m_wireguardStopProcess = IpcClient::CreatePrivilegedProcess(); - - if (!m_wireguardStopProcess) { - qCritical() << "IpcProcess replica is not created!"; - setLastError(ErrorCode::AmneziaServiceConnectionFailed); - return; - } - - m_wireguardStopProcess->waitForSource(1000); - if (!m_wireguardStopProcess->isInitialized()) { - qWarning() << "IpcProcess replica is not connected!"; - setLastError(ErrorCode::AmneziaServiceConnectionFailed); - return; - } - - m_wireguardStopProcess->setProgram(PermittedProcess::Wireguard); - - m_wireguardStopProcess->setArguments(stopArgs()); - qDebug() << stopArgs().join(" "); - - connect(m_wireguardStopProcess.data(), &PrivilegedProcess::errorOccurred, this, [this](QProcess::ProcessError error) { - qDebug() << "WireguardProtocol::WireguardProtocol Stop errorOccurred" << error; - setConnectionState(Vpn::ConnectionState::Disconnected); - }); - - connect(m_wireguardStopProcess.data(), &PrivilegedProcess::stateChanged, this, - [this](QProcess::ProcessState newState) { - qDebug() << "WireguardProtocol::WireguardProtocol Stop stateChanged" << newState; - }); - -#ifdef Q_OS_LINUX - if (IpcClient::Interface()) { - QRemoteObjectPendingReply result = IpcClient::Interface()->isWireguardRunning(); - if (result.returnValue()) { - setConnectionState(Vpn::ConnectionState::Disconnected); - return; - } - } else { - qCritical() << "IPC client not initialized"; - setConnectionState(Vpn::ConnectionState::Disconnected); - return; - } -#endif - - m_wireguardStopProcess->start(); - m_wireguardStopProcess->waitForFinished(10000); - - setConnectionState(Vpn::ConnectionState::Disconnected); } -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) || defined(Q_OS_LINUX) ErrorCode WireguardProtocol::startMzImpl() { m_impl->activate(m_rawConfig); @@ -110,7 +49,6 @@ ErrorCode WireguardProtocol::stopMzImpl() m_impl->deactivate(); return ErrorCode::NoError; } -#endif void WireguardProtocol::writeWireguardConfiguration(const QJsonObject &configuration) { @@ -124,21 +62,8 @@ void WireguardProtocol::writeWireguardConfiguration(const QJsonObject &configura m_configFile.write(jConfig.value(config_key::config).toString().toUtf8()); m_configFile.close(); -#if 0 - if (IpcClient::Interface()) { - QRemoteObjectPendingReply result = IpcClient::Interface()->copyWireguardConfig(m_configFile.fileName()); - if (result.returnValue()) { - qCritical() << "Failed to copy wireguard config"; - return; - } - } else { - qCritical() << "IPC client not initialized"; - return; - } - m_configFileName = "/etc/wireguard/wg99.conf"; -#else + m_configFileName = m_configFile.fileName(); -#endif m_isConfigLoaded = true; @@ -152,15 +77,9 @@ QString WireguardProtocol::configPath() const return m_configFileName; } -void WireguardProtocol::updateRouteGateway(QString line) +QString WireguardProtocol::serviceName() const { - // TODO: fix for macos - line = line.split("ROUTE_GATEWAY", Qt::SkipEmptyParts).at(1); - if (!line.contains("/")) - return; - m_routeGateway = line.split("/", Qt::SkipEmptyParts).first(); - m_routeGateway.replace(" ", ""); - qDebug() << "Set VPN route gateway" << m_routeGateway; + return "AmneziaVPN.WireGuard0"; } ErrorCode WireguardProtocol::start() @@ -170,112 +89,6 @@ ErrorCode WireguardProtocol::start() return lastError(); } -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) || defined(Q_OS_LINUX) return startMzImpl(); -#endif - - if (!QFileInfo::exists(Utils::wireguardExecPath())) { - setLastError(ErrorCode::ExecutableMissing); - return lastError(); - } - - if (IpcClient::Interface()) { - QRemoteObjectPendingReply result = IpcClient::Interface()->isWireguardConfigExists(configPath()); - if (result.returnValue()) { - setLastError(ErrorCode::ConfigMissing); - return lastError(); - } - } else { - qCritical() << "IPC client not initialized"; - setLastError(ErrorCode::InternalError); - return lastError(); - } - - setConnectionState(Vpn::ConnectionState::Connecting); - - m_wireguardStartProcess = IpcClient::CreatePrivilegedProcess(); - - if (!m_wireguardStartProcess) { - setLastError(ErrorCode::AmneziaServiceConnectionFailed); - return ErrorCode::AmneziaServiceConnectionFailed; - } - - m_wireguardStartProcess->waitForSource(1000); - if (!m_wireguardStartProcess->isInitialized()) { - qWarning() << "IpcProcess replica is not connected!"; - setLastError(ErrorCode::AmneziaServiceConnectionFailed); - return ErrorCode::AmneziaServiceConnectionFailed; - } - - m_wireguardStartProcess->setProgram(PermittedProcess::Wireguard); - - m_wireguardStartProcess->setArguments(startArgs()); - qDebug() << startArgs().join(" "); - - connect(m_wireguardStartProcess.data(), &PrivilegedProcess::errorOccurred, this, [this](QProcess::ProcessError error) { - qDebug() << "WireguardProtocol::WireguardProtocol errorOccurred" << error; - setConnectionState(Vpn::ConnectionState::Disconnected); - }); - - connect(m_wireguardStartProcess.data(), &PrivilegedProcess::stateChanged, this, - [this](QProcess::ProcessState newState) { - qDebug() << "WireguardProtocol::WireguardProtocol stateChanged" << newState; - }); - - connect(m_wireguardStartProcess.data(), &PrivilegedProcess::finished, this, - [this]() { setConnectionState(Vpn::ConnectionState::Connected); }); - - connect(m_wireguardStartProcess.data(), &PrivilegedProcess::readyRead, this, [this]() { - QRemoteObjectPendingReply reply = m_wireguardStartProcess->readAll(); - reply.waitForFinished(1000); - qDebug() << "WireguardProtocol::WireguardProtocol readyRead" << reply.returnValue(); - }); - - connect(m_wireguardStartProcess.data(), &PrivilegedProcess::readyReadStandardOutput, this, [this]() { - QRemoteObjectPendingReply reply = m_wireguardStartProcess->readAllStandardOutput(); - reply.waitForFinished(1000); - qDebug() << "WireguardProtocol::WireguardProtocol readAllStandardOutput" << reply.returnValue(); - }); - - connect(m_wireguardStartProcess.data(), &PrivilegedProcess::readyReadStandardError, this, [this]() { - QRemoteObjectPendingReply reply = m_wireguardStartProcess->readAllStandardError(); - reply.waitForFinished(10); - qDebug() << "WireguardProtocol::WireguardProtocol readAllStandardError" << reply.returnValue(); - }); - - m_wireguardStartProcess->start(); - m_wireguardStartProcess->waitForFinished(10000); - - return ErrorCode::NoError; } -void WireguardProtocol::updateVpnGateway(const QString &line) -{ -} - -QString WireguardProtocol::serviceName() const -{ - return "AmneziaVPN.WireGuard0"; -} - -QStringList WireguardProtocol::stopArgs() -{ -#ifdef Q_OS_WIN - return { "--remove", configPath() }; -#elif defined Q_OS_LINUX - return { "down", "wg99" }; -#else - return {}; -#endif -} - -QStringList WireguardProtocol::startArgs() -{ -#ifdef Q_OS_WIN - return { "--add", configPath() }; -#elif defined Q_OS_LINUX - return { "up", "wg99" }; -#else - return {}; -#endif -} diff --git a/client/protocols/wireguardprotocol.h b/client/protocols/wireguardprotocol.h index dea8d6d9..4a6ae1e6 100644 --- a/client/protocols/wireguardprotocol.h +++ b/client/protocols/wireguardprotocol.h @@ -8,7 +8,6 @@ #include #include "vpnprotocol.h" -#include "core/ipcclient.h" #include "mozilla/controllerimpl.h" @@ -23,33 +22,21 @@ public: ErrorCode start() override; void stop() override; -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) || defined(Q_OS_LINUX) ErrorCode startMzImpl(); ErrorCode stopMzImpl(); -#endif private: QString configPath() const; void writeWireguardConfiguration(const QJsonObject &configuration); - - void updateRouteGateway(QString line); - void updateVpnGateway(const QString &line); QString serviceName() const; - QStringList stopArgs(); - QStringList startArgs(); private: QString m_configFileName; QFile m_configFile; - QSharedPointer m_wireguardStartProcess; - QSharedPointer m_wireguardStopProcess; - bool m_isConfigLoaded = false; -#if defined(Q_OS_MAC) || defined(Q_OS_WIN) || defined(Q_OS_LINUX) QScopedPointer m_impl; -#endif }; #endif // WIREGUARDPROTOCOL_H