mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-05-08 14:33:23 +00:00
fix: add linux reconnection (#2415)
* fix: add linux reconnection * fix: Dbus error, fix race conditional * fix: improve reeconnection * fix: add dns load/unload * feat: catch state changed via check gateway * revert: restore linuxfirewall.cpp * fix: restore reconnect time * fix: add NM_STATE_DISABLED and check getGatewayAndIface more carefully * fix: reconnect * fix: revert wireguardutilslinux * fix: revert
This commit is contained in:
@@ -164,8 +164,13 @@ bool LinuxRouteMonitor::rtmSendRoute(int action, int flags, int type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rtm->rtm_type == RTN_THROW) {
|
if (rtm->rtm_type == RTN_THROW) {
|
||||||
|
QString gateway = NetworkUtilities::getGatewayAndIface().first;
|
||||||
|
if (gateway.isEmpty()) {
|
||||||
|
logger.warning() << "No default gateway available, skipping exclusion route";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
struct in_addr ip4;
|
struct in_addr ip4;
|
||||||
inet_pton(AF_INET, NetworkUtilities::getGatewayAndIface().first.toUtf8(), &ip4);
|
inet_pton(AF_INET, gateway.toUtf8(), &ip4);
|
||||||
nlmsg_append_attr(nlmsg, sizeof(buf), RTA_GATEWAY, &ip4, sizeof(ip4));
|
nlmsg_append_attr(nlmsg, sizeof(buf), RTA_GATEWAY, &ip4, sizeof(ip4));
|
||||||
nlmsg_append_attr32(nlmsg, sizeof(buf), RTA_PRIORITY, 0);
|
nlmsg_append_attr32(nlmsg, sizeof(buf), RTA_PRIORITY, 0);
|
||||||
rtm->rtm_type = RTN_UNICAST;
|
rtm->rtm_type = RTN_UNICAST;
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ void LinuxNetworkWatcher::initialize() {
|
|||||||
connect(m_worker, &LinuxNetworkWatcherWorker::wakeup, this,
|
connect(m_worker, &LinuxNetworkWatcherWorker::wakeup, this,
|
||||||
&NetworkWatcherImpl::wakeup);
|
&NetworkWatcherImpl::wakeup);
|
||||||
|
|
||||||
|
connect(m_worker, &LinuxNetworkWatcherWorker::networkChanged, this,
|
||||||
|
[this]() { emit networkChanged(""); });
|
||||||
|
|
||||||
// Let's wait a few seconds to allow the UI to be fully loaded and shown.
|
// Let's wait a few seconds to allow the UI to be fully loaded and shown.
|
||||||
// This is not strictly needed, but it's better for user experience because
|
// This is not strictly needed, but it's better for user experience because
|
||||||
// it makes the UI faster to appear, plus it gives a bit of delay between the
|
// it makes the UI faster to appear, plus it gives a bit of delay between the
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
enum NMState {
|
enum NMState {
|
||||||
NM_STATE_UNKNOWN = 0,
|
NM_STATE_UNKNOWN = 0,
|
||||||
NM_STATE_ASLEEP = 10,
|
NM_STATE_ASLEEP = 10,
|
||||||
|
NM_STATE_DISABLED = 10,
|
||||||
NM_STATE_DISCONNECTED = 20,
|
NM_STATE_DISCONNECTED = 20,
|
||||||
NM_STATE_DISCONNECTING = 30,
|
NM_STATE_DISCONNECTING = 30,
|
||||||
NM_STATE_CONNECTING = 40,
|
NM_STATE_CONNECTING = 40,
|
||||||
@@ -199,10 +200,11 @@ void LinuxNetworkWatcherWorker::checkDevices() {
|
|||||||
|
|
||||||
void LinuxNetworkWatcherWorker::NMStateChanged(quint32 state)
|
void LinuxNetworkWatcherWorker::NMStateChanged(quint32 state)
|
||||||
{
|
{
|
||||||
if (state == NM_STATE_ASLEEP) {
|
|
||||||
emit wakeup();
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.debug() << "NMStateChanged " << state;
|
logger.debug() << "NMStateChanged " << state;
|
||||||
}
|
|
||||||
|
|
||||||
|
if (state == NM_STATE_ASLEEP || state == NM_STATE_DISABLED) {
|
||||||
|
emit wakeup();
|
||||||
|
} else if (state == NM_STATE_CONNECTED_GLOBAL) {
|
||||||
|
emit networkChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,6 +24,7 @@ class LinuxNetworkWatcherWorker final : public QObject {
|
|||||||
signals:
|
signals:
|
||||||
void unsecuredNetwork(const QString& networkName, const QString& networkId);
|
void unsecuredNetwork(const QString& networkName, const QString& networkId);
|
||||||
void wakeup();
|
void wakeup();
|
||||||
|
void networkChanged();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void initialize();
|
void initialize();
|
||||||
|
|||||||
Reference in New Issue
Block a user