diff options
| author | Odd Stranne <odd@mullvad.net> | 2020-01-28 14:34:10 +0100 |
|---|---|---|
| committer | Odd Stranne <odd@mullvad.net> | 2020-01-28 14:34:10 +0100 |
| commit | e13e04f5104557d8722666fc599502e9c336bdcc (patch) | |
| tree | 02696149b415b628c4291274e8a4fe22b12f9dd4 /windows | |
| parent | c48e088f5cd7bf101db33e117d8ea7acf86c9580 (diff) | |
| parent | 5ba8f62fb81f13f7ffa9b816ba33cbb814ce1417 (diff) | |
| download | mullvadvpn-e13e04f5104557d8722666fc599502e9c336bdcc.tar.xz mullvadvpn-e13e04f5104557d8722666fc599502e9c336bdcc.zip | |
Merge branch 'less-macro-magic'
Diffstat (limited to 'windows')
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 ®key, 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 ®key, 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; |
