Restoration of bandwidth meter after closing of GUI

This commit is contained in:
Dmitriy Karpushin
2023-03-15 16:46:59 +03:00
parent 7167c2f20d
commit 8fa409d6c1
4 changed files with 67 additions and 15 deletions
+41 -13
View File
@@ -20,7 +20,6 @@
#ifdef Q_OS_ANDROID
#include "../../platforms/android/android_controller.h"
#include "protocols/android_vpnprotocol.h"
#endif
#ifdef Q_OS_IOS
@@ -353,10 +352,8 @@ void VpnConnection::connectToVpn(int serverIndex,
}
m_vpnProtocol->prepare();
#elif defined Q_OS_ANDROID
Proto proto = ContainerProps::defaultProtocol(container);
AndroidVpnProtocol *androidVpnProtocol = new AndroidVpnProtocol(proto, m_vpnConfiguration);
connect(AndroidController::instance(), &AndroidController::connectionStateChanged, androidVpnProtocol, &AndroidVpnProtocol::setConnectionState);
connect(AndroidController::instance(), &AndroidController::statusUpdated, androidVpnProtocol, &AndroidVpnProtocol::connectionDataUpdated);
androidVpnProtocol = createDefaultAndroidVpnProtocol(container);
createAndroidConnections(container);
m_vpnProtocol.reset(androidVpnProtocol);
#elif defined Q_OS_IOS
@@ -373,9 +370,7 @@ void VpnConnection::connectToVpn(int serverIndex,
m_vpnProtocol.reset(iosVpnProtocol);
#endif
connect(m_vpnProtocol.data(), &VpnProtocol::protocolError, this, &VpnConnection::vpnProtocolError);
connect(m_vpnProtocol.data(), SIGNAL(connectionStateChanged(VpnProtocol::VpnConnectionState)), this, SLOT(onConnectionStateChanged(VpnProtocol::VpnConnectionState)));
connect(m_vpnProtocol.data(), SIGNAL(bytesChanged(quint64, quint64)), this, SLOT(onBytesChanged(quint64, quint64)));
createProtocolConnections();
m_serverController->disconnectFromHost(credentials);
@@ -383,6 +378,44 @@ void VpnConnection::connectToVpn(int serverIndex,
if (e) emit VpnProtocol::Error;
}
void VpnConnection::restoreConnection() {
createAndroidConnections();
m_vpnProtocol.reset(androidVpnProtocol);
createProtocolConnections();
}
void VpnConnection::createAndroidConnections()
{
int serverIndex = m_settings->defaultServerIndex();
DockerContainer container = m_settings->defaultContainer(serverIndex);
createAndroidConnections(container);
}
void VpnConnection::createAndroidConnections(DockerContainer container)
{
androidVpnProtocol = createDefaultAndroidVpnProtocol(container);
connect(AndroidController::instance(), &AndroidController::connectionStateChanged, androidVpnProtocol, &AndroidVpnProtocol::setConnectionState);
connect(AndroidController::instance(), &AndroidController::statusUpdated, androidVpnProtocol, &AndroidVpnProtocol::connectionDataUpdated);
}
void VpnConnection::createProtocolConnections() {
connect(m_vpnProtocol.data(), &VpnProtocol::protocolError, this, &VpnConnection::vpnProtocolError);
connect(m_vpnProtocol.data(), SIGNAL(connectionStateChanged(VpnProtocol::VpnConnectionState)), this, SLOT(onConnectionStateChanged(VpnProtocol::VpnConnectionState)));
connect(m_vpnProtocol.data(), SIGNAL(bytesChanged(quint64, quint64)), this, SLOT(onBytesChanged(quint64, quint64)));
}
AndroidVpnProtocol* VpnConnection::createDefaultAndroidVpnProtocol(DockerContainer container)
{
Proto proto = ContainerProps::defaultProtocol(container);
AndroidVpnProtocol *androidVpnProtocol = new AndroidVpnProtocol(proto, m_vpnConfiguration);
return androidVpnProtocol;
}
QString VpnConnection::bytesPerSecToText(quint64 bytes)
{
double mbps = bytes * 8 / 1e6;
@@ -401,8 +434,6 @@ void VpnConnection::disconnectFromVpn()
}
#endif
if (!m_vpnProtocol.data()) {
emit connectionStateChanged(VpnProtocol::Disconnected);
#ifdef Q_OS_ANDROID
@@ -415,11 +446,8 @@ void VpnConnection::disconnectFromVpn()
VpnProtocol::VpnConnectionState VpnConnection::connectionState()
{
if (!m_vpnProtocol) return VpnProtocol::Disconnected;
return m_vpnProtocol->connectionState();
}
bool VpnConnection::isConnected() const