Restoration of bandwidth meter after closing of GUI
This commit is contained in:
parent
7167c2f20d
commit
8fa409d6c1
4 changed files with 67 additions and 15 deletions
|
@ -54,6 +54,10 @@ AndroidController::AndroidController() : QObject()
|
||||||
|
|
||||||
isConnected = doc.object()["connected"].toBool();
|
isConnected = doc.object()["connected"].toBool();
|
||||||
|
|
||||||
|
if (isConnected) {
|
||||||
|
emit scheduleStatusCheckSignal();
|
||||||
|
}
|
||||||
|
|
||||||
emit initialized(
|
emit initialized(
|
||||||
true, isConnected,
|
true, isConnected,
|
||||||
time > 0 ? QDateTime::fromMSecsSinceEpoch(time) : QDateTime());
|
time > 0 ? QDateTime::fromMSecsSinceEpoch(time) : QDateTime());
|
||||||
|
@ -66,9 +70,11 @@ AndroidController::AndroidController() : QObject()
|
||||||
Q_UNUSED(parcelBody);
|
Q_UNUSED(parcelBody);
|
||||||
qDebug() << "Transact: connected";
|
qDebug() << "Transact: connected";
|
||||||
|
|
||||||
isConnected = true;
|
if (!isConnected) {
|
||||||
|
|
||||||
emit scheduleStatusCheckSignal();
|
emit scheduleStatusCheckSignal();
|
||||||
|
}
|
||||||
|
|
||||||
|
isConnected = true;
|
||||||
|
|
||||||
emit connectionStateChanged(VpnProtocol::Connected);
|
emit connectionStateChanged(VpnProtocol::Connected);
|
||||||
}, Qt::QueuedConnection);
|
}, Qt::QueuedConnection);
|
||||||
|
|
|
@ -133,6 +133,7 @@ void UiLogic::initalizeUiLogic()
|
||||||
connect(AndroidController::instance(), &AndroidController::initialized, [this](bool status, bool connected, const QDateTime& connectionDate) {
|
connect(AndroidController::instance(), &AndroidController::initialized, [this](bool status, bool connected, const QDateTime& connectionDate) {
|
||||||
if (connected) {
|
if (connected) {
|
||||||
pageLogic<VpnLogic>()->onConnectionStateChanged(VpnProtocol::Connected);
|
pageLogic<VpnLogic>()->onConnectionStateChanged(VpnProtocol::Connected);
|
||||||
|
m_vpnConnection->restoreConnection();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (!AndroidController::instance()->initialize(pageLogic<StartPageLogic>())) {
|
if (!AndroidController::instance()->initialize(pageLogic<StartPageLogic>())) {
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
|
|
||||||
#ifdef Q_OS_ANDROID
|
#ifdef Q_OS_ANDROID
|
||||||
#include "../../platforms/android/android_controller.h"
|
#include "../../platforms/android/android_controller.h"
|
||||||
#include "protocols/android_vpnprotocol.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Q_OS_IOS
|
#ifdef Q_OS_IOS
|
||||||
|
@ -353,10 +352,8 @@ void VpnConnection::connectToVpn(int serverIndex,
|
||||||
}
|
}
|
||||||
m_vpnProtocol->prepare();
|
m_vpnProtocol->prepare();
|
||||||
#elif defined Q_OS_ANDROID
|
#elif defined Q_OS_ANDROID
|
||||||
Proto proto = ContainerProps::defaultProtocol(container);
|
androidVpnProtocol = createDefaultAndroidVpnProtocol(container);
|
||||||
AndroidVpnProtocol *androidVpnProtocol = new AndroidVpnProtocol(proto, m_vpnConfiguration);
|
createAndroidConnections(container);
|
||||||
connect(AndroidController::instance(), &AndroidController::connectionStateChanged, androidVpnProtocol, &AndroidVpnProtocol::setConnectionState);
|
|
||||||
connect(AndroidController::instance(), &AndroidController::statusUpdated, androidVpnProtocol, &AndroidVpnProtocol::connectionDataUpdated);
|
|
||||||
|
|
||||||
m_vpnProtocol.reset(androidVpnProtocol);
|
m_vpnProtocol.reset(androidVpnProtocol);
|
||||||
#elif defined Q_OS_IOS
|
#elif defined Q_OS_IOS
|
||||||
|
@ -373,9 +370,7 @@ void VpnConnection::connectToVpn(int serverIndex,
|
||||||
m_vpnProtocol.reset(iosVpnProtocol);
|
m_vpnProtocol.reset(iosVpnProtocol);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
connect(m_vpnProtocol.data(), &VpnProtocol::protocolError, this, &VpnConnection::vpnProtocolError);
|
createProtocolConnections();
|
||||||
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)));
|
|
||||||
|
|
||||||
m_serverController->disconnectFromHost(credentials);
|
m_serverController->disconnectFromHost(credentials);
|
||||||
|
|
||||||
|
@ -383,6 +378,44 @@ void VpnConnection::connectToVpn(int serverIndex,
|
||||||
if (e) emit VpnProtocol::Error;
|
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)
|
QString VpnConnection::bytesPerSecToText(quint64 bytes)
|
||||||
{
|
{
|
||||||
double mbps = bytes * 8 / 1e6;
|
double mbps = bytes * 8 / 1e6;
|
||||||
|
@ -401,8 +434,6 @@ void VpnConnection::disconnectFromVpn()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!m_vpnProtocol.data()) {
|
if (!m_vpnProtocol.data()) {
|
||||||
emit connectionStateChanged(VpnProtocol::Disconnected);
|
emit connectionStateChanged(VpnProtocol::Disconnected);
|
||||||
#ifdef Q_OS_ANDROID
|
#ifdef Q_OS_ANDROID
|
||||||
|
@ -415,11 +446,8 @@ void VpnConnection::disconnectFromVpn()
|
||||||
|
|
||||||
VpnProtocol::VpnConnectionState VpnConnection::connectionState()
|
VpnProtocol::VpnConnectionState VpnConnection::connectionState()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if (!m_vpnProtocol) return VpnProtocol::Disconnected;
|
if (!m_vpnProtocol) return VpnProtocol::Disconnected;
|
||||||
return m_vpnProtocol->connectionState();
|
return m_vpnProtocol->connectionState();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VpnConnection::isConnected() const
|
bool VpnConnection::isConnected() const
|
||||||
|
|
|
@ -18,6 +18,10 @@
|
||||||
#include "core/ipcclient.h"
|
#include "core/ipcclient.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef Q_OS_ANDROID
|
||||||
|
#include "protocols/android_vpnprotocol.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
class VpnConfigurator;
|
class VpnConfigurator;
|
||||||
class ServerController;
|
class ServerController;
|
||||||
|
|
||||||
|
@ -61,6 +65,10 @@ public:
|
||||||
const QString &remoteAddress() const;
|
const QString &remoteAddress() const;
|
||||||
void addSitesRoutes(const QString &gw, Settings::RouteMode mode);
|
void addSitesRoutes(const QString &gw, Settings::RouteMode mode);
|
||||||
|
|
||||||
|
#ifdef Q_OS_ANDROID
|
||||||
|
void restoreConnection();
|
||||||
|
#endif
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void connectToVpn(int serverIndex,
|
void connectToVpn(int serverIndex,
|
||||||
const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig);
|
const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig);
|
||||||
|
@ -101,6 +109,15 @@ private:
|
||||||
#ifdef Q_OS_IOS
|
#ifdef Q_OS_IOS
|
||||||
IOSVpnProtocol * iosVpnProtocol{nullptr};
|
IOSVpnProtocol * iosVpnProtocol{nullptr};
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef Q_OS_ANDROID
|
||||||
|
AndroidVpnProtocol* androidVpnProtocol = nullptr;
|
||||||
|
AndroidVpnProtocol* createDefaultAndroidVpnProtocol(DockerContainer container);
|
||||||
|
|
||||||
|
void createAndroidConnections();
|
||||||
|
void createAndroidConnections(DockerContainer container);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void createProtocolConnections();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VPNCONNECTION_H
|
#endif // VPNCONNECTION_H
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue