summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOdd Stranne <odd@mullvad.net>2020-01-28 14:34:10 +0100
committerOdd Stranne <odd@mullvad.net>2020-01-28 14:34:10 +0100
commite13e04f5104557d8722666fc599502e9c336bdcc (patch)
tree02696149b415b628c4291274e8a4fe22b12f9dd4
parentc48e088f5cd7bf101db33e117d8ea7acf86c9580 (diff)
parent5ba8f62fb81f13f7ffa9b816ba33cbb814ce1417 (diff)
downloadmullvadvpn-e13e04f5104557d8722666fc599502e9c336bdcc.tar.xz
mullvadvpn-e13e04f5104557d8722666fc599502e9c336bdcc.zip
Merge branch 'less-macro-magic'
-rw-r--r--windows/libshared/src/libshared/network/interfaceutils.cpp21
m---------windows/libwfp0
-rw-r--r--windows/nsis-plugins/src/cleanup/cleaningops.cpp5
-rw-r--r--windows/nsis-plugins/src/driverlogic/context.cpp70
-rw-r--r--windows/nsis-plugins/src/driverlogic/driverlogic.cpp5
-rw-r--r--windows/nsis-plugins/src/log/log.cpp38
-rw-r--r--windows/nsis-plugins/src/log/logger.cpp10
-rw-r--r--windows/nsis-plugins/src/msiutil/msiutil.cpp6
-rw-r--r--windows/nsis-plugins/src/pathedit/pathedit.cpp86
-rw-r--r--windows/nsis-plugins/src/registry/registry.cpp4
-rw-r--r--windows/nsis-plugins/src/string/string.cpp4
-rw-r--r--windows/nsis-plugins/src/string/string.vcxproj8
-rw-r--r--windows/nsis-plugins/src/tray/tray.cpp8
-rw-r--r--windows/nsis-plugins/src/tray/trayparser.cpp12
-rw-r--r--windows/windns/src/windns/netsh.cpp7
-rw-r--r--windows/windns/src/windns/windns.cpp15
m---------windows/windows-libraries0
-rw-r--r--windows/winfw/src/extras/cli/commands/list/events.cpp3
-rw-r--r--windows/winfw/src/extras/cli/commands/list/filters.cpp3
-rw-r--r--windows/winfw/src/extras/cli/commands/list/layers.cpp3
-rw-r--r--windows/winfw/src/extras/cli/commands/list/providercontexts.cpp3
-rw-r--r--windows/winfw/src/extras/cli/commands/list/providers.cpp3
-rw-r--r--windows/winfw/src/extras/cli/commands/list/sessions.cpp3
-rw-r--r--windows/winfw/src/extras/cli/commands/list/sublayers.cpp3
-rw-r--r--windows/winfw/src/extras/cli/commands/monitor/m_events.cpp3
-rw-r--r--windows/winfw/src/extras/cli/commands/winfw/deinit.cpp3
-rw-r--r--windows/winfw/src/extras/cli/commands/winfw/init.cpp5
-rw-r--r--windows/winfw/src/extras/cli/commands/winfw/policy.cpp5
-rw-r--r--windows/winfw/src/extras/cli/modules/module.cpp7
-rw-r--r--windows/winfw/src/extras/cli/subcommanddispatcher.cpp6
-rw-r--r--windows/winfw/src/extras/cli/util.cpp3
-rw-r--r--windows/winfw/src/winfw/fwcontext.cpp12
-rw-r--r--windows/winfw/src/winfw/rules/permitdhcpserver.cpp4
-rw-r--r--windows/winfw/src/winfw/rules/permitvpnrelay.cpp6
-rw-r--r--windows/winfw/src/winfw/sessioncontroller.cpp22
-rw-r--r--windows/winfw/src/winfw/sessionrecord.cpp4
-rw-r--r--windows/winfw/src/winfw/winfw.cpp4
-rw-r--r--windows/winnet/src/winnet/InterfacePair.cpp59
-rw-r--r--windows/winnet/src/winnet/NetworkInterfaces.cpp61
-rw-r--r--windows/winnet/src/winnet/networkadaptermonitor.cpp21
-rw-r--r--windows/winnet/src/winnet/routing/defaultroutemonitor.cpp19
-rw-r--r--windows/winnet/src/winnet/routing/helpers.cpp45
-rw-r--r--windows/winnet/src/winnet/routing/routemanager.cpp44
-rw-r--r--windows/winnet/src/winnet/routing/types.cpp7
-rw-r--r--windows/winnet/src/winnet/winnet.cpp21
-rw-r--r--windows/winutil/src/winutil/migration.cpp12
46 files changed, 372 insertions, 321 deletions
diff --git a/windows/libshared/src/libshared/network/interfaceutils.cpp b/windows/libshared/src/libshared/network/interfaceutils.cpp
index 6d56ec82d2..c4a97105f5 100644
--- a/windows/libshared/src/libshared/network/interfaceutils.cpp
+++ b/windows/libshared/src/libshared/network/interfaceutils.cpp
@@ -39,7 +39,7 @@ InterfaceUtils::NetworkAdapter::NetworkAdapter(
IID guidObj = { 0 };
if (S_OK != IIDFromString(&m_guid[0], &guidObj))
{
- throw std::runtime_error("IIDFromString() failed");
+ THROW_ERROR("IIDFromString() failed");
}
m_alias = nci.getConnectionName(guidObj);
@@ -59,7 +59,10 @@ std::set<InterfaceUtils::NetworkAdapter> InterfaceUtils::GetAllAdapters(ULONG fa
auto status = GetAdaptersAddresses(family, flags, nullptr, nullptr, &bufferSize);
- THROW_UNLESS(ERROR_BUFFER_OVERFLOW, status, "Probe for adapter listing buffer size");
+ if (ERROR_BUFFER_OVERFLOW != status)
+ {
+ THROW_WINDOWS_ERROR(status, "Probe for adapter listing buffer size");
+ }
// Memory is cheap, this avoids a looping construct.
bufferSize *= 2;
@@ -69,7 +72,10 @@ std::set<InterfaceUtils::NetworkAdapter> InterfaceUtils::GetAllAdapters(ULONG fa
status = GetAdaptersAddresses(family, flags, nullptr, addresses, &bufferSize);
- THROW_UNLESS(ERROR_SUCCESS, status, "Retrieve adapter listing");
+ if (ERROR_SUCCESS != status)
+ {
+ THROW_WINDOWS_ERROR(status, "Retrieve adapter listing");
+ }
std::set<NetworkAdapter> adapters;
@@ -94,7 +100,12 @@ void InterfaceUtils::AddDeviceIpAddresses(NET_LUID device, const std::vector<SOC
row.InterfaceLuid = device;
row.Address = address;
- THROW_UNLESS(NO_ERROR, CreateUnicastIpAddressEntry(&row), "Assign IP address on network interface");
+ const auto status = CreateUnicastIpAddressEntry(&row);
+
+ if (NO_ERROR != status)
+ {
+ THROW_WINDOWS_ERROR(status, "Assign IP address on network interface");
+ }
}
}
@@ -171,7 +182,7 @@ std::wstring InterfaceUtils::GetTapInterfaceAlias()
}
}
- throw std::runtime_error("Unable to find TAP adapter");
+ THROW_ERROR("Unable to find TAP adapter");
}
}
diff --git a/windows/libwfp b/windows/libwfp
-Subproject 70dde60aa45029b825658cad6e0159bba44b0bd
+Subproject 82bd033c284ae4c33b139e928e4fba6a12bdee9
diff --git a/windows/nsis-plugins/src/cleanup/cleaningops.cpp b/windows/nsis-plugins/src/cleanup/cleaningops.cpp
index 88cf20ad55..ed6e8dbf9d 100644
--- a/windows/nsis-plugins/src/cleanup/cleaningops.cpp
+++ b/windows/nsis-plugins/src/cleanup/cleaningops.cpp
@@ -3,6 +3,7 @@
#include <libcommon/filesystem.h>
#include <libcommon/fileenumerator.h>
#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <libcommon/memory.h>
#include <libcommon/security.h>
#include <libcommon/process/process.h>
@@ -80,7 +81,7 @@ std::wstring GetSystemUserLocalAppData()
if (nullptr == processHandle)
{
- throw std::runtime_error("Failed to access the \"LSASS\" process");
+ THROW_ERROR("Failed to access the \"LSASS\" process");
}
HANDLE processToken;
@@ -91,7 +92,7 @@ std::wstring GetSystemUserLocalAppData()
if (FALSE == status)
{
- throw std::runtime_error("Failed to acquire process token for the \"LSASS\" process");
+ THROW_ERROR("Failed to acquire process token for the \"LSASS\" process");
}
sd += [&]()
diff --git a/windows/nsis-plugins/src/driverlogic/context.cpp b/windows/nsis-plugins/src/driverlogic/context.cpp
index 2fe33e22cd..ad4df8b253 100644
--- a/windows/nsis-plugins/src/driverlogic/context.cpp
+++ b/windows/nsis-plugins/src/driverlogic/context.cpp
@@ -15,7 +15,6 @@
#include <vector>
#include <list>
-#include <stdexcept>
#include <sstream>
#include <algorithm>
@@ -64,7 +63,7 @@ std::wstring GetNetCfgInstanceId(HDEVINFO devInfo, const SP_DEVINFO_DATA &devInf
if (hNet == INVALID_HANDLE_VALUE)
{
- THROW_GLE("SetupDiOpenDevRegKey");
+ THROW_WINDOWS_ERROR(GetLastError(), "SetupDiOpenDevRegKey");
}
std::vector<wchar_t> instanceId(MAX_PATH + sizeof(L'\0'));
@@ -82,7 +81,10 @@ std::wstring GetNetCfgInstanceId(HDEVINFO devInfo, const SP_DEVINFO_DATA &devInf
RegCloseKey(hNet);
- THROW_UNLESS(ERROR_SUCCESS, status, "RegGetValueW");
+ if (ERROR_SUCCESS != status)
+ {
+ THROW_WINDOWS_ERROR(status, "RegGetValueW");
+ }
instanceId[strSize / sizeof(wchar_t)] = L'\0';
@@ -114,7 +116,11 @@ std::wstring GetDeviceInstanceId(
deviceInstanceId.size(),
nullptr
);
- THROW_GLE_IF(FALSE, status, "SetupDiGetDeviceInstanceIdW() failed");
+
+ if (FALSE == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "SetupDiGetDeviceInstanceIdW() failed");
+ }
return deviceInstanceId.data();
}
@@ -145,7 +151,12 @@ std::wstring GetDeviceStringProperty(
if (FALSE == sizeStatus)
{
- THROW_UNLESS(ERROR_INSUFFICIENT_BUFFER, GetLastError(), "SetupDiGetDevicePropertyW");
+ const auto lastError = GetLastError();
+
+ if (ERROR_INSUFFICIENT_BUFFER != lastError)
+ {
+ THROW_WINDOWS_ERROR(lastError, "SetupDiGetDevicePropertyW");
+ }
}
std::vector<wchar_t> buffer;
@@ -166,7 +177,10 @@ std::wstring GetDeviceStringProperty(
0
);
- THROW_GLE_IF(FALSE, status, "Failed to read device property");
+ if (FALSE == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "Failed to read device property");
+ }
return buffer.data();
}
@@ -198,7 +212,11 @@ std::optional<std::wstring> GetDeviceRegistryStringProperty(
{
// ERROR_INVALID_DATA may mean that the property does not exist
// TODO: Check if there may be other causes.
- THROW_UNLESS(ERROR_INVALID_DATA, lastError, "SetupDiGetDeviceRegistryPropertyW");
+ if (ERROR_INVALID_DATA != lastError)
+ {
+ THROW_WINDOWS_ERROR(lastError, "SetupDiGetDeviceRegistryPropertyW");
+ }
+
return std::nullopt;
}
@@ -219,7 +237,10 @@ std::optional<std::wstring> GetDeviceRegistryStringProperty(
nullptr
);
- THROW_GLE_IF(FALSE, status, "Failed to read device property");
+ if (FALSE == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "Failed to read device property");
+ }
return { buffer.data() };
}
@@ -234,7 +255,11 @@ std::set<Context::NetworkAdapter> GetTapAdapters()
nullptr,
DIGCF_PRESENT
);
- THROW_GLE_IF(INVALID_HANDLE_VALUE, devInfo, "SetupDiGetClassDevs() failed");
+
+ if (INVALID_HANDLE_VALUE == devInfo)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "SetupDiGetClassDevs() failed");
+ }
common::memory::ScopeDestructor scopeDestructor;
scopeDestructor += [devInfo]()
@@ -251,12 +276,15 @@ std::set<Context::NetworkAdapter> GetTapAdapters()
if (FALSE == SetupDiEnumDeviceInfo(devInfo, memberIndex, &devInfoData))
{
- if (ERROR_NO_MORE_ITEMS == GetLastError())
+ const auto lastError = GetLastError();
+
+ if (ERROR_NO_MORE_ITEMS == lastError)
{
// Done
break;
}
- THROW_GLE("SetupDiEnumDeviceInfo() failed while enumerating network adapters");
+
+ THROW_WINDOWS_ERROR(lastError, "SetupDiEnumDeviceInfo() failed while enumerating network adapters");
}
//
@@ -411,14 +439,14 @@ Context::NetworkAdapter Context::getNewAdapter()
{
LogAdapters(L"Enumerable network TAP adapters", m_currentState);
- throw std::runtime_error("Unable to identify recently added TAP adapter");
+ THROW_ERROR("Unable to identify recently added TAP adapter");
}
else if (added.size() > 1)
{
LogAdapters(L"Enumerable network TAP adapters", m_currentState);
LogAdapters(L"New TAP adapters:", added);
- throw std::runtime_error("Identified more TAP adapters than expected");
+ THROW_ERROR("Identified more TAP adapters than expected");
}
return *added.begin();
@@ -432,7 +460,7 @@ Context::DeletionResult Context::DeleteMullvadAdapter()
if (!mullvadAdapter.has_value())
{
- throw std::runtime_error("Mullvad TAP adapter not found");
+ THROW_ERROR("Mullvad TAP adapter not found");
}
const auto mullvadGuid = mullvadAdapter.value().guid;
@@ -444,7 +472,10 @@ Context::DeletionResult Context::DeleteMullvadAdapter()
DIGCF_PRESENT
);
- THROW_GLE_IF(INVALID_HANDLE_VALUE, devInfo, "SetupDiGetClassDevs() failed");
+ if (INVALID_HANDLE_VALUE == devInfo)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "SetupDiGetClassDevs() failed");
+ }
common::memory::ScopeDestructor cleanupDevList;
cleanupDevList += [&devInfo]()
@@ -461,11 +492,14 @@ Context::DeletionResult Context::DeleteMullvadAdapter()
if (FALSE == SetupDiEnumDeviceInfo(devInfo, memberIndex, &devInfoData))
{
- if (ERROR_NO_MORE_ITEMS == GetLastError())
+ const auto lastError = GetLastError();
+
+ if (ERROR_NO_MORE_ITEMS == lastError)
{
break;
}
- THROW_GLE("Error enumerating network adapters");
+
+ THROW_WINDOWS_ERROR(lastError, "Error enumerating network adapters");
}
const auto hardwareId = GetDeviceRegistryStringProperty(devInfo, &devInfoData, SPDRP_HARDWAREID);
@@ -484,7 +518,7 @@ Context::DeletionResult Context::DeleteMullvadAdapter()
&devInfoData
))
{
- THROW_GLE("Error removing Mullvad TAP device");
+ THROW_WINDOWS_ERROR(GetLastError(), "Error removing Mullvad TAP device");
}
}
}
diff --git a/windows/nsis-plugins/src/driverlogic/driverlogic.cpp b/windows/nsis-plugins/src/driverlogic/driverlogic.cpp
index d82cde2f4d..4cd54f4ed0 100644
--- a/windows/nsis-plugins/src/driverlogic/driverlogic.cpp
+++ b/windows/nsis-plugins/src/driverlogic/driverlogic.cpp
@@ -2,6 +2,7 @@
#include "../error.h"
#include "context.h"
#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <libcommon/valuemapper.h>
#include <windows.h>
@@ -32,7 +33,7 @@ void PinDll()
if (0 == GetModuleFileNameW((HINSTANCE)&__ImageBase, self, _countof(self)))
{
- throw std::runtime_error("Failed to pin plugin module");
+ THROW_ERROR("Failed to pin plugin module");
}
//
@@ -193,7 +194,7 @@ void __declspec(dllexport) NSISCALL RemoveMullvadTap
default:
{
- throw std::runtime_error("Unexpected case");
+ THROW_ERROR("Unexpected case");
}
}
}
diff --git a/windows/nsis-plugins/src/log/log.cpp b/windows/nsis-plugins/src/log/log.cpp
index 7b58006064..3a5e6579ec 100644
--- a/windows/nsis-plugins/src/log/log.cpp
+++ b/windows/nsis-plugins/src/log/log.cpp
@@ -28,7 +28,7 @@ std::wstring PopString()
if (!g_stacktop || !*g_stacktop)
{
- throw std::runtime_error("NSIS variable stack is corrupted");
+ THROW_ERROR("NSIS variable stack is corrupted");
}
stack_t *th = *g_stacktop;
@@ -57,7 +57,7 @@ void PinDll()
if (0 == GetModuleFileNameW((HINSTANCE)&__ImageBase, self, _countof(self)))
{
- throw std::runtime_error("Failed to pin plugin module");
+ THROW_ERROR("Failed to pin plugin module");
}
//
@@ -99,12 +99,20 @@ std::wstring GetWindowsVersion()
DWORD dummy;
const auto versionSize = GetFileVersionInfoSizeW(systemModule.c_str(), &dummy);
- THROW_GLE_IF(0, versionSize, "GetFileVersionInfoSizeW");
+
+ if (0 == versionSize)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "GetFileVersionInfoSizeW");
+ }
std::vector<uint8_t> buf(versionSize);
auto status = GetFileVersionInfoW(systemModule.c_str(), 0, static_cast<DWORD>(buf.size()), &buf[0]);
- THROW_GLE_IF(FALSE, status, "GetFileVersionInfoW");
+
+ if (FALSE == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "GetFileVersionInfoW");
+ }
//
// Get the translation table.
@@ -121,11 +129,15 @@ std::wstring GetWindowsVersion()
UINT translationsSize = 0;
status = VerQueryValueW(&buf[0], L"\\VarFileInfo\\Translation", reinterpret_cast<LPVOID *>(&translations), &translationsSize);
- THROW_GLE_IF(FALSE, status, "VerQueryValueW");
+
+ if (FALSE == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "VerQueryValueW");
+ }
if (translationsSize < sizeof(LANGANDCODEPAGE))
{
- throw std::runtime_error("Invalid VERSION_INFO translation table");
+ THROW_ERROR("Invalid VERSION_INFO translation table");
}
//
@@ -147,7 +159,11 @@ std::wstring GetWindowsVersion()
UINT productVersionSize = 0;
status = VerQueryValueW(&buf[0], productVersionName.c_str(), &productVersion, &productVersionSize);
- THROW_GLE_IF(FALSE, status, "VerQueryValueW");
+
+ if (FALSE == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "VerQueryValueW");
+ }
// Size returned is the length in characters.
std::wstring version(reinterpret_cast<const wchar_t *>(productVersion), productVersionSize);
@@ -160,7 +176,7 @@ std::wstring GetWindowsVersion()
if (version.empty())
{
- throw std::runtime_error("Invalid version information");
+ THROW_ERROR("Invalid version information");
}
return version;
@@ -215,7 +231,7 @@ void __declspec(dllexport) NSISCALL Initialize
<< logpath
<< L"\"";
- throw std::runtime_error(common::string::ToAnsi(ss.str()));
+ THROW_ERROR(common::string::ToAnsi(ss.str()).c_str());
}
}
@@ -226,7 +242,6 @@ void __declspec(dllexport) NSISCALL Initialize
break;
}
-
case static_cast<int>(LogTarget::LOG_VOID):
{
g_logger = new Logger(std::make_unique<VoidLogSink>());
@@ -234,10 +249,9 @@ void __declspec(dllexport) NSISCALL Initialize
break;
}
-
default:
{
- throw std::runtime_error("Invalid log target");
+ THROW_ERROR("Invalid log target");
}
}
}
diff --git a/windows/nsis-plugins/src/log/logger.cpp b/windows/nsis-plugins/src/log/logger.cpp
index 8291b98032..8e3b6e6298 100644
--- a/windows/nsis-plugins/src/log/logger.cpp
+++ b/windows/nsis-plugins/src/log/logger.cpp
@@ -13,7 +13,10 @@ AnsiFileLogSink::AnsiFileLogSink(const std::wstring &file, bool append, bool flu
m_logfile = CreateFileW(file.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, nullptr,
creationDisposition, FILE_ATTRIBUTE_NORMAL, nullptr);
- THROW_GLE_IF(INVALID_HANDLE_VALUE, m_logfile, "Open/create log file");
+ if (INVALID_HANDLE_VALUE == m_logfile)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "Open/create log file");
+ }
if (append && ERROR_ALREADY_EXISTS == GetLastError())
{
@@ -21,7 +24,10 @@ AnsiFileLogSink::AnsiFileLogSink(const std::wstring &file, bool append, bool flu
const auto seekStatus = SetFilePointerEx(m_logfile, offset, nullptr, FILE_END);
- THROW_GLE_IF(FALSE, seekStatus, "Seek to end offset in existing log file");
+ if (FALSE == seekStatus)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "Seek to end offset in existing log file");
+ }
}
}
diff --git a/windows/nsis-plugins/src/msiutil/msiutil.cpp b/windows/nsis-plugins/src/msiutil/msiutil.cpp
index b4d8f92521..cf6e467b41 100644
--- a/windows/nsis-plugins/src/msiutil/msiutil.cpp
+++ b/windows/nsis-plugins/src/msiutil/msiutil.cpp
@@ -5,7 +5,7 @@
#include "../error.h"
#include <log/log.h>
#include <libcommon/string.h>
-#include <stdexcept>
+#include <libcommon/error.h>
namespace
{
@@ -19,7 +19,7 @@ std::wstring PopString()
if (!g_stacktop || !*g_stacktop)
{
- throw std::runtime_error("NSIS variable stack is corrupted");
+ THROW_ERROR("NSIS variable stack is corrupted");
}
stack_t *th = *g_stacktop;
@@ -48,7 +48,7 @@ void PinDll()
if (0 == GetModuleFileNameW((HINSTANCE)&__ImageBase, self, _countof(self)))
{
- throw std::runtime_error("Failed to pin plugin module");
+ THROW_ERROR("Failed to pin plugin module");
}
//
diff --git a/windows/nsis-plugins/src/pathedit/pathedit.cpp b/windows/nsis-plugins/src/pathedit/pathedit.cpp
index ff01fa8a0f..7c468e3276 100644
--- a/windows/nsis-plugins/src/pathedit/pathedit.cpp
+++ b/windows/nsis-plugins/src/pathedit/pathedit.cpp
@@ -38,7 +38,7 @@ std::wstring PopString()
if (!g_stacktop || !*g_stacktop)
{
- throw std::runtime_error("NSIS variable stack is corrupted");
+ THROW_ERROR("NSIS variable stack is corrupted");
}
stack_t *th = *g_stacktop;
@@ -140,32 +140,22 @@ void __declspec(dllexport) NSISCALL AddSysEnvPath
}
DWORD result;
- THROW_GLE_IF(
- SendMessageTimeoutA(
- HWND_BROADCAST,
- WM_SETTINGCHANGE,
- 0,
- (LPARAM)"Environment",
- SMTO_ABORTIFHUNG,
- messageTimeoutInterval,
- &result
- ),
- 0,
- "SendMessageTimeoutA"
- );
- THROW_GLE_IF(
- SendMessageTimeoutW(
- HWND_BROADCAST,
- WM_SETTINGCHANGE,
- 0,
- (LPARAM)L"Environment",
- SMTO_ABORTIFHUNG,
- messageTimeoutInterval,
- &result
- ),
- 0,
- "SendMessageTimeoutW"
- );
+
+ auto status = SendMessageTimeoutA(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
+ (LPARAM)"Environment", SMTO_ABORTIFHUNG, messageTimeoutInterval, &result);
+
+ if (0 == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "SendMessageTimeoutA");
+ }
+
+ status = SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
+ (LPARAM)L"Environment", SMTO_ABORTIFHUNG, messageTimeoutInterval, &result);
+
+ if (0 == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "SendMessageTimeoutW");
+ }
pushstring(L"");
pushint(NsisStatus::SUCCESS);
@@ -235,32 +225,22 @@ void __declspec(dllexport) NSISCALL RemoveSysEnvPath
if (updatedPath)
{
DWORD result;
- THROW_GLE_IF(
- SendMessageTimeoutA(
- HWND_BROADCAST,
- WM_SETTINGCHANGE,
- 0,
- (LPARAM)"Environment",
- SMTO_ABORTIFHUNG,
- messageTimeoutInterval,
- &result
- ),
- 0,
- "SendMessageTimeoutA"
- );
- THROW_GLE_IF(
- SendMessageTimeoutW(
- HWND_BROADCAST,
- WM_SETTINGCHANGE,
- 0,
- (LPARAM)L"Environment",
- SMTO_ABORTIFHUNG,
- messageTimeoutInterval,
- &result
- ),
- 0,
- "SendMessageTimeoutW"
- );
+
+ auto status = SendMessageTimeoutA(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
+ (LPARAM)"Environment", SMTO_ABORTIFHUNG, messageTimeoutInterval, &result);
+
+ if (0 == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "SendMessageTimeoutA");
+ }
+
+ status = SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
+ (LPARAM)L"Environment", SMTO_ABORTIFHUNG, messageTimeoutInterval, &result);
+
+ if (0 == status)
+ {
+ THROW_WINDOWS_ERROR(GetLastError(), "SendMessageTimeoutW");
+ }
}
pushstring(L"");
diff --git a/windows/nsis-plugins/src/registry/registry.cpp b/windows/nsis-plugins/src/registry/registry.cpp
index 7d60e3cb9c..760fadf146 100644
--- a/windows/nsis-plugins/src/registry/registry.cpp
+++ b/windows/nsis-plugins/src/registry/registry.cpp
@@ -2,11 +2,11 @@
#include "../error.h"
#include <windows.h>
#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <libcommon/registry/registry.h>
#include <libcommon/registry/registrypath.h>
#include <nsis/pluginapi.h>
#include <string>
-#include <stdexcept>
namespace
{
@@ -20,7 +20,7 @@ std::wstring PopString()
if (!g_stacktop || !*g_stacktop)
{
- throw std::runtime_error("NSIS variable stack is corrupted");
+ THROW_ERROR("NSIS variable stack is corrupted");
}
stack_t *th = *g_stacktop;
diff --git a/windows/nsis-plugins/src/string/string.cpp b/windows/nsis-plugins/src/string/string.cpp
index 6071e6303d..230a9a3696 100644
--- a/windows/nsis-plugins/src/string/string.cpp
+++ b/windows/nsis-plugins/src/string/string.cpp
@@ -1,6 +1,6 @@
#include "stdafx.h"
#include <nsis/pluginapi.h>
-#include <stdexcept>
+#include <libcommon/error.h>
#include <string>
// Suppress warnings caused by broken legacy code
@@ -21,7 +21,7 @@ std::wstring PopString()
if (!g_stacktop || !*g_stacktop)
{
- throw std::runtime_error("NSIS variable stack is corrupted");
+ THROW_ERROR("NSIS variable stack is corrupted");
}
stack_t *th = *g_stacktop;
diff --git a/windows/nsis-plugins/src/string/string.vcxproj b/windows/nsis-plugins/src/string/string.vcxproj
index bc3f32f528..af90ecb928 100644
--- a/windows/nsis-plugins/src/string/string.vcxproj
+++ b/windows/nsis-plugins/src/string/string.vcxproj
@@ -61,7 +61,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;STRING_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/;$(ProjectDir)../</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../</AdditionalIncludeDirectories>
<LanguageStandard>stdcpplatest</LanguageStandard>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
@@ -70,7 +70,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<AdditionalLibraryDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/nsis/;$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories>
- <AdditionalDependencies>pluginapi-x86-unicode.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>libcommon.lib;pluginapi-x86-unicode.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>libc.lib</IgnoreSpecificDefaultLibraries>
<ModuleDefinitionFile>string.def</ModuleDefinitionFile>
</Link>
@@ -85,7 +85,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;STRING_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
- <AdditionalIncludeDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/;$(ProjectDir)../</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<LanguageStandard>stdcpplatest</LanguageStandard>
</ClCompile>
@@ -96,7 +96,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<AdditionalLibraryDirectories>$(ProjectDir)../../../../dist-assets/binaries/x86_64-pc-windows-msvc/nsis/;$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories>
- <AdditionalDependencies>pluginapi-x86-unicode.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>libcommon.lib;pluginapi-x86-unicode.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>libc.lib</IgnoreSpecificDefaultLibraries>
<ModuleDefinitionFile>string.def</ModuleDefinitionFile>
</Link>
diff --git a/windows/nsis-plugins/src/tray/tray.cpp b/windows/nsis-plugins/src/tray/tray.cpp
index e86162e0fa..e4a96637e3 100644
--- a/windows/nsis-plugins/src/tray/tray.cpp
+++ b/windows/nsis-plugins/src/tray/tray.cpp
@@ -6,13 +6,13 @@
#include <windows.h>
#include <log/log.h>
#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <libcommon/registry/registry.h>
#include <libcommon/resourcedata.h>
#include <libcommon/filesystem.h>
#include <libcommon/process/process.h>
#include <libcommon/security.h>
#include <nsis/pluginapi.h>
-#include <stdexcept>
#include <filesystem>
namespace
@@ -33,7 +33,7 @@ void InjectMullvadRecord(TrayJuggler &juggler)
if (resource.size != sizeof(ICON_STREAMS_RECORD))
{
- throw std::runtime_error("Invalid tray template, size mismatch");
+ THROW_ERROR("Invalid tray template, size mismatch");
}
ICON_STREAMS_RECORD newRecord(*reinterpret_cast<const ICON_STREAMS_RECORD *>(resource.data));
@@ -59,7 +59,7 @@ void UpdateRegistry(common::registry::RegistryKey &regkey, const std::wstring &v
if (pids.empty())
{
- throw std::runtime_error("Could not determine PID of explorer.exe");
+ THROW_ERROR("Could not determine PID of explorer.exe");
}
//
@@ -92,7 +92,7 @@ void UpdateRegistry(common::registry::RegistryKey &regkey, const std::wstring &v
if (0 == terminated)
{
- throw std::runtime_error("Could not terminate explorer.exe");
+ THROW_ERROR("Could not terminate explorer.exe");
}
//
diff --git a/windows/nsis-plugins/src/tray/trayparser.cpp b/windows/nsis-plugins/src/tray/trayparser.cpp
index 4ff3573c81..a2c454e046 100644
--- a/windows/nsis-plugins/src/tray/trayparser.cpp
+++ b/windows/nsis-plugins/src/tray/trayparser.cpp
@@ -1,20 +1,20 @@
#include "stdafx.h"
#include "trayparser.h"
-#include <stdexcept>
+#include <libcommon/error.h>
#include <algorithm>
TrayParser::TrayParser(const std::vector<uint8_t> &blob)
{
if (blob.size() < sizeof(ICON_STREAMS_HEADER))
{
- throw std::runtime_error("Invalid icon streams header - truncated");
+ THROW_ERROR("Invalid icon streams header - truncated");
}
auto header = reinterpret_cast<const ICON_STREAMS_HEADER *>(&blob[0]);
if (header->HeaderSize != sizeof(ICON_STREAMS_HEADER))
{
- throw std::runtime_error("Invalid icon streams header - size mismatch");
+ THROW_ERROR("Invalid icon streams header - size mismatch");
}
memcpy(&m_header, header, sizeof(ICON_STREAMS_HEADER));
@@ -30,7 +30,7 @@ TrayParser::TrayParser(const std::vector<uint8_t> &blob)
if (blob.size() < sizeof(ICON_STREAMS_HEADER) + sizeof(ICON_STREAMS_RECORD))
{
- throw std::runtime_error("Invalid icon streams - truncated");
+ THROW_ERROR("Invalid icon streams - truncated");
}
const auto lastValidRecordOffset = blob.size() - sizeof(ICON_STREAMS_RECORD);
@@ -38,7 +38,7 @@ TrayParser::TrayParser(const std::vector<uint8_t> &blob)
if (header->OffsetFirstRecord < header->HeaderSize
|| header->OffsetFirstRecord > lastValidRecordOffset)
{
- throw std::runtime_error("Invalid icon streams header - record offset");
+ THROW_ERROR("Invalid icon streams header - record offset");
}
const auto estimatedSize = header->HeaderSize
@@ -47,7 +47,7 @@ TrayParser::TrayParser(const std::vector<uint8_t> &blob)
if (blob.size() != estimatedSize)
{
- throw std::runtime_error("Invalid icon streams - size mismatch");
+ THROW_ERROR("Invalid icon streams - size mismatch");
}
//
diff --git a/windows/windns/src/windns/netsh.cpp b/windows/windns/src/windns/netsh.cpp
index 8129c4b207..6cd529fce4 100644
--- a/windows/windns/src/windns/netsh.cpp
+++ b/windows/windns/src/windns/netsh.cpp
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "netsh.h"
#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <libcommon/filesystem.h>
#include <libcommon/guid.h>
#include <sstream>
@@ -27,7 +28,7 @@ __declspec(noreturn) void ThrowWithDetails(std::string &&error, common::process:
const auto msg = std::string(error).append(": ").append(details);
- throw std::runtime_error(msg.c_str());
+ THROW_ERROR(msg.c_str());
}
} // anonymous namespace
@@ -53,7 +54,7 @@ void NetSh::setIpv4StaticDns(uint32_t interfaceIndex,
if (nameServers.empty())
{
- throw std::runtime_error("Invalid list of name servers (zero length list)");
+ THROW_ERROR("Invalid list of name servers (zero length list)");
}
{
@@ -125,7 +126,7 @@ void NetSh::setIpv6StaticDns(uint32_t interfaceIndex,
if (nameServers.empty())
{
- throw std::runtime_error("Invalid list of name servers (zero length list)");
+ THROW_ERROR("Invalid list of name servers (zero length list)");
}
{
diff --git a/windows/windns/src/windns/windns.cpp b/windows/windns/src/windns/windns.cpp
index c0d36e8ad2..26e891521d 100644
--- a/windows/windns/src/windns/windns.cpp
+++ b/windows/windns/src/windns/windns.cpp
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include <libcommon/guid.h>
#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <libshared/network/interfaceutils.h>
#include <libcommon/logging/ilogsink.h>
#include <libshared/logging/logsinkadapter.h>
@@ -53,7 +54,7 @@ uint32_t ConvertInterfaceAliasToIndex(const std::wstring &interfaceAlias)
const auto err = std::wstring(L"Could not resolve LUID of interface: \"")
.append(interfaceAlias).append(L"\"");
- throw std::runtime_error(common::string::ToAnsi(err).c_str());
+ THROW_ERROR(common::string::ToAnsi(err).c_str());
}
NET_IFINDEX index;
@@ -65,7 +66,7 @@ uint32_t ConvertInterfaceAliasToIndex(const std::wstring &interfaceAlias)
ss << L"Could not resolve index of interface: \"" << interfaceAlias << L"\""
<< L"with LUID: 0x" << std::hex << luid.Value;
- throw std::runtime_error(common::string::ToAnsi(ss.str()).c_str());
+ THROW_ERROR(common::string::ToAnsi(ss.str()).c_str());
}
return static_cast<uint32_t>(index);
@@ -119,8 +120,10 @@ AdapterDnsAddresses GetAdapterDnsAddresses(const std::wstring &adapterAlias)
return out;
}
- throw std::runtime_error(std::string("Could not find interface: ")
- .append(common::string::ToAnsi(adapterAlias)).c_str());
+ const auto msg = std::string("Could not find interface with alias: ")
+ .append(common::string::ToAnsi(adapterAlias));
+
+ THROW_ERROR(msg.c_str());
}
AdapterDnsAddresses ConvertAddresses(
@@ -140,7 +143,7 @@ AdapterDnsAddresses ConvertAddresses(
if (1 != InetPtonW(AF_INET, ipv4Servers[i], &converted))
{
- throw std::runtime_error("Failed to convert IPv4 address");
+ THROW_ERROR("Failed to convert IPv4 address");
}
out.ipv4.push_back(converted);
@@ -155,7 +158,7 @@ AdapterDnsAddresses ConvertAddresses(
if (1 != InetPtonW(AF_INET6, ipv6Servers[i], &converted))
{
- throw std::runtime_error("Failed to convert IPv6 address");
+ THROW_ERROR("Failed to convert IPv6 address");
}
out.ipv6.push_back(converted);
diff --git a/windows/windows-libraries b/windows/windows-libraries
-Subproject 95ef76dc8700fd9369bd7b8f507b103ceaefd3c
+Subproject 9f49143c1dcdc577c8bb34ad82d7ae16001306d
diff --git a/windows/winfw/src/extras/cli/commands/list/events.cpp b/windows/winfw/src/extras/cli/commands/list/events.cpp
index 4396eff980..a60e957340 100644
--- a/windows/winfw/src/extras/cli/commands/list/events.cpp
+++ b/windows/winfw/src/extras/cli/commands/list/events.cpp
@@ -4,6 +4,7 @@
#include "cli/filterengineprovider.h"
#include "cli/propertydecorator.h"
#include "libwfp/objectenumerator.h"
+#include <libcommon/error.h>
namespace commands::list
{
@@ -28,7 +29,7 @@ void Events::handleRequest(const std::vector<std::wstring> &arguments)
{
if (false == arguments.empty())
{
- throw std::runtime_error("Unsupported argument(s). Cannot complete request.");
+ THROW_ERROR("Unsupported argument(s). Cannot complete request.");
}
PrettyPrintOptions options;
diff --git a/windows/winfw/src/extras/cli/commands/list/filters.cpp b/windows/winfw/src/extras/cli/commands/list/filters.cpp
index 9c7917bf66..132466957f 100644
--- a/windows/winfw/src/extras/cli/commands/list/filters.cpp
+++ b/windows/winfw/src/extras/cli/commands/list/filters.cpp
@@ -4,6 +4,7 @@
#include "cli/filterengineprovider.h"
#include "cli/propertydecorator.h"
#include "libwfp/objectenumerator.h"
+#include <libcommon/error.h>
namespace commands::list
{
@@ -28,7 +29,7 @@ void Filters::handleRequest(const std::vector<std::wstring> &arguments)
{
if (false == arguments.empty())
{
- throw std::runtime_error("Unsupported argument(s). Cannot complete request.");
+ THROW_ERROR("Unsupported argument(s). Cannot complete request.");
}
PrettyPrintOptions options;
diff --git a/windows/winfw/src/extras/cli/commands/list/layers.cpp b/windows/winfw/src/extras/cli/commands/list/layers.cpp
index 3dc4368894..bd3f067be7 100644
--- a/windows/winfw/src/extras/cli/commands/list/layers.cpp
+++ b/windows/winfw/src/extras/cli/commands/list/layers.cpp
@@ -4,6 +4,7 @@
#include "cli/filterengineprovider.h"
#include "cli/propertydecorator.h"
#include "libwfp/objectenumerator.h"
+#include <libcommon/error.h>
namespace commands::list
{
@@ -28,7 +29,7 @@ void Layers::handleRequest(const std::vector<std::wstring> &arguments)
{
if (false == arguments.empty())
{
- throw std::runtime_error("Unsupported argument(s). Cannot complete request.");
+ THROW_ERROR("Unsupported argument(s). Cannot complete request.");
}
PrettyPrintOptions options;
diff --git a/windows/winfw/src/extras/cli/commands/list/providercontexts.cpp b/windows/winfw/src/extras/cli/commands/list/providercontexts.cpp
index 6612ce03dc..10f3c49e61 100644
--- a/windows/winfw/src/extras/cli/commands/list/providercontexts.cpp
+++ b/windows/winfw/src/extras/cli/commands/list/providercontexts.cpp
@@ -4,6 +4,7 @@
#include "cli/filterengineprovider.h"
#include "cli/propertydecorator.h"
#include "libwfp/objectenumerator.h"
+#include <libcommon/error.h>
namespace commands::list
{
@@ -28,7 +29,7 @@ void ProviderContexts::handleRequest(const std::vector<std::wstring> &arguments)
{
if (false == arguments.empty())
{
- throw std::runtime_error("Unsupported argument(s). Cannot complete request.");
+ THROW_ERROR("Unsupported argument(s). Cannot complete request.");
}
PrettyPrintOptions options;
diff --git a/windows/winfw/src/extras/cli/commands/list/providers.cpp b/windows/winfw/src/extras/cli/commands/list/providers.cpp
index a06318d74b..9a5247c1dc 100644
--- a/windows/winfw/src/extras/cli/commands/list/providers.cpp
+++ b/windows/winfw/src/extras/cli/commands/list/providers.cpp
@@ -3,6 +3,7 @@
#include "cli/objectproperties.h"
#include "cli/filterengineprovider.h"
#include "libwfp/objectenumerator.h"
+#include <libcommon/error.h>
namespace commands::list
{
@@ -27,7 +28,7 @@ void Providers::handleRequest(const std::vector<std::wstring> &arguments)
{
if (false == arguments.empty())
{
- throw std::runtime_error("Unsupported argument(s). Cannot complete request.");
+ THROW_ERROR("Unsupported argument(s). Cannot complete request.");
}
PrettyPrintOptions options;
diff --git a/windows/winfw/src/extras/cli/commands/list/sessions.cpp b/windows/winfw/src/extras/cli/commands/list/sessions.cpp
index 27000c903d..f584bae6d8 100644
--- a/windows/winfw/src/extras/cli/commands/list/sessions.cpp
+++ b/windows/winfw/src/extras/cli/commands/list/sessions.cpp
@@ -3,6 +3,7 @@
#include "cli/objectproperties.h"
#include "cli/filterengineprovider.h"
#include "libwfp/objectenumerator.h"
+#include <libcommon/error.h>
namespace commands::list
{
@@ -27,7 +28,7 @@ void Sessions::handleRequest(const std::vector<std::wstring> &arguments)
{
if (false == arguments.empty())
{
- throw std::runtime_error("Unsupported argument(s). Cannot complete request.");
+ THROW_ERROR("Unsupported argument(s). Cannot complete request.");
}
PrettyPrintOptions options;
diff --git a/windows/winfw/src/extras/cli/commands/list/sublayers.cpp b/windows/winfw/src/extras/cli/commands/list/sublayers.cpp
index 0c8a5f2f58..79a6fcab5a 100644
--- a/windows/winfw/src/extras/cli/commands/list/sublayers.cpp
+++ b/windows/winfw/src/extras/cli/commands/list/sublayers.cpp
@@ -4,6 +4,7 @@
#include "cli/filterengineprovider.h"
#include "cli/propertydecorator.h"
#include "libwfp/objectenumerator.h"
+#include <libcommon/error.h>
namespace commands::list
{
@@ -28,7 +29,7 @@ void Sublayers::handleRequest(const std::vector<std::wstring> &arguments)
{
if (false == arguments.empty())
{
- throw std::runtime_error("Unsupported argument(s). Cannot complete request.");
+ THROW_ERROR("Unsupported argument(s). Cannot complete request.");
}
PrettyPrintOptions options;
diff --git a/windows/winfw/src/extras/cli/commands/monitor/m_events.cpp b/windows/winfw/src/extras/cli/commands/monitor/m_events.cpp
index 294ae38e9c..05a5002fb1 100644
--- a/windows/winfw/src/extras/cli/commands/monitor/m_events.cpp
+++ b/windows/winfw/src/extras/cli/commands/monitor/m_events.cpp
@@ -4,6 +4,7 @@
#include "cli/propertydecorator.h"
#include "cli/filterengineprovider.h"
#include "libwfp/objectmonitor.h"
+#include <libcommon/error.h>
#include <conio.h>
namespace commands::monitor
@@ -29,7 +30,7 @@ void Events::handleRequest(const std::vector<std::wstring> &arguments)
{
if (false == arguments.empty())
{
- throw std::runtime_error("Unsupported argument(s). Cannot complete request.");
+ THROW_ERROR("Unsupported argument(s). Cannot complete request.");
}
wfp::ObjectMonitor objectMonitor(FilterEngineProvider::Instance().get());
diff --git a/windows/winfw/src/extras/cli/commands/winfw/deinit.cpp b/windows/winfw/src/extras/cli/commands/winfw/deinit.cpp
index d0fc5cfffb..5fa2c91278 100644
--- a/windows/winfw/src/extras/cli/commands/winfw/deinit.cpp
+++ b/windows/winfw/src/extras/cli/commands/winfw/deinit.cpp
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "deinit.h"
#include "winfw/winfw.h"
+#include <libcommon/error.h>
namespace commands::winfw
{
@@ -24,7 +25,7 @@ void Deinit::handleRequest(const std::vector<std::wstring> &arguments)
{
if (false == arguments.empty())
{
- throw std::runtime_error("Invalid argument(s). Cannot complete request.");
+ THROW_ERROR("Invalid argument(s). Cannot complete request.");
}
m_messageSink((WinFw_Deinitialize()
diff --git a/windows/winfw/src/extras/cli/commands/winfw/init.cpp b/windows/winfw/src/extras/cli/commands/winfw/init.cpp
index b97bb494a8..48e64c5035 100644
--- a/windows/winfw/src/extras/cli/commands/winfw/init.cpp
+++ b/windows/winfw/src/extras/cli/commands/winfw/init.cpp
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "init.h"
-#include "libcommon/string.h"
+#include <libcommon/string.h>
+#include <libcommon/error.h>
namespace commands::winfw
{
@@ -30,7 +31,7 @@ void Init::handleRequest(const std::vector<std::wstring> &arguments)
if (keyvalue.empty() || 0 != keyvalue.begin()->first.compare(L"timeout"))
{
- throw std::runtime_error("Invalid argument. Cannot complete request.");
+ THROW_ERROR("Invalid argument. Cannot complete request.");
}
timeout = wcstoul(keyvalue.begin()->second.c_str(), nullptr, 10);
diff --git a/windows/winfw/src/extras/cli/commands/winfw/policy.cpp b/windows/winfw/src/extras/cli/commands/winfw/policy.cpp
index 02c358449c..ca84187e98 100644
--- a/windows/winfw/src/extras/cli/commands/winfw/policy.cpp
+++ b/windows/winfw/src/extras/cli/commands/winfw/policy.cpp
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "policy.h"
-#include "libcommon/string.h"
+#include <libcommon/string.h>
+#include <libcommon/error.h>
#include "winfw/winfw.h"
#include <functional>
@@ -80,7 +81,7 @@ void Policy::handleRequest(const std::vector<std::wstring> &arguments)
{
if (arguments.empty())
{
- throw std::runtime_error("Missing subcommand. Cannot complete request.");
+ THROW_ERROR("Missing subcommand. Cannot complete request.");
}
auto subcommand = arguments[0];
diff --git a/windows/winfw/src/extras/cli/modules/module.cpp b/windows/winfw/src/extras/cli/modules/module.cpp
index f66ae5a084..80739d4a42 100644
--- a/windows/winfw/src/extras/cli/modules/module.cpp
+++ b/windows/winfw/src/extras/cli/modules/module.cpp
@@ -1,7 +1,8 @@
#include "stdafx.h"
#include "module.h"
#include "cli/util.h"
-#include "libcommon/string.h"
+#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <sstream>
#include <utility>
@@ -37,7 +38,7 @@ void Module::handleRequest(const std::vector<std::wstring> &request)
ss << L"Command missing. Try 'help " << m_name << "'.";
- throw std::runtime_error(common::string::ToAnsi(ss.str()));
+ THROW_ERROR(common::string::ToAnsi(ss.str()).c_str());
}
auto wanted = common::string::Lower(request[0]);
@@ -49,7 +50,7 @@ void Module::handleRequest(const std::vector<std::wstring> &request)
ss << L"Module '" << m_name << "' doesn't support the command '" << request[0] << "'.";
- throw std::runtime_error(common::string::ToAnsi(ss.str()));
+ THROW_ERROR(common::string::ToAnsi(ss.str()).c_str());
}
auto args = request;
diff --git a/windows/winfw/src/extras/cli/subcommanddispatcher.cpp b/windows/winfw/src/extras/cli/subcommanddispatcher.cpp
index 4bb7868cd7..a095a1f218 100644
--- a/windows/winfw/src/extras/cli/subcommanddispatcher.cpp
+++ b/windows/winfw/src/extras/cli/subcommanddispatcher.cpp
@@ -1,8 +1,8 @@
#include "stdafx.h"
#include "subcommanddispatcher.h"
-#include "libcommon/string.h"
+#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <sstream>
-#include <stdexcept>
#include <utility>
void SubcommandDispatcher::addSubcommand(const std::wstring &command, Handler handler)
@@ -20,7 +20,7 @@ void SubcommandDispatcher::dispatch(const std::wstring &command, const std::vect
ss << L"Unsupported subcommand '" << command << "'. Cannot complete request.";
- throw std::runtime_error(common::string::ToAnsi(ss.str()).c_str());
+ THROW_ERROR(common::string::ToAnsi(ss.str()).c_str());
}
selectedCommand->second(common::string::SplitKeyValuePairs(arguments));
diff --git a/windows/winfw/src/extras/cli/util.cpp b/windows/winfw/src/extras/cli/util.cpp
index 2cd668d060..67ae42e448 100644
--- a/windows/winfw/src/extras/cli/util.cpp
+++ b/windows/winfw/src/extras/cli/util.cpp
@@ -2,6 +2,7 @@
#include "util.h"
#include "inlineformatter.h"
#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <string>
void PrettyPrintProperties(MessageSink messageSink, PrettyPrintOptions options, const PropertyList &properties)
@@ -55,7 +56,7 @@ std::wstring GetArgumentValue(const common::string::KeyValuePairs &arguments, co
ss << L"Missing argument: '" << key << L"'";
- throw std::runtime_error(common::string::ToAnsi(ss.str()));
+ throw std::runtime_error(common::string::ToAnsi(ss.str()).c_str());
}
return arg->second;
diff --git a/windows/winfw/src/winfw/fwcontext.cpp b/windows/winfw/src/winfw/fwcontext.cpp
index 7b7c0d94c2..ed1d204560 100644
--- a/windows/winfw/src/winfw/fwcontext.cpp
+++ b/windows/winfw/src/winfw/fwcontext.cpp
@@ -15,10 +15,10 @@
#include "rules/permitvpntunnel.h"
#include "rules/permitvpntunnelservice.h"
#include "rules/permitping.h"
-#include "libwfp/transaction.h"
-#include "libwfp/filterengine.h"
+#include <libwfp/transaction.h>
+#include <libwfp/filterengine.h>
+#include <libcommon/error.h>
#include <functional>
-#include <stdexcept>
#include <utility>
namespace
@@ -32,7 +32,7 @@ rules::PermitVpnRelay::Protocol TranslateProtocol(WinFwProtocol protocol)
case Udp: return rules::PermitVpnRelay::Protocol::Udp;
default:
{
- throw std::logic_error("Missing case handler in switch clause");
+ THROW_ERROR("Missing case handler in switch clause");
}
};
}
@@ -73,7 +73,7 @@ FwContext::FwContext(uint32_t timeout)
if (false == applyBaseConfiguration())
{
- throw std::runtime_error("Failed to apply base configuration in BFE.");
+ THROW_ERROR("Failed to apply base configuration in BFE");
}
m_baseline = m_sessionController->checkpoint();
@@ -93,7 +93,7 @@ FwContext::FwContext(uint32_t timeout, const WinFwSettings &settings)
if (false == applyBlockedBaseConfiguration(settings, checkpoint))
{
- throw std::runtime_error("Failed to apply base configuration in BFE.");
+ THROW_ERROR("Failed to apply base configuration in BFE");
}
m_baseline = checkpoint;
diff --git a/windows/winfw/src/winfw/rules/permitdhcpserver.cpp b/windows/winfw/src/winfw/rules/permitdhcpserver.cpp
index 6e22b146fa..2c765ecdea 100644
--- a/windows/winfw/src/winfw/rules/permitdhcpserver.cpp
+++ b/windows/winfw/src/winfw/rules/permitdhcpserver.cpp
@@ -7,7 +7,7 @@
#include "libwfp/conditions/conditionprotocol.h"
#include "libwfp/conditions/conditionport.h"
#include "libwfp/conditions/conditionip.h"
-#include <stdexcept>
+#include <libcommon/error.h>
using namespace wfp::conditions;
@@ -27,7 +27,7 @@ std::unique_ptr<PermitDhcpServer> PermitDhcpServer::WithExtent(Extent extent)
{
if (extent != Extent::IPv4Only)
{
- throw std::runtime_error("The only supported mode is IPv4Only");
+ THROW_ERROR("The only supported mode is IPv4Only");
}
return std::unique_ptr<PermitDhcpServer>(new PermitDhcpServer);
diff --git a/windows/winfw/src/winfw/rules/permitvpnrelay.cpp b/windows/winfw/src/winfw/rules/permitvpnrelay.cpp
index 429b2d0e07..2c59c0ab99 100644
--- a/windows/winfw/src/winfw/rules/permitvpnrelay.cpp
+++ b/windows/winfw/src/winfw/rules/permitvpnrelay.cpp
@@ -6,7 +6,7 @@
#include "libwfp/conditions/conditionprotocol.h"
#include "libwfp/conditions/conditionip.h"
#include "libwfp/conditions/conditionport.h"
-#include <stdexcept>
+#include <libcommon/error.h>
using namespace wfp::conditions;
@@ -24,7 +24,7 @@ const GUID &LayerFromIp(const wfp::IpAddress &ip)
case wfp::IpAddress::Type::Ipv6: return FWPM_LAYER_ALE_AUTH_CONNECT_V6;
default:
{
- throw std::logic_error("Missing case handler in switch clause");
+ THROW_ERROR("Missing case handler in switch clause");
}
};
}
@@ -37,7 +37,7 @@ std::unique_ptr<ConditionProtocol> CreateProtocolCondition(PermitVpnRelay::Proto
case PermitVpnRelay::Protocol::Udp: return ConditionProtocol::Udp();
default:
{
- throw std::logic_error("Missing case handler in switch clause");
+ THROW_ERROR("Missing case handler in switch clause");
}
};
}
diff --git a/windows/winfw/src/winfw/sessioncontroller.cpp b/windows/winfw/src/winfw/sessioncontroller.cpp
index f3f948cd44..3d7fcc2e1a 100644
--- a/windows/winfw/src/winfw/sessioncontroller.cpp
+++ b/windows/winfw/src/winfw/sessioncontroller.cpp
@@ -6,8 +6,8 @@
#include "libwfp/objectdeleter.h"
#include "libwfp/transaction.h"
#include "libcommon/memory.h"
+#include <libcommon/error.h>
#include <utility>
-#include <stdexcept>
namespace
{
@@ -63,7 +63,7 @@ void ValidateObject(const wfp::IIdentifiable &object)
if (registry.end() == registry.find(object.id()))
{
- throw std::runtime_error("Attempting to install non-registered WFP object");
+ THROW_ERROR("Attempting to install non-registered WFP object");
}
}
@@ -100,7 +100,7 @@ bool SessionController::addProvider(wfp::ProviderBuilder &providerBuilder)
{
if (false == m_activeTransaction)
{
- throw std::runtime_error("Cannot add provider outside transaction");
+ THROW_ERROR("Cannot add provider outside transaction");
}
ValidateObject(providerBuilder);
@@ -121,7 +121,7 @@ bool SessionController::addSublayer(wfp::SublayerBuilder &sublayerBuilder)
{
if (false == m_activeTransaction)
{
- throw std::runtime_error("Cannot add sublayer outside transaction");
+ THROW_ERROR("Cannot add sublayer outside transaction");
}
ValidateObject(sublayerBuilder);
@@ -142,7 +142,7 @@ bool SessionController::addFilter(wfp::FilterBuilder &filterBuilder, const wfp::
{
if (false == m_activeTransaction)
{
- throw std::runtime_error("Cannot add filter outside transaction");
+ THROW_ERROR("Cannot add filter outside transaction");
}
ValidateObject(filterBuilder);
@@ -163,7 +163,7 @@ bool SessionController::executeTransaction(TransactionFunctor operation)
{
if (m_activeTransaction.exchange(true))
{
- throw std::runtime_error("Recursive/concurrent transactions are not supported");
+ THROW_ERROR("Recursive/concurrent transactions are not supported");
}
common::memory::ScopeDestructor scopeDestructor;
@@ -194,7 +194,7 @@ bool SessionController::executeReadOnlyTransaction(TransactionFunctor operation)
{
if (m_activeTransaction.exchange(true))
{
- throw std::runtime_error("Recursive/concurrent transactions are not supported");
+ THROW_ERROR("Recursive/concurrent transactions are not supported");
}
common::memory::ScopeDestructor scopeDestructor;
@@ -216,7 +216,7 @@ uint32_t SessionController::checkpoint()
{
if (m_activeTransaction)
{
- throw std::runtime_error("Cannot read checkpoint key while in transaction");
+ THROW_ERROR("Cannot read checkpoint key while in transaction");
}
if (m_records.empty())
@@ -241,14 +241,14 @@ void SessionController::revert(uint32_t key)
{
if (false == m_activeTransaction)
{
- throw std::runtime_error("Cannot revert session state outside transaction");
+ THROW_ERROR("Cannot revert session state outside transaction");
}
size_t elementIndex = 0;
if (false == CheckpointKeyToIndex(m_transactionRecords, key, elementIndex))
{
- throw std::runtime_error("Invalid checkpoint key (checkpoint may have been overwritten?)");
+ THROW_ERROR("Invalid checkpoint key (checkpoint may have been overwritten?)");
}
const size_t numRemove = m_transactionRecords.size() - (elementIndex + 1);
@@ -260,7 +260,7 @@ void SessionController::reset()
{
if (false == m_activeTransaction)
{
- throw std::runtime_error("Cannot reset session state outside transaction");
+ THROW_ERROR("Cannot reset session state outside transaction");
}
rewindState(m_transactionRecords.size());
diff --git a/windows/winfw/src/winfw/sessionrecord.cpp b/windows/winfw/src/winfw/sessionrecord.cpp
index f57b06afc1..5410723fd7 100644
--- a/windows/winfw/src/winfw/sessionrecord.cpp
+++ b/windows/winfw/src/winfw/sessionrecord.cpp
@@ -1,9 +1,9 @@
#include "stdafx.h"
#include "sessionrecord.h"
#include "libwfp/objectdeleter.h"
+#include <libcommon/error.h>
#include <atomic>
#include <cstdint>
-#include <stdexcept>
namespace
{
@@ -47,7 +47,7 @@ void SessionRecord::purge(wfp::FilterEngine &engine)
}
default:
{
- throw std::logic_error("Missing case handler in switch clause");
+ THROW_ERROR("Missing case handler in switch clause");
}
};
}
diff --git a/windows/winfw/src/winfw/winfw.cpp b/windows/winfw/src/winfw/winfw.cpp
index 7260de3e8b..bb79c2eff6 100644
--- a/windows/winfw/src/winfw/winfw.cpp
+++ b/windows/winfw/src/winfw/winfw.cpp
@@ -3,7 +3,7 @@
#include "fwcontext.h"
#include "objectpurger.h"
#include <windows.h>
-#include <stdexcept>
+#include <libcommon/error.h>
#include <optional>
namespace
@@ -26,7 +26,7 @@ std::optional<FwContext::PingableHosts> ConvertPingableHosts(const PingableHosts
if (nullptr == pingableHosts->hosts
|| 0 == pingableHosts->numHosts)
{
- throw std::runtime_error("Invalid PingableHosts structure");
+ THROW_ERROR("Invalid PingableHosts structure");
}
FwContext::PingableHosts converted;
diff --git a/windows/winnet/src/winnet/InterfacePair.cpp b/windows/winnet/src/winnet/InterfacePair.cpp
index 3c8af26079..239ea11c53 100644
--- a/windows/winnet/src/winnet/InterfacePair.cpp
+++ b/windows/winnet/src/winnet/InterfacePair.cpp
@@ -1,8 +1,7 @@
#include "stdafx.h"
#include "InterfacePair.h"
-
+#include <libcommon/error.h>
#include <sstream>
-#include <stdexcept>
#ifndef STATUS_NOT_FOUND
#define STATUS_NOT_FOUND 0xC0000225
@@ -18,12 +17,14 @@ InterfacePair::InterfacePair(NET_LUID interface_luid)
IPv6Iface.InterfaceLuid = interface_luid;
InitializeInterface(&IPv6Iface);
- if (!(HasIPv4() || HasIPv6())) {
+ if (!(HasIPv4() || HasIPv6()))
+ {
std::stringstream ss;
- ss << "LUID "
- << interface_luid.Value
+
+ ss << "LUID 0x" << std::hex << interface_luid.Value
<< " does not specify any IPv4 or IPv6 interfaces";
- throw std::runtime_error(ss.str());
+
+ THROW_ERROR(ss.str().c_str());
}
}
@@ -52,17 +53,18 @@ void InterfacePair::SetMetric(int metric)
void InterfacePair::SetInterface(PMIB_IPINTERFACE_ROW iface) {
- DWORD status = SetIpInterfaceEntry(iface);
+ const auto status = SetIpInterfaceEntry(iface);
+
if (status != NO_ERROR)
{
std::stringstream ss;
- ss << "Failed to set metric for "
+
+ ss << "Set metric for "
<< (iface->Family == AF_INET ? "IPv4" : "IPv6")
- << " interface with LUID"
- << iface->InterfaceLuid.Value
- << " with error code "
- << status;
- throw std::runtime_error(ss.str());
+ << " on interface with LUID 0x"
+ << std::hex << iface->InterfaceLuid.Value;
+
+ THROW_WINDOWS_ERROR(status, ss.str().c_str());
}
}
@@ -78,19 +80,24 @@ bool InterfacePair::HasIPv6()
void InterfacePair::InitializeInterface(PMIB_IPINTERFACE_ROW iface)
{
- DWORD status = GetIpInterfaceEntry(iface);
+ const auto status = GetIpInterfaceEntry(iface);
+
+ if (NO_ERROR == status)
+ {
+ return;
+ }
+
+ if (STATUS_NOT_FOUND == status || ERROR_NOT_FOUND == status)
+ {
+ iface->Family = AF_UNSPEC;
+ }
+ else
+ {
+ std::stringstream ss;
+
+ ss << "Retrieve info on network interface with LUID 0x"
+ << std::hex << iface->InterfaceLuid.Value;
- if (status != NO_ERROR) {
- if (status == STATUS_NOT_FOUND || status == ERROR_NOT_FOUND) {
- iface->Family = AF_UNSPEC;
- }
- else {
- std::stringstream ss;
- ss << "Failed to get network interface with LUID "
- << &iface->InterfaceLuid.Value
- << ": "
- << status;
- throw std::runtime_error(ss.str());
- }
+ THROW_WINDOWS_ERROR(status, ss.str().c_str());
}
}
diff --git a/windows/winnet/src/winnet/NetworkInterfaces.cpp b/windows/winnet/src/winnet/NetworkInterfaces.cpp
index 2aa352de27..f364b6b4cd 100644
--- a/windows/winnet/src/winnet/NetworkInterfaces.cpp
+++ b/windows/winnet/src/winnet/NetworkInterfaces.cpp
@@ -1,18 +1,12 @@
#include "stdafx.h"
-
#include "NetworkInterfaces.h"
#include "InterfacePair.h"
-
+#include <libcommon/string.h>
+#include <libcommon/error.h>
#include <memory>
#include <sstream>
-#include <stdexcept>
#include <cstdint>
-#include <libcommon/string.h>
-
-
-
-
bool NetworkInterfaces::HasHighestMetric(PMIB_IPINTERFACE_ROW targetIface)
{
for (unsigned int i = 0; i < mInterfaces->NumEntries; ++i)
@@ -26,14 +20,12 @@ bool NetworkInterfaces::HasHighestMetric(PMIB_IPINTERFACE_ROW targetIface)
return true;
}
-
void NetworkInterfaces::EnsureIfaceMetricIsHighest(NET_LUID interfaceLuid)
{
- PMIB_IPINTERFACE_ROW iface;
- DWORD success = 0;
- for (int i = 0; i < (int)mInterfaces->NumEntries; ++i)
+ for (ULONG i = 0; i < mInterfaces->NumEntries; ++i)
{
- iface = &mInterfaces->Table[i];
+ PMIB_IPINTERFACE_ROW iface = &mInterfaces->Table[i];
+
// Ignoring the target interface.
if (iface->InterfaceLuid.Value == interfaceLuid.Value || iface->UseAutomaticMetric || iface->Metric > MAX_METRIC)
{
@@ -41,34 +33,35 @@ void NetworkInterfaces::EnsureIfaceMetricIsHighest(NET_LUID interfaceLuid)
}
iface->Metric++;
- if (iface->Family == AF_INET) {
+
+ if (AF_INET == iface->Family)
+ {
iface->SitePrefixLength = 0;
}
- success = SetIpInterfaceEntry(iface);
- if (success != NO_ERROR)
+
+ const auto status = SetIpInterfaceEntry(iface);
+
+ if (NO_ERROR != status)
{
std::stringstream ss;
- ss << "Failed to increment metric for interface with LUID "
- << &iface->InterfaceLuid.Value
- << ": "
- << success;
- throw std::runtime_error(ss.str());
- }
+ ss << "Failed to increment metric for interface with LUID 0x"
+ << std::hex << iface->InterfaceLuid.Value;
+
+ THROW_WINDOWS_ERROR(status, ss.str().c_str());
+ }
}
}
NetworkInterfaces::NetworkInterfaces()
{
mInterfaces = nullptr;
- DWORD success = 0;
- success = GetIpInterfaceTable(AF_UNSPEC, &mInterfaces);
- if (success != NO_ERROR)
+ const auto status = GetIpInterfaceTable(AF_UNSPEC, &mInterfaces);
+
+ if (NO_ERROR != status)
{
- std::stringstream ss;
- ss << "Failed to enumerate network interfaces: " << success;
- throw std::runtime_error(ss.str());
+ THROW_WINDOWS_ERROR(status, "Failed to enumerate network interfaces");
}
}
@@ -103,16 +96,12 @@ NET_LUID NetworkInterfaces::GetInterfaceLuid(const std::wstring &interfaceAlias)
const auto status = ConvertInterfaceAliasToLuid(interfaceAlias.c_str(), &interfaceLuid);
- if (status != NO_ERROR)
+ if (NO_ERROR != status)
{
- std::wstringstream ss;
-
- ss << L"Failed to convert interface alias '"
- << interfaceAlias
- << "' into LUID. Error: "
- << status;
+ const auto msg = std::wstring(L"Failed to resolve LUID from interface alias \"")
+ .append(interfaceAlias).append(L"\"");
- throw std::runtime_error(common::string::ToAnsi(ss.str()));
+ THROW_WINDOWS_ERROR(status, common::string::ToAnsi(msg).c_str());
}
return interfaceLuid;
diff --git a/windows/winnet/src/winnet/networkadaptermonitor.cpp b/windows/winnet/src/winnet/networkadaptermonitor.cpp
index 77ce292501..0b27f2bf75 100644
--- a/windows/winnet/src/winnet/networkadaptermonitor.cpp
+++ b/windows/winnet/src/winnet/networkadaptermonitor.cpp
@@ -28,7 +28,10 @@ NetworkAdapterMonitor::NetworkAdapterMonitor(
const auto status = m_dataProvider->getIfTable2(&table);
- THROW_UNLESS(NO_ERROR, status, "Acquire network interface table");
+ if (NO_ERROR != status)
+ {
+ THROW_WINDOWS_ERROR(status, "Acquire network interface table");
+ }
common::memory::ScopeDestructor sd;
@@ -72,7 +75,10 @@ NetworkAdapterMonitor::NetworkAdapterMonitor(
&m_notificationHandle
);
- THROW_UNLESS(NO_ERROR, statusCb, "Register interface change notification");
+ if (NO_ERROR != statusCb)
+ {
+ THROW_WINDOWS_ERROR(statusCb, "Register interface change notification");
+ }
}
NetworkAdapterMonitor::NetworkAdapterMonitor(
@@ -106,8 +112,9 @@ bool NetworkAdapterMonitor::hasIPv4Interface(NET_LUID luid) const
}
else if (ERROR_NOT_FOUND != status)
{
- common::error::Throw("Resolve IPv4 interface", status);
+ THROW_WINDOWS_ERROR(status, "Resolve IPv4 interface");
}
+
return false;
}
@@ -125,8 +132,9 @@ bool NetworkAdapterMonitor::hasIPv6Interface(NET_LUID luid) const
}
else if (ERROR_NOT_FOUND != status)
{
- common::error::Throw("Resolve IPv6 interface", status);
+ THROW_WINDOWS_ERROR(status, "Resolve IPv6 interface");
}
+
return false;
}
@@ -151,10 +159,9 @@ MIB_IF_ROW2 NetworkAdapterMonitor::getAdapter(NET_LUID luid) const
std::stringstream ss;
- ss << "GetIfEntry2() failed for LUID 0x" << std::hex << rowOut.InterfaceLuid.Value
- << " in NetworkAdapterMonitor::getAdapter(), error: 0x" << status;
+ ss << "GetIfEntry2() failed for LUID 0x" << std::hex << rowOut.InterfaceLuid.Value;
- throw std::runtime_error(ss.str());
+ THROW_WINDOWS_ERROR(status, ss.str().c_str());
}
void NetworkAdapterMonitor::callback(const MIB_IPINTERFACE_ROW *hint, MIB_NOTIFICATION_TYPE)
diff --git a/windows/winnet/src/winnet/routing/defaultroutemonitor.cpp b/windows/winnet/src/winnet/routing/defaultroutemonitor.cpp
index 55d7560904..9b063de850 100644
--- a/windows/winnet/src/winnet/routing/defaultroutemonitor.cpp
+++ b/windows/winnet/src/winnet/routing/defaultroutemonitor.cpp
@@ -37,21 +37,20 @@ DefaultRouteMonitor::DefaultRouteMonitor
{
}
- const auto status = NotifyRouteChange2(AF_UNSPEC, RouteChangeCallback, this, FALSE, &m_routeNotificationHandle);
+ auto status = NotifyRouteChange2(AF_UNSPEC, RouteChangeCallback, this, FALSE, &m_routeNotificationHandle);
- THROW_UNLESS(NO_ERROR, status, "Register for route table change notifications");
-
- try
+ if (NO_ERROR != status)
{
- const auto s2 = NotifyIpInterfaceChange(AF_UNSPEC, InterfaceChangeCallback, this,
- FALSE, &m_interfaceNotificationHandle);
-
- THROW_UNLESS(NO_ERROR, status, "Register for network interface change notifications");
+ THROW_WINDOWS_ERROR(status, "Register for route table change notifications");
}
- catch (...)
+
+ status = NotifyIpInterfaceChange(AF_UNSPEC, InterfaceChangeCallback, this,
+ FALSE, &m_interfaceNotificationHandle);
+
+ if (NO_ERROR != status)
{
CancelMibChangeNotify2(m_routeNotificationHandle);
- throw;
+ THROW_WINDOWS_ERROR(status, "Register for network interface change notifications");
}
}
diff --git a/windows/winnet/src/winnet/routing/helpers.cpp b/windows/winnet/src/winnet/routing/helpers.cpp
index cabf19bce6..9b3f5f87b7 100644
--- a/windows/winnet/src/winnet/routing/helpers.cpp
+++ b/windows/winnet/src/winnet/routing/helpers.cpp
@@ -1,6 +1,5 @@
#include "stdafx.h"
#include "helpers.h"
-#include <stdexcept>
#include <ws2def.h>
#include <in6addr.h>
#include <numeric>
@@ -40,7 +39,7 @@ bool EqualAddress(const NodeAddress &lhs, const NodeAddress &rhs)
}
default:
{
- throw std::runtime_error("Invalid address family for network address");
+ THROW_ERROR("Invalid address family for network address");
}
}
}
@@ -66,7 +65,7 @@ bool EqualAddress(const SOCKADDR_INET *lhs, const SOCKET_ADDRESS *rhs)
}
default:
{
- throw std::runtime_error("Missing case handler in switch clause");
+ THROW_ERROR("Missing case handler in switch clause");
}
}
}
@@ -132,7 +131,10 @@ InterfaceAndGateway GetBestDefaultRoute(ADDRESS_FAMILY family)
auto status = GetIpForwardTable2(family, &table);
- THROW_UNLESS(NO_ERROR, status, "Acquire route table");
+ if (NO_ERROR != status)
+ {
+ THROW_WINDOWS_ERROR(status, "Acquire route table");
+ }
common::memory::ScopeDestructor sd;
@@ -163,7 +165,7 @@ InterfaceAndGateway GetBestDefaultRoute(ADDRESS_FAMILY family)
if (annotated.empty())
{
- throw std::runtime_error("Unable to determine details of default route");
+ THROW_ERROR("Unable to determine details of default route");
}
//
@@ -186,7 +188,7 @@ InterfaceAndGateway GetBestDefaultRoute(ADDRESS_FAMILY family)
if (false == annotated[0].active)
{
- throw std::runtime_error("Unable to identify active default route");
+ THROW_ERROR("Unable to identify active default route");
}
return InterfaceAndGateway { annotated[0].route->InterfaceLuid, annotated[0].route->NextHop };
@@ -206,7 +208,7 @@ bool AdapterInterfaceEnabled(const IP_ADAPTER_ADDRESSES *adapter, ADDRESS_FAMILY
}
default:
{
- throw std::runtime_error("Missing case handler in switch clause");
+ THROW_ERROR("Missing case handler in switch clause");
}
}
}
@@ -243,33 +245,4 @@ bool AddressPresent(const std::vector<const SOCKET_ADDRESS *> &hay, const SOCKAD
return false;
}
-//NodeAddress ConvertSocketAddress(const SOCKET_ADDRESS *sa)
-//{
-// NodeAddress out = { 0 };
-//
-// switch (sa->lpSockaddr->sa_family)
-// {
-// case AF_INET:
-// {
-// out.si_family = AF_INET;
-// out.Ipv4 = *reinterpret_cast<SOCKADDR_IN *>(sa->lpSockaddr);
-//
-// break;
-// }
-// case AF_INET6:
-// {
-// out.si_family = AF_INET6;
-// out.Ipv6 = *reinterpret_cast<SOCKADDR_IN6 *>(sa->lpSockaddr);
-//
-// break;
-// }
-// default:
-// {
-// throw std::runtime_error("Missing case handler in switch clause");
-// }
-// };
-//
-// return out;
-//}
-
}
diff --git a/windows/winnet/src/winnet/routing/routemanager.cpp b/windows/winnet/src/winnet/routing/routemanager.cpp
index 668e64bb68..166dbf8dcf 100644
--- a/windows/winnet/src/winnet/routing/routemanager.cpp
+++ b/windows/winnet/src/winnet/routing/routemanager.cpp
@@ -9,7 +9,6 @@
#include <algorithm>
#include <numeric>
#include <sstream>
-#include <stdexcept>
using AutoLockType = std::scoped_lock<std::mutex>;
using AutoRecursiveLockType = std::scoped_lock<std::recursive_mutex>;
@@ -53,7 +52,7 @@ NET_LUID InterfaceLuidFromGateway(const NodeAddress &gateway)
if (matches.empty())
{
- throw std::runtime_error("Unable to find network adapter with specified gateway");
+ THROW_ERROR("Unable to find network adapter with specified gateway");
}
//
@@ -104,10 +103,10 @@ bool ParseStringEncodedLuid(const std::wstring &encodedLuid, NET_LUID &luid)
}
catch (...)
{
- const auto ansi = common::string::ToAnsi(encodedLuid);
- const auto err = std::string("Failed to parse string encoded LUID: ").append(ansi);
+ const auto msg = std::string("Failed to parse string encoded LUID: ")
+ .append(common::string::ToAnsi(encodedLuid));
- std::throw_with_nested(std::runtime_error(err));
+ THROW_ERROR(msg.c_str());
}
return true;
@@ -139,10 +138,10 @@ InterfaceAndGateway ResolveNode(ADDRESS_FAMILY family, const std::optional<Node>
if (false == ParseStringEncodedLuid(deviceName, luid)
&& 0 != ConvertInterfaceAliasToLuid(deviceName.c_str(), &luid))
{
- const auto ansiName = common::string::ToAnsi(deviceName);
- const auto err = std::string("Unable to derive interface LUID from interface alias: ").append(ansiName);
+ const auto msg = std::string("Unable to derive interface LUID from interface alias: ")
+ .append(common::string::ToAnsi(deviceName));
- throw std::runtime_error(err);
+ THROW_ERROR(msg.c_str());
}
auto onLinkProvider = [&family]()
@@ -271,7 +270,7 @@ void RouteManager::addRoutes(const std::vector<Route> &routes)
{
undoEvents(eventLog);
- std::throw_with_nested(std::runtime_error("Failed during batch insertion of routes"));
+ THROW_ERROR("Failed during batch insertion of routes");
}
}
}
@@ -292,7 +291,7 @@ void RouteManager::addRoute(const Route &route)
}
catch (...)
{
- std::throw_with_nested(std::runtime_error("Failed to evict old route when adding new route"));
+ THROW_ERROR("Failed to evict old route when adding new route");
}
deletedRecord = *record;
@@ -366,7 +365,7 @@ void RouteManager::deleteRoutes(const std::vector<Route> &routes)
{
undoEvents(eventLog);
- std::throw_with_nested(std::runtime_error("Failed during batch removal of routes"));
+ THROW_ERROR("Failed during batch removal of routes");
}
}
}
@@ -449,7 +448,12 @@ RouteManager::RegisteredRoute RouteManager::addIntoRoutingTable(const Route &rou
// Because it may not take route metric into consideration.
//
- THROW_UNLESS(NO_ERROR, CreateIpForwardEntry2(&spec), "Register route in routing table");
+ const auto status = CreateIpForwardEntry2(&spec);
+
+ if (NO_ERROR != status)
+ {
+ THROW_WINDOWS_ERROR(status, "Register route in routing table");
+ }
return RegisteredRoute { route.network(), node.iface, node.gateway };
}
@@ -467,7 +471,12 @@ void RouteManager::restoreIntoRoutingTable(const RegisteredRoute &route)
spec.Protocol = MIB_IPPROTO_NETMGMT;
spec.Origin = NlroManual;
- THROW_UNLESS(NO_ERROR, CreateIpForwardEntry2(&spec), "Register route in routing table");
+ const auto status = CreateIpForwardEntry2(&spec);
+
+ if (NO_ERROR != status)
+ {
+ THROW_WINDOWS_ERROR(status, "Register route in routing table");
+ }
}
void RouteManager::deleteFromRoutingTable(const RegisteredRoute &route)
@@ -490,7 +499,10 @@ void RouteManager::deleteFromRoutingTable(const RegisteredRoute &route)
m_logSink->warning(common::string::ToAnsi(err).c_str());
}
- THROW_UNLESS(NO_ERROR, status, "Delete route in routing table");
+ if (NO_ERROR != status)
+ {
+ THROW_WINDOWS_ERROR(status, "Delete route in routing table");
+ }
}
void RouteManager::undoEvents(const std::vector<EventEntry> &eventLog)
@@ -511,7 +523,7 @@ void RouteManager::undoEvents(const std::vector<EventEntry> &eventLog)
if (m_routes.end() == record)
{
- throw std::runtime_error("Internal state inconsistency in route manager");
+ THROW_ERROR("Internal state inconsistency in route manager");
}
deleteFromRoutingTable(record->registeredRoute);
@@ -528,7 +540,7 @@ void RouteManager::undoEvents(const std::vector<EventEntry> &eventLog)
}
default:
{
- throw std::logic_error("Missing case handler in switch clause");
+ THROW_ERROR("Missing case handler in switch clause");
}
}
}
diff --git a/windows/winnet/src/winnet/routing/types.cpp b/windows/winnet/src/winnet/routing/types.cpp
index ac71c8108f..5168f96634 100644
--- a/windows/winnet/src/winnet/routing/types.cpp
+++ b/windows/winnet/src/winnet/routing/types.cpp
@@ -2,6 +2,7 @@
#include "types.h"
#include "helpers.h"
#include <libcommon/string.h>
+#include <libcommon/error.h>
namespace winnet::routing
{
@@ -12,16 +13,16 @@ Node::Node(const std::optional<std::wstring> &deviceName, const std::optional<No
{
if (false == m_deviceName.has_value() && false == m_gateway.has_value())
{
- throw std::runtime_error("Invalid node definition");
+ THROW_ERROR("Invalid node definition");
}
if (m_deviceName.has_value())
{
- const auto trimmed = common::string::Trim<>(m_deviceName.value());
+ auto trimmed = common::string::Trim<>(m_deviceName.value());
if (trimmed.empty())
{
- throw std::runtime_error("Invalid device name in node definition");
+ THROW_ERROR("Invalid device name in node definition");
}
m_deviceName = std::move(trimmed);
diff --git a/windows/winnet/src/winnet/winnet.cpp b/windows/winnet/src/winnet/winnet.cpp
index 55bfca5b39..79ba77a229 100644
--- a/windows/winnet/src/winnet/winnet.cpp
+++ b/windows/winnet/src/winnet/winnet.cpp
@@ -10,7 +10,6 @@
#include <libcommon/valuemapper.h>
#include <libcommon/network.h>
#include <cstdint>
-#include <stdexcept>
#include <memory>
#include <optional>
#include <mutex>
@@ -59,7 +58,7 @@ Network ConvertNetwork(const WINNET_IPNETWORK &in)
}
default:
{
- throw std::runtime_error("Missing case handler in switch clause");
+ THROW_ERROR("Missing case handler in switch clause");
}
}
@@ -75,7 +74,7 @@ std::optional<Node> ConvertNode(const WINNET_NODE *in)
if (nullptr == in->deviceName && nullptr == in->gateway)
{
- throw std::runtime_error("Invalid 'WINNET_NODE' definition");
+ THROW_ERROR("Invalid 'WINNET_NODE' definition");
}
std::optional<std::wstring> deviceName;
@@ -108,7 +107,7 @@ std::optional<Node> ConvertNode(const WINNET_NODE *in)
}
default:
{
- throw std::logic_error("Invalid gateway type specifier in 'WINNET_NODE' definition");
+ THROW_ERROR("Invalid gateway type specifier in 'WINNET_NODE' definition");
}
}
@@ -169,7 +168,7 @@ std::vector<SOCKADDR_INET> ConvertAddresses(const WINNET_IP *addresses, uint32_t
}
default:
{
- throw std::logic_error("Invalid address family in 'WINNET_IP' definition");
+ THROW_ERROR("Invalid address family in 'WINNET_IP' definition");
}
}
@@ -236,7 +235,7 @@ WinNet_GetTapInterfaceIpv6Status(
return WINNET_GTII_STATUS_DISABLED;
}
- common::error::Throw("Resolve TAP IPv6 interface", status);
+ THROW_WINDOWS_ERROR(status, "Resolve TAP IPv6 interface");
}
catch (const std::exception &err)
{
@@ -313,7 +312,7 @@ WinNet_ActivateConnectivityMonitor(
{
if (nullptr != g_OfflineMonitor)
{
- throw std::runtime_error("Cannot activate connectivity monitor twice");
+ THROW_ERROR("Cannot activate connectivity monitor twice");
}
auto forwarder = [callback, callbackContext](bool connected)
@@ -370,7 +369,7 @@ WinNet_ActivateRouteManager(
{
if (nullptr != g_RouteManager)
{
- throw std::runtime_error("Cannot activate route manager twice");
+ THROW_ERROR("Cannot activate route manager twice");
}
g_RouteManagerLogSink = std::make_shared<shared::logging::LogSinkAdapter>(logSink, logSinkContext);
@@ -671,10 +670,10 @@ WinNet_AddDeviceIpAddresses(
if (0 != ConvertInterfaceAliasToLuid(deviceAlias, &luid))
{
- const auto ansiName = common::string::ToAnsi(deviceAlias);
- const auto err = std::string("Unable to derive interface LUID from interface alias: ").append(ansiName);
+ const auto msg = std::string("Unable to derive interface LUID from interface alias: ")
+ .append(common::string::ToAnsi(deviceAlias));
- throw std::runtime_error(err);
+ THROW_ERROR(msg.c_str());
}
InterfaceUtils::AddDeviceIpAddresses(luid, ConvertAddresses(addresses, numAddresses));
diff --git a/windows/winutil/src/winutil/migration.cpp b/windows/winutil/src/winutil/migration.cpp
index ee9bc8ade0..a5feb6a8b4 100644
--- a/windows/winutil/src/winutil/migration.cpp
+++ b/windows/winutil/src/winutil/migration.cpp
@@ -1,8 +1,8 @@
#include "stdafx.h"
#include "migration.h"
#include <libcommon/filesystem.h>
+#include <libcommon/error.h>
#include <filesystem>
-#include <stdexcept>
namespace migration {
@@ -52,7 +52,7 @@ MigrationStatus MigrateAfterWindowsUpdate()
continue;
}
- throw std::runtime_error("Could not acquire security descriptor of backup directory");
+ THROW_ERROR("Could not acquire security descriptor of backup directory");
}
break;
@@ -64,13 +64,13 @@ MigrationStatus MigrateAfterWindowsUpdate()
if (FALSE == GetSecurityDescriptorOwner(reinterpret_cast<SECURITY_DESCRIPTOR *>(&buffer[0]),
reinterpret_cast<PSID *>(&sid), &ownerDefaulted))
{
- throw std::runtime_error("Could not determine owner of backup directory");
+ THROW_ERROR("Could not determine owner of backup directory");
}
if (FALSE == IsWellKnownSid(sid, WinLocalSystemSid)
&& FALSE == IsWellKnownSid(sid, WinBuiltinAdministratorsSid))
{
- throw std::runtime_error("Backup directory is not owned by SYSTEM or Built-in Administrators");
+ THROW_ERROR("Backup directory is not owned by SYSTEM or Built-in Administrators");
}
//
@@ -80,7 +80,7 @@ MigrationStatus MigrateAfterWindowsUpdate()
if (false == std::filesystem::exists(mullvadAppData)
&& false == std::filesystem::create_directory(mullvadAppData))
{
- throw std::runtime_error("Could not create destination directory during migration");
+ THROW_ERROR("Could not create destination directory during migration");
}
//
@@ -123,7 +123,7 @@ MigrationStatus MigrateAfterWindowsUpdate()
if (false == copyStatus)
{
- throw std::runtime_error("Failed to copy files during migration");
+ THROW_ERROR("Failed to copy files during migration");
}
return MigrationStatus::Success;