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 supportServerSwitching(const InterfaceConfig& config) const;
|
||||||
virtual bool switchServer(const InterfaceConfig& config);
|
virtual bool switchServer(const InterfaceConfig& config);
|
||||||
virtual WireguardUtils* wgutils() const = 0;
|
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 bool supportIPUtils() const { return false; }
|
||||||
virtual IPUtils* iputils() { return nullptr; }
|
virtual IPUtils* iputils() { return nullptr; }
|
||||||
virtual DnsUtils* dnsutils() { return nullptr; }
|
virtual DnsUtils* dnsutils() { return nullptr; }
|
||||||
|
|||||||
@@ -26,6 +26,15 @@ class LinuxDaemon final : public Daemon {
|
|||||||
bool supportIPUtils() const override { return true; }
|
bool supportIPUtils() const override { return true; }
|
||||||
IPUtils* iputils() override { return m_iputils; }
|
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:
|
private:
|
||||||
WireguardUtilsLinux* m_wgutils = nullptr;
|
WireguardUtilsLinux* m_wgutils = nullptr;
|
||||||
DnsUtilsLinux* m_dnsutils = nullptr;
|
DnsUtilsLinux* m_dnsutils = nullptr;
|
||||||
|
|||||||
@@ -25,6 +25,15 @@ class MacOSDaemon final : public Daemon {
|
|||||||
bool supportIPUtils() const override { return true; }
|
bool supportIPUtils() const override { return true; }
|
||||||
IPUtils* iputils() override { return m_iputils; }
|
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:
|
private:
|
||||||
WireguardUtilsMacos* m_wgutils = nullptr;
|
WireguardUtilsMacos* m_wgutils = nullptr;
|
||||||
DnsUtilsMacos* m_dnsutils = nullptr;
|
DnsUtilsMacos* m_dnsutils = nullptr;
|
||||||
|
|||||||
@@ -112,3 +112,15 @@ void WindowsDaemon::monitorBackendFailure() {
|
|||||||
emit backendFailure();
|
emit backendFailure();
|
||||||
deactivate();
|
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;
|
bool run(Op op, const InterfaceConfig& config) override;
|
||||||
WireguardUtils* wgutils() const override { return m_wgutils.get(); }
|
WireguardUtils* wgutils() const override { return m_wgutils.get(); }
|
||||||
DnsUtils* dnsutils() override { return m_dnsutils; }
|
DnsUtils* dnsutils() override { return m_dnsutils; }
|
||||||
|
WireguardUtils* createWgUtils() override;
|
||||||
|
void replaceActiveWgUtils(WireguardUtils* newUtils) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void monitorBackendFailure();
|
void monitorBackendFailure();
|
||||||
|
|||||||
Reference in New Issue
Block a user