#ifndef WIREGUARDPROTOCOL_H #define WIREGUARDPROTOCOL_H #include #include #include #include #include #include "vpnprotocol.h" #include "core/ipcclient.h" #include "mozilla/controllerimpl.h" class WireguardProtocol : public VpnProtocol { Q_OBJECT public: explicit WireguardProtocol(const QJsonObject& configuration, QObject* parent = nullptr); virtual ~WireguardProtocol() override; ErrorCode start() override; void stop() override; #if defined(Q_OS_MAC) || defined(Q_OS_WIN) 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) QScopedPointer m_impl; #endif }; #endif // WIREGUARDPROTOCOL_H