diff --git a/client/mozilla/networkwatcher.cpp b/client/mozilla/networkwatcher.cpp index 5d7716f6..6828a867 100644 --- a/client/mozilla/networkwatcher.cpp +++ b/client/mozilla/networkwatcher.cpp @@ -11,7 +11,6 @@ #include "logger.h" //#include "mozillavpn.h" #include "networkwatcherimpl.h" -#include "platforms/dummy/dummynetworkwatcher.h" //#include "settingsholder.h" #ifdef MZ_WINDOWS @@ -69,16 +68,17 @@ void NetworkWatcher::initialize() { m_impl = new DummyNetworkWatcher(this); #endif + connect(m_impl, &NetworkWatcherImpl::unsecuredNetwork, this, &NetworkWatcher::unsecuredNetwork); connect(m_impl, &NetworkWatcherImpl::networkChanged, this, &NetworkWatcher::networkChange); connect(m_impl, &NetworkWatcherImpl::sleepMode, this, - &NetworkWatcher::sleepMode); - + &NetworkWatcher::onSleepMode); m_impl->initialize(); + // TODO: IMPL FOR AMNEZIA #if 0 SettingsHolder* settingsHolder = SettingsHolder::instance(); @@ -119,11 +119,16 @@ void NetworkWatcher::settingsChanged() { #endif } +void NetworkWatcher::onSleepMode() +{ + logger.debug() << "Resumed from sleep mode"; + emit sleepMode(); +} + void NetworkWatcher::unsecuredNetwork(const QString& networkName, const QString& networkId) { logger.debug() << "Unsecured network:" << logger.sensitive(networkName) << "id:" << logger.sensitive(networkId); - #ifndef UNIT_TEST if (!m_reportUnsecuredNetwork) { logger.debug() << "Disabled. Ignoring unsecured network"; diff --git a/client/mozilla/networkwatcher.h b/client/mozilla/networkwatcher.h index 4f86e2a4..f28e74fb 100644 --- a/client/mozilla/networkwatcher.h +++ b/client/mozilla/networkwatcher.h @@ -29,6 +29,8 @@ public: // false to restore. void simulateDisconnection(bool simulatedDisconnection); + void onSleepMode(); + QNetworkInformation::Reachability getReachability(); signals: diff --git a/client/platforms/windows/daemon/windowsdaemon.cpp b/client/platforms/windows/daemon/windowsdaemon.cpp index 620e0a1c..8668b4db 100644 --- a/client/platforms/windows/daemon/windowsdaemon.cpp +++ b/client/platforms/windows/daemon/windowsdaemon.cpp @@ -22,7 +22,6 @@ #include "logger.h" #include "platforms/windows/daemon/windowsfirewall.h" #include "platforms/windows/daemon/windowssplittunnel.h" -#include "platforms/windows/windowscommons.h" #include "windowsfirewall.h" #include "core/networkUtilities.h" diff --git a/client/platforms/windows/windowsnetworkwatcher.cpp b/client/platforms/windows/windowsnetworkwatcher.cpp index 7b1096b0..f72baa6e 100644 --- a/client/platforms/windows/windowsnetworkwatcher.cpp +++ b/client/platforms/windows/windowsnetworkwatcher.cpp @@ -32,9 +32,28 @@ WindowsNetworkWatcher::~WindowsNetworkWatcher() { } } +LRESULT WindowsNetworkWatcher::PowerWndProcCallback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + auto obj = reinterpret_cast(GetWindowLongPtr(hwnd, GWLP_USERDATA)); + if (!obj){ + logger.debug() << "obj not casted"; + return DefWindowProc(hwnd, uMsg, wParam, lParam); + } + switch (uMsg) { + case WM_POWERBROADCAST: + if (wParam == PBT_APMRESUMESUSPEND) { + emit obj->sleepMode(); + } + break; + default: + return DefWindowProc(hwnd, uMsg, wParam, lParam); + } + return 0; +} + void WindowsNetworkWatcher::initialize() { logger.debug() << "initialize"; + DWORD negotiatedVersion; if (WlanOpenHandle(2, nullptr, &negotiatedVersion, &m_wlanHandle) != ERROR_SUCCESS) { @@ -51,6 +70,25 @@ void WindowsNetworkWatcher::initialize() { return; } + const wchar_t* className = L"PowerMonitorClass"; + WNDCLASS wc = { 0 }; + wc.lpfnWndProc = &WindowsNetworkWatcher::PowerWndProcCallback; + wc.hInstance = GetModuleHandle(NULL); + wc.lpszClassName = className; + wc.cbWndExtra = sizeof(WindowsNetworkWatcher*); + + if (!RegisterClass(&wc)) { + logger.debug() << "Failed to register window class in createPowerMonitorWindow."; + return; + } + + HWND hwnd = CreateWindowEx(0, className, L"Power Monitor", 0, 0, 0, 0, 0, NULL, NULL, GetModuleHandle(NULL), static_cast(this)); + if (!hwnd) { + logger.debug() << "Failed to create window in createPowerMonitorWindow."; + return; + } + SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast(this)); + logger.debug() << "callback registered"; } @@ -137,4 +175,4 @@ void WindowsNetworkWatcher::processWlan(PWLAN_NOTIFICATION_DATA data) { logger.debug() << "Unsecure network:" << logger.sensitive(ssid) << "id:" << logger.sensitive(bssid); emit unsecuredNetwork(ssid, bssid); -} \ No newline at end of file +} diff --git a/client/platforms/windows/windowsnetworkwatcher.h b/client/platforms/windows/windowsnetworkwatcher.h index 1b153746..0842ee7a 100644 --- a/client/platforms/windows/windowsnetworkwatcher.h +++ b/client/platforms/windows/windowsnetworkwatcher.h @@ -19,6 +19,7 @@ class WindowsNetworkWatcher final : public NetworkWatcherImpl { private: static void wlanCallback(PWLAN_NOTIFICATION_DATA data, PVOID context); + static LRESULT PowerWndProcCallback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void processWlan(PWLAN_NOTIFICATION_DATA data); diff --git a/service/server/localserver.cpp b/service/server/localserver.cpp index 17869705..56a817d0 100644 --- a/service/server/localserver.cpp +++ b/service/server/localserver.cpp @@ -46,7 +46,6 @@ LocalServer::LocalServer(QObject *parent) : QObject(parent), } m_networkWatcher.initialize(); - connect(&m_networkWatcher, &NetworkWatcher::sleepMode, &m_ipcServer, &IpcServer::networkChange); #ifdef Q_OS_LINUX