feat: enable base Daemon to create and swap WireguardUtils without knowing platform type

This commit is contained in:
cd-amn
2026-05-11 16:28:08 +04:00
parent 0dcd05c6c3
commit 7ad0692306
5 changed files with 36 additions and 0 deletions
+4
View File
@@ -69,6 +69,10 @@ class Daemon : public QObject {
virtual bool supportServerSwitching(const InterfaceConfig& config) const;
virtual bool switchServer(const InterfaceConfig& config);
virtual WireguardUtils* wgutils() const = 0;
virtual WireguardUtils* createWgUtils() = 0;
virtual void replaceActiveWgUtils(WireguardUtils* newUtils) = 0;
WireguardUtils* m_stagingWgutils = nullptr;
virtual bool supportIPUtils() const { return false; }
virtual IPUtils* iputils() { return nullptr; }
virtual DnsUtils* dnsutils() { return nullptr; }
@@ -26,6 +26,15 @@ class LinuxDaemon final : public Daemon {
bool supportIPUtils() const override { return true; }
IPUtils* iputils() override { return m_iputils; }
WireguardUtils* createWgUtils() override {
return new WireguardUtilsLinux(this);
}
void replaceActiveWgUtils(WireguardUtils* newUtils) override {
delete m_wgutils;
m_wgutils = static_cast<WireguardUtilsLinux*>(newUtils);
}
private:
WireguardUtilsLinux* m_wgutils = nullptr;
DnsUtilsLinux* m_dnsutils = nullptr;
@@ -25,6 +25,15 @@ class MacOSDaemon final : public Daemon {
bool supportIPUtils() const override { return true; }
IPUtils* iputils() override { return m_iputils; }
WireguardUtils* createWgUtils() override {
return new WireguardUtilsMacos(this);
}
void replaceActiveWgUtils(WireguardUtils* newUtils) override {
delete m_wgutils;
m_wgutils = static_cast<WireguardUtilsMacos*>(newUtils);
}
private:
WireguardUtilsMacos* m_wgutils = nullptr;
DnsUtilsMacos* m_dnsutils = nullptr;
@@ -112,3 +112,15 @@ void WindowsDaemon::monitorBackendFailure() {
emit backendFailure();
deactivate();
}
WireguardUtils* WindowsDaemon::createWgUtils() {
auto utils = WireguardUtilsWindows::create(m_firewallManager, this);
if (!utils) return nullptr;
connect(utils.get(), &WireguardUtilsWindows::backendFailure, this,
&WindowsDaemon::monitorBackendFailure);
return utils.release();
}
void WindowsDaemon::replaceActiveWgUtils(WireguardUtils* newUtils) {
m_wgutils.reset(static_cast<WireguardUtilsWindows*>(newUtils));
}
@@ -30,6 +30,8 @@ class WindowsDaemon final : public Daemon {
bool run(Op op, const InterfaceConfig& config) override;
WireguardUtils* wgutils() const override { return m_wgutils.get(); }
DnsUtils* dnsutils() override { return m_dnsutils; }
WireguardUtils* createWgUtils() override;
void replaceActiveWgUtils(WireguardUtils* newUtils) override;
private:
void monitorBackendFailure();