Files
amnezia-client/client/core/protocols/wireGuardProtocol.cpp
T

83 lines
2.8 KiB
C++
Raw Normal View History

2021-06-12 11:59:36 +03:00
#include <QCoreApplication>
#include <QFileInfo>
#include <QProcess>
#include <QTcpSocket>
#include <QThread>
#include "wireGuardProtocol.h"
#include "core/utils/networkUtilities.h"
2021-06-12 11:59:36 +03:00
2023-07-15 14:19:48 -07:00
#include "mozilla/localsocketcontroller.h"
WireguardProtocol::WireguardProtocol(const QJsonObject &configuration, QObject *parent)
: VpnProtocol(configuration, parent)
2021-06-12 11:59:36 +03:00
{
const QString ifname = configuration.value("ifname").toString();
m_impl.reset(new LocalSocketController(ifname));
connect(m_impl.get(), &ControllerImpl::connected, this,
[this](const QString &pubkey, const QDateTime &connectionTimestamp) {
2026-02-19 13:21:49 +01:00
setConnectionState(Vpn::ConnectionState::Connected);
});
connect(m_impl.get(), &ControllerImpl::statusUpdated, this,
[this](const QString& serverIpv4Gateway,
const QString& deviceIpv4Address, uint64_t txBytes,
uint64_t rxBytes) {
const QString previousGateway = m_vpnGateway;
const QString previousLocal = m_vpnLocalAddress;
if (!serverIpv4Gateway.isEmpty()) {
m_vpnGateway = serverIpv4Gateway;
}
if (!deviceIpv4Address.isEmpty()) {
m_vpnLocalAddress = deviceIpv4Address;
}
if ((!m_vpnGateway.isEmpty() && m_vpnGateway != previousGateway) ||
(!m_vpnLocalAddress.isEmpty() && m_vpnLocalAddress != previousLocal)) {
if (m_connectionState == Vpn::ConnectionState::Connected) {
emit tunnelAddressesUpdated(m_vpnGateway, m_vpnLocalAddress);
}
}
});
connect(m_impl.get(), &ControllerImpl::disconnected, this,
2026-02-19 13:21:49 +01:00
[this]() { setConnectionState(Vpn::ConnectionState::Disconnected); });
2023-07-15 14:19:48 -07:00
m_impl->initialize(nullptr, nullptr);
2021-06-12 11:59:36 +03:00
}
WireguardProtocol::~WireguardProtocol()
{
WireguardProtocol::stop();
QThread::msleep(200);
}
void WireguardProtocol::stop()
{
2023-07-15 14:19:48 -07:00
stopMzImpl();
return;
2021-06-12 11:59:36 +03:00
}
2023-07-15 14:19:48 -07:00
ErrorCode WireguardProtocol::startMzImpl()
{
QString protocolName = m_rawConfig.value("protocol").toString();
QJsonObject vpnConfigData = m_rawConfig.value(protocolName + "_config_data").toObject();
vpnConfigData[configKey::hostName] = NetworkUtilities::getIPAddress(vpnConfigData.value(configKey::hostName).toString());
m_rawConfig.insert(protocolName + "_config_data", vpnConfigData);
m_rawConfig[configKey::hostName] = NetworkUtilities::getIPAddress(m_rawConfig[configKey::hostName].toString());
2023-07-15 14:19:48 -07:00
m_impl->activate(m_rawConfig);
return ErrorCode::NoError;
}
ErrorCode WireguardProtocol::stopMzImpl()
{
m_impl->deactivate();
return ErrorCode::NoError;
}
2021-06-12 11:59:36 +03:00
ErrorCode WireguardProtocol::start()
{
2023-07-15 14:19:48 -07:00
return startMzImpl();
2021-06-12 11:59:36 +03:00
}