Windows suspend mode handler
This commit is contained in:
parent
eff460b227
commit
f767171c06
6 changed files with 51 additions and 7 deletions
|
|
@ -11,7 +11,6 @@
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
//#include "mozillavpn.h"
|
//#include "mozillavpn.h"
|
||||||
#include "networkwatcherimpl.h"
|
#include "networkwatcherimpl.h"
|
||||||
#include "platforms/dummy/dummynetworkwatcher.h"
|
|
||||||
//#include "settingsholder.h"
|
//#include "settingsholder.h"
|
||||||
|
|
||||||
#ifdef MZ_WINDOWS
|
#ifdef MZ_WINDOWS
|
||||||
|
|
@ -69,16 +68,17 @@ void NetworkWatcher::initialize() {
|
||||||
m_impl = new DummyNetworkWatcher(this);
|
m_impl = new DummyNetworkWatcher(this);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
connect(m_impl, &NetworkWatcherImpl::unsecuredNetwork, this,
|
connect(m_impl, &NetworkWatcherImpl::unsecuredNetwork, this,
|
||||||
&NetworkWatcher::unsecuredNetwork);
|
&NetworkWatcher::unsecuredNetwork);
|
||||||
connect(m_impl, &NetworkWatcherImpl::networkChanged, this,
|
connect(m_impl, &NetworkWatcherImpl::networkChanged, this,
|
||||||
&NetworkWatcher::networkChange);
|
&NetworkWatcher::networkChange);
|
||||||
connect(m_impl, &NetworkWatcherImpl::sleepMode, this,
|
connect(m_impl, &NetworkWatcherImpl::sleepMode, this,
|
||||||
&NetworkWatcher::sleepMode);
|
&NetworkWatcher::onSleepMode);
|
||||||
|
|
||||||
m_impl->initialize();
|
m_impl->initialize();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: IMPL FOR AMNEZIA
|
// TODO: IMPL FOR AMNEZIA
|
||||||
#if 0
|
#if 0
|
||||||
SettingsHolder* settingsHolder = SettingsHolder::instance();
|
SettingsHolder* settingsHolder = SettingsHolder::instance();
|
||||||
|
|
@ -119,11 +119,16 @@ void NetworkWatcher::settingsChanged() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkWatcher::onSleepMode()
|
||||||
|
{
|
||||||
|
logger.debug() << "Resumed from sleep mode";
|
||||||
|
emit sleepMode();
|
||||||
|
}
|
||||||
|
|
||||||
void NetworkWatcher::unsecuredNetwork(const QString& networkName,
|
void NetworkWatcher::unsecuredNetwork(const QString& networkName,
|
||||||
const QString& networkId) {
|
const QString& networkId) {
|
||||||
logger.debug() << "Unsecured network:" << logger.sensitive(networkName)
|
logger.debug() << "Unsecured network:" << logger.sensitive(networkName)
|
||||||
<< "id:" << logger.sensitive(networkId);
|
<< "id:" << logger.sensitive(networkId);
|
||||||
|
|
||||||
#ifndef UNIT_TEST
|
#ifndef UNIT_TEST
|
||||||
if (!m_reportUnsecuredNetwork) {
|
if (!m_reportUnsecuredNetwork) {
|
||||||
logger.debug() << "Disabled. Ignoring unsecured network";
|
logger.debug() << "Disabled. Ignoring unsecured network";
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,8 @@ public:
|
||||||
// false to restore.
|
// false to restore.
|
||||||
void simulateDisconnection(bool simulatedDisconnection);
|
void simulateDisconnection(bool simulatedDisconnection);
|
||||||
|
|
||||||
|
void onSleepMode();
|
||||||
|
|
||||||
QNetworkInformation::Reachability getReachability();
|
QNetworkInformation::Reachability getReachability();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
#include "platforms/windows/daemon/windowsfirewall.h"
|
#include "platforms/windows/daemon/windowsfirewall.h"
|
||||||
#include "platforms/windows/daemon/windowssplittunnel.h"
|
#include "platforms/windows/daemon/windowssplittunnel.h"
|
||||||
#include "platforms/windows/windowscommons.h"
|
|
||||||
#include "windowsfirewall.h"
|
#include "windowsfirewall.h"
|
||||||
|
|
||||||
#include "core/networkUtilities.h"
|
#include "core/networkUtilities.h"
|
||||||
|
|
|
||||||
|
|
@ -32,9 +32,28 @@ WindowsNetworkWatcher::~WindowsNetworkWatcher() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LRESULT WindowsNetworkWatcher::PowerWndProcCallback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
||||||
|
auto obj = reinterpret_cast<WindowsNetworkWatcher*>(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() {
|
void WindowsNetworkWatcher::initialize() {
|
||||||
logger.debug() << "initialize";
|
logger.debug() << "initialize";
|
||||||
|
|
||||||
|
|
||||||
DWORD negotiatedVersion;
|
DWORD negotiatedVersion;
|
||||||
if (WlanOpenHandle(2, nullptr, &negotiatedVersion, &m_wlanHandle) !=
|
if (WlanOpenHandle(2, nullptr, &negotiatedVersion, &m_wlanHandle) !=
|
||||||
ERROR_SUCCESS) {
|
ERROR_SUCCESS) {
|
||||||
|
|
@ -51,6 +70,25 @@ void WindowsNetworkWatcher::initialize() {
|
||||||
return;
|
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<LPVOID>(this));
|
||||||
|
if (!hwnd) {
|
||||||
|
logger.debug() << "Failed to create window in createPowerMonitorWindow.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(this));
|
||||||
|
|
||||||
logger.debug() << "callback registered";
|
logger.debug() << "callback registered";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -137,4 +175,4 @@ void WindowsNetworkWatcher::processWlan(PWLAN_NOTIFICATION_DATA data) {
|
||||||
logger.debug() << "Unsecure network:" << logger.sensitive(ssid)
|
logger.debug() << "Unsecure network:" << logger.sensitive(ssid)
|
||||||
<< "id:" << logger.sensitive(bssid);
|
<< "id:" << logger.sensitive(bssid);
|
||||||
emit unsecuredNetwork(ssid, bssid);
|
emit unsecuredNetwork(ssid, bssid);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ class WindowsNetworkWatcher final : public NetworkWatcherImpl {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void wlanCallback(PWLAN_NOTIFICATION_DATA data, PVOID context);
|
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);
|
void processWlan(PWLAN_NOTIFICATION_DATA data);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,6 @@ LocalServer::LocalServer(QObject *parent) : QObject(parent),
|
||||||
}
|
}
|
||||||
|
|
||||||
m_networkWatcher.initialize();
|
m_networkWatcher.initialize();
|
||||||
|
|
||||||
connect(&m_networkWatcher, &NetworkWatcher::sleepMode, &m_ipcServer, &IpcServer::networkChange);
|
connect(&m_networkWatcher, &NetworkWatcher::sleepMode, &m_ipcServer, &IpcServer::networkChange);
|
||||||
|
|
||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue