summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOdd Stranne <odd@mullvad.net>2019-12-03 10:07:20 +0100
committerOdd Stranne <odd@mullvad.net>2019-12-04 13:07:57 +0100
commit877f34593b857e3f1d81d9acce003e2ededbda1d (patch)
tree6b0f78b1c6e9b0b0dc437434a37bd8fd8af969e6
parent80ce050ad2eee528ded8d5c1d2211534fe7485ae (diff)
downloadmullvadvpn-877f34593b857e3f1d81d9acce003e2ededbda1d.tar.xz
mullvadvpn-877f34593b857e3f1d81d9acce003e2ededbda1d.zip
Update shared logging in C++
-rw-r--r--windows/libshared/libshared.sln (renamed from windows/shared/shared.sln)2
-rw-r--r--windows/libshared/src/libshared/libshared.vcxproj (renamed from windows/shared/src/shared/shared.vcxproj)13
-rw-r--r--windows/libshared/src/libshared/libshared.vcxproj.filters45
-rw-r--r--windows/libshared/src/libshared/logging/logsink.h (renamed from windows/shared/src/shared/logsink.h)15
-rw-r--r--windows/libshared/src/libshared/logging/logsinkadapter.cpp49
-rw-r--r--windows/libshared/src/libshared/logging/logsinkadapter.h24
-rw-r--r--windows/libshared/src/libshared/logging/stdoutlogger.cpp33
-rw-r--r--windows/libshared/src/libshared/logging/stdoutlogger.h10
-rw-r--r--windows/libshared/src/libshared/logging/unwind.cpp21
-rw-r--r--windows/libshared/src/libshared/logging/unwind.h11
-rw-r--r--windows/libshared/src/libshared/network/interfaceutils.cpp (renamed from windows/shared/src/shared/network/interfaceutils.cpp)0
-rw-r--r--windows/libshared/src/libshared/network/interfaceutils.h (renamed from windows/shared/src/shared/network/interfaceutils.h)0
-rw-r--r--windows/libshared/src/libshared/stdafx.cpp (renamed from windows/shared/src/shared/stdafx.cpp)0
-rw-r--r--windows/libshared/src/libshared/stdafx.h (renamed from windows/shared/src/shared/stdafx.h)0
-rw-r--r--windows/libshared/src/libshared/targetver.h (renamed from windows/shared/src/shared/targetver.h)0
-rw-r--r--windows/shared/src/shared/logsinkadapter.h52
-rw-r--r--windows/shared/src/shared/shared.vcxproj.filters23
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