diff options
| author | Odd Stranne <odd@mullvad.net> | 2019-12-03 10:07:20 +0100 |
|---|---|---|
| committer | Odd Stranne <odd@mullvad.net> | 2019-12-04 13:07:57 +0100 |
| commit | 877f34593b857e3f1d81d9acce003e2ededbda1d (patch) | |
| tree | 6b0f78b1c6e9b0b0dc437434a37bd8fd8af969e6 | |
| parent | 80ce050ad2eee528ded8d5c1d2211534fe7485ae (diff) | |
| download | mullvadvpn-877f34593b857e3f1d81d9acce003e2ededbda1d.tar.xz mullvadvpn-877f34593b857e3f1d81d9acce003e2ededbda1d.zip | |
Update shared logging in C++
17 files changed, 211 insertions, 87 deletions
diff --git a/windows/shared/shared.sln b/windows/libshared/libshared.sln index d664af8399..3a2f41e952 100644 --- a/windows/shared/shared.sln +++ b/windows/libshared/libshared.sln @@ -2,7 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29324.140 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shared", "src\shared\shared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshared", "src\libshared\libshared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" ProjectSection(ProjectDependencies) = postProject {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} EndProjectSection diff --git a/windows/shared/src/shared/shared.vcxproj b/windows/libshared/src/libshared/libshared.vcxproj index a5dc7cf4f2..88a2ac5140 100644 --- a/windows/shared/src/shared/shared.vcxproj +++ b/windows/libshared/src/libshared/libshared.vcxproj @@ -22,9 +22,9 @@ <VCProjectVersion>16.0</VCProjectVersion> <ProjectGuid>{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>shared</RootNamespace> + <RootNamespace>libshared</RootNamespace> <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> - <ProjectName>shared</ProjectName> + <ProjectName>libshared</ProjectName> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> @@ -176,14 +176,19 @@ </Link> </ItemDefinitionGroup> <ItemGroup> - <ClInclude Include="logsink.h" /> - <ClInclude Include="ilogsink.h" /> <ClInclude Include="network\interfaceutils.h" /> + <ClInclude Include="logging\logsink.h" /> + <ClInclude Include="logging\logsinkadapter.h" /> + <ClInclude Include="logging\stdoutlogger.h" /> + <ClInclude Include="logging\unwind.h" /> <ClInclude Include="stdafx.h" /> <ClInclude Include="targetver.h" /> </ItemGroup> <ItemGroup> <ClCompile Include="network\interfaceutils.cpp" /> + <ClCompile Include="logging\logsinkadapter.cpp" /> + <ClCompile Include="logging\stdoutlogger.cpp" /> + <ClCompile Include="logging\unwind.cpp" /> <ClCompile Include="stdafx.cpp"> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> diff --git a/windows/libshared/src/libshared/libshared.vcxproj.filters b/windows/libshared/src/libshared/libshared.vcxproj.filters new file mode 100644 index 0000000000..ef4f0330d2 --- /dev/null +++ b/windows/libshared/src/libshared/libshared.vcxproj.filters @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <ClInclude Include="stdafx.h" /> + <ClInclude Include="targetver.h" /> + <ClInclude Include="logging\logsink.h"> + <Filter>logging</Filter> + </ClInclude> + <ClInclude Include="logging\logsinkadapter.h"> + <Filter>logging</Filter> + </ClInclude> + <ClInclude Include="logging\stdoutlogger.h"> + <Filter>logging</Filter> + </ClInclude> + <ClInclude Include="logging\unwind.h"> + <Filter>logging</Filter> + </ClInclude> + <ClInclude Include="network\interfaceutils.h"> + <Filter>network</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="stdafx.cpp" /> + <ClCompile Include="logging\logsinkadapter.cpp"> + <Filter>logging</Filter> + </ClCompile> + <ClCompile Include="logging\stdoutlogger.cpp"> + <Filter>logging</Filter> + </ClCompile> + <ClCompile Include="logging\unwind.cpp"> + <Filter>logging</Filter> + </ClCompile> + <ClCompile Include="network\interfaceutils.cpp"> + <Filter>network</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <Filter Include="logging"> + <UniqueIdentifier>{8d3be7e9-117c-44d3-a799-0bc6e2712776}</UniqueIdentifier> + </Filter> + <Filter Include="network"> + <UniqueIdentifier>{c36884fc-7afc-42a8-b852-c0aafcfcc1c2}</UniqueIdentifier> + </Filter> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/windows/shared/src/shared/logsink.h b/windows/libshared/src/libshared/logging/logsink.h index 16a84d4def..e24c69ac32 100644 --- a/windows/shared/src/shared/logsink.h +++ b/windows/libshared/src/libshared/logging/logsink.h @@ -5,12 +5,13 @@ // It should always be C-compatible. // -enum MULLVAD_LOG_SINK_SEVERITY +enum MULLVAD_LOG_LEVEL { - MULLVAD_LOG_SINK_SEVERITY_ERROR = 0, - MULLVAD_LOG_SINK_SEVERITY_WARNING, - MULLVAD_LOG_SINK_SEVERITY_INFO, - MULLVAD_LOG_SINK_SEVERITY_TRACE + MULLVAD_LOG_LEVEL_ERROR = 0, + MULLVAD_LOG_LEVEL_WARNING, + MULLVAD_LOG_LEVEL_INFO, + MULLVAD_LOG_LEVEL_DEBUG, + MULLVAD_LOG_LEVEL_TRACE }; // @@ -19,8 +20,8 @@ enum MULLVAD_LOG_SINK_SEVERITY // // The parameters are: // -// `MULLVAD_LOG_SINK_SEVERITY` - Severity of the message. +// `MULLVAD_LOG_LEVEL` - Severity of the message. // `const char *` - The message itself. // `void *` - The sink context that was registered along with the sink. // -typedef void (__stdcall *MullvadLogSink)(MULLVAD_LOG_SINK_SEVERITY, const char *, void *); +typedef void (__stdcall *MullvadLogSink)(MULLVAD_LOG_LEVEL, const char *, void *); diff --git a/windows/libshared/src/libshared/logging/logsinkadapter.cpp b/windows/libshared/src/libshared/logging/logsinkadapter.cpp new file mode 100644 index 0000000000..f506aba096 --- /dev/null +++ b/windows/libshared/src/libshared/logging/logsinkadapter.cpp @@ -0,0 +1,49 @@ +#include "stdafx.h" +#include "logsinkadapter.h" + +namespace shared::logging +{ + +LogSinkAdapter::LogSinkAdapter(MullvadLogSink target, void *context) + : LogSink(MakeAdapter(target, context)) +{ +} + +//static +common::logging::LogTarget LogSinkAdapter::MakeAdapter(MullvadLogSink target, void *context) +{ + return [target, context](common::logging::LogLevel level, const char* msg) + { + if (nullptr == target) + { + return; + } + + // + // TODO: Replace manual mapping with ValueMapper once the updated + // ValueMapper reaches libcommon. + // + + const MULLVAD_LOG_LEVEL translatedLevel = [level]() + { + switch (level) + { + case common::logging::LogLevel::Warning: + return MULLVAD_LOG_LEVEL_WARNING; + case common::logging::LogLevel::Info: + return MULLVAD_LOG_LEVEL_INFO; + case common::logging::LogLevel::Trace: + return MULLVAD_LOG_LEVEL_TRACE; + case common::logging::LogLevel::Debug: + return MULLVAD_LOG_LEVEL_DEBUG; + case common::logging::LogLevel::Error: + default: + return MULLVAD_LOG_LEVEL_ERROR; + } + }(); + + target(translatedLevel, msg, context); + }; +} + +} diff --git a/windows/libshared/src/libshared/logging/logsinkadapter.h b/windows/libshared/src/libshared/logging/logsinkadapter.h new file mode 100644 index 0000000000..d077e29b4f --- /dev/null +++ b/windows/libshared/src/libshared/logging/logsinkadapter.h @@ -0,0 +1,24 @@ +#pragma once + +#include "logsink.h" +#include <libcommon/logging/logsink.h> + +namespace shared::logging +{ + +// +// Adapt common::logging::LogSink C++ world to +// MullvadLogSink C world. +// +class LogSinkAdapter : public common::logging::LogSink +{ +public: + + LogSinkAdapter(MullvadLogSink target, void *context); + +private: + + static common::logging::LogTarget MakeAdapter(MullvadLogSink target, void *context); +}; + +} diff --git a/windows/libshared/src/libshared/logging/stdoutlogger.cpp b/windows/libshared/src/libshared/logging/stdoutlogger.cpp new file mode 100644 index 0000000000..6a72009950 --- /dev/null +++ b/windows/libshared/src/libshared/logging/stdoutlogger.cpp @@ -0,0 +1,33 @@ +#include "stdafx.h" +#include "stdoutlogger.h" +#include <iostream> + +namespace shared::logging +{ + +void __stdcall StdoutLogger(MULLVAD_LOG_LEVEL level, const char *msg, void*) +{ + switch (level) + { + case MULLVAD_LOG_LEVEL_WARNING: + std::cout << "Warning: "; + break; + case MULLVAD_LOG_LEVEL_INFO: + std::cout << "Info: "; + break; + case MULLVAD_LOG_LEVEL_DEBUG: + std::cout << "Debug: "; + break; + case MULLVAD_LOG_LEVEL_TRACE: + std::cout << "Trace: "; + break; + case MULLVAD_LOG_LEVEL_ERROR: + default: + std::cout << "Error: "; + break; + } + + std::cout << msg << std::endl; +} + +} diff --git a/windows/libshared/src/libshared/logging/stdoutlogger.h b/windows/libshared/src/libshared/logging/stdoutlogger.h new file mode 100644 index 0000000000..d6cee1b58b --- /dev/null +++ b/windows/libshared/src/libshared/logging/stdoutlogger.h @@ -0,0 +1,10 @@ +#pragma once + +#include "logsink.h" + +namespace shared::logging +{ + +void __stdcall StdoutLogger(MULLVAD_LOG_LEVEL level, const char *msg, void *context); + +} diff --git a/windows/libshared/src/libshared/logging/unwind.cpp b/windows/libshared/src/libshared/logging/unwind.cpp new file mode 100644 index 0000000000..206ea81ce2 --- /dev/null +++ b/windows/libshared/src/libshared/logging/unwind.cpp @@ -0,0 +1,21 @@ +#include "stdafx.h" +#include "unwind.h" +#include "logsinkadapter.h" +#include <libcommon/error.h> + +namespace shared::logging +{ + +void UnwindAndLog(MullvadLogSink logSink, void *logSinkContext, const std::exception &err) +{ + if (nullptr == logSink) + { + return; + } + + auto logger = std::make_shared<LogSinkAdapter>(logSink, logSinkContext); + + common::error::UnwindException(err, logger); +} + +} diff --git a/windows/libshared/src/libshared/logging/unwind.h b/windows/libshared/src/libshared/logging/unwind.h new file mode 100644 index 0000000000..ab3c6c519d --- /dev/null +++ b/windows/libshared/src/libshared/logging/unwind.h @@ -0,0 +1,11 @@ +#pragma once + +#include "logsink.h" +#include <stdexcept> + +namespace shared::logging +{ + +void UnwindAndLog(MullvadLogSink logSink, void *logSinkContext, const std::exception &err); + +} diff --git a/windows/shared/src/shared/network/interfaceutils.cpp b/windows/libshared/src/libshared/network/interfaceutils.cpp index 6d56ec82d2..6d56ec82d2 100644 --- a/windows/shared/src/shared/network/interfaceutils.cpp +++ b/windows/libshared/src/libshared/network/interfaceutils.cpp diff --git a/windows/shared/src/shared/network/interfaceutils.h b/windows/libshared/src/libshared/network/interfaceutils.h index 85a243d591..85a243d591 100644 --- a/windows/shared/src/shared/network/interfaceutils.h +++ b/windows/libshared/src/libshared/network/interfaceutils.h diff --git a/windows/shared/src/shared/stdafx.cpp b/windows/libshared/src/libshared/stdafx.cpp index c418cf5096..c418cf5096 100644 --- a/windows/shared/src/shared/stdafx.cpp +++ b/windows/libshared/src/libshared/stdafx.cpp diff --git a/windows/shared/src/shared/stdafx.h b/windows/libshared/src/libshared/stdafx.h index 59e4616a97..59e4616a97 100644 --- a/windows/shared/src/shared/stdafx.h +++ b/windows/libshared/src/libshared/stdafx.h diff --git a/windows/shared/src/shared/targetver.h b/windows/libshared/src/libshared/targetver.h index ae4a5c032c..ae4a5c032c 100644 --- a/windows/shared/src/shared/targetver.h +++ b/windows/libshared/src/libshared/targetver.h diff --git a/windows/shared/src/shared/logsinkadapter.h b/windows/shared/src/shared/logsinkadapter.h deleted file mode 100644 index cbeca9e148..0000000000 --- a/windows/shared/src/shared/logsinkadapter.h +++ /dev/null @@ -1,52 +0,0 @@ -#include "logsink.h" -#include <libcommon/logging/logsink.h> - -namespace shared -{ - -// -// Adapt common::logging::LogSink C++ world to -// MullvadLogSink C world. -// -class LogSinkAdapter : public common::logging::LogSink -{ -public: - - LogSinkAdapter(MullvadLogSink target, void *context) - : LogSink(MakeAdapter(target, context)) - { - } - -private: - - static common::logging::LogTarget MakeAdapter(MullvadLogSink target, void *context) - { - return [target, context](common::logging::Severity s, const char *msg) - { - if (nullptr == target) - { - return; - } - - const MULLVAD_LOG_SINK_SEVERITY severity = [s]() - { - switch (s) - { - case common::logging::Severity::Warning: - return MULLVAD_LOG_SINK_SEVERITY_WARNING; - case common::logging::Severity::Info: - return MULLVAD_LOG_SINK_SEVERITY_INFO; - case common::logging::Severity::Trace: - return MULLVAD_LOG_SINK_SEVERITY_TRACE; - case common::logging::Severity::Error: - default: - return MULLVAD_LOG_SINK_SEVERITY_ERROR; - } - }(); - - target(severity, msg, context); - }; - } -}; - -} diff --git a/windows/shared/src/shared/shared.vcxproj.filters b/windows/shared/src/shared/shared.vcxproj.filters deleted file mode 100644 index 61b48a6937..0000000000 --- a/windows/shared/src/shared/shared.vcxproj.filters +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <ClInclude Include="ilogsink.h" /> - <ClInclude Include="logsink.h" /> - <ClInclude Include="stdafx.h" /> - <ClInclude Include="targetver.h" /> - <ClInclude Include="network\interfaceutils.h"> - <Filter>network</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <ClCompile Include="stdafx.cpp" /> - <ClCompile Include="network\interfaceutils.cpp"> - <Filter>network</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <Filter Include="network"> - <UniqueIdentifier>{c36884fc-7afc-42a8-b852-c0aafcfcc1c2}</UniqueIdentifier> - </Filter> - </ItemGroup> -</Project>
\ No newline at end of file |
