mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-20 02:00:55 +07:00
feat: enable base Daemon to create and swap WireguardUtils without knowing platform type
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user