diff options
69 files changed, 702 insertions, 945 deletions
diff --git a/.gitignore b/.gitignore index f742669159..7730d8900a 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ /dist-assets/sslocal /dist-assets/sslocal.exe /windows/**/bin/ +/windows/**/*.user /android/keystore.properties /android/local.properties **/.vs/ diff --git a/mullvad-daemon/src/settings.rs b/mullvad-daemon/src/settings.rs index 6aeee0223c..d61eb1c204 100644 --- a/mullvad-daemon/src/settings.rs +++ b/mullvad-daemon/src/settings.rs @@ -12,10 +12,7 @@ pub use mullvad_types::settings::*; use std::io::ErrorKind; #[cfg(windows)] -use std::{ - os::raw::{c_char, c_void}, - ptr, -}; +use talpid_core::logging::windows::log_sink; pub fn load() -> Settings { match Settings::load() { @@ -50,7 +47,9 @@ pub fn load() -> Settings { #[cfg(windows)] fn migrate_after_windows_update() -> bool { - match unsafe { ffi::WinUtil_MigrateAfterWindowsUpdate(Some(log_sink), ptr::null_mut()) } { + match unsafe { + ffi::WinUtil_MigrateAfterWindowsUpdate(Some(log_sink), b"Settings migrator\0".as_ptr()) + } { ffi::WinUtilMigrationStatus::Success => { info!("Migration completed successfully"); true @@ -71,18 +70,8 @@ fn migrate_after_windows_update() -> bool { } #[cfg(windows)] -extern "system" fn log_sink(msg: *const c_char, _ctx: *mut c_void) { - use std::ffi::CStr; - if msg.is_null() { - error!("Log message from FFI boundary is NULL"); - } else { - error!("{}", unsafe { CStr::from_ptr(msg).to_string_lossy() }); - } -} - -#[cfg(windows)] mod ffi { - use super::*; + use talpid_core::logging::windows::LogSink; #[allow(dead_code)] #[repr(u32)] @@ -94,14 +83,12 @@ mod ffi { Dummy = 9001, } - type ErrorSink = extern "system" fn(msg: *const c_char, ctx: *mut c_void); - #[allow(non_snake_case)] extern "system" { #[link_name = "WinUtil_MigrateAfterWindowsUpdate"] pub fn WinUtil_MigrateAfterWindowsUpdate( - sink: Option<ErrorSink>, - sink_context: *mut c_void, + sink: Option<LogSink>, + sink_context: *const u8, ) -> WinUtilMigrationStatus; } } diff --git a/talpid-core/src/dns/windows/mod.rs b/talpid-core/src/dns/windows/mod.rs index beaaba2ee9..3cb3fdf47e 100644 --- a/talpid-core/src/dns/windows/mod.rs +++ b/talpid-core/src/dns/windows/mod.rs @@ -1,11 +1,7 @@ -use log::{error, info, trace}; -use std::{ - borrow::Borrow, - net::IpAddr, - os::raw::{c_char, c_void}, - path::Path, - ptr, slice, -}; +use crate::logging::windows::{log_sink, LogSink}; + +use log::{error, trace}; +use std::{net::IpAddr, path::Path}; use widestring::WideCString; mod system_state; @@ -36,7 +32,7 @@ impl super::DnsMonitorT for DnsMonitor { type Error = Error; fn new(cache_dir: impl AsRef<Path>) -> Result<Self, Error> { - unsafe { WinDns_Initialize(Some(log_sink), ptr::null_mut()).into_result()? }; + unsafe { WinDns_Initialize(Some(log_sink), b"WinDns\0".as_ptr()).into_result()? }; let backup_writer = SystemStateWriter::new( cache_dir @@ -93,45 +89,6 @@ fn ip_to_widestring(ip: &IpAddr) -> WideCString { WideCString::new(ip.to_string().encode_utf16().collect::<Vec<_>>()).unwrap() } -// typedef void (WINDNS_API *WinDnsErrorSink)(const char *errorMessage, const char **details, -// uint32_t numDetails, void *context); -extern "system" fn log_sink( - log_level: u8, - msg: *const c_char, - detail_ptr: *const *const c_char, - n_details: u32, - _ctx: *mut c_void, -) { - use std::ffi::CStr; - if msg.is_null() { - error!("Log message from FFI boundary is NULL"); - } else { - if detail_ptr.is_null() || n_details == 0 { - error!("{}", unsafe { CStr::from_ptr(msg).to_string_lossy() }); - } else { - let raw_details = unsafe { slice::from_raw_parts(detail_ptr, n_details as usize) }; - let mut appendix = String::new(); - for detail_ptr in raw_details { - appendix - .push_str(unsafe { CStr::from_ptr(*detail_ptr).to_string_lossy().borrow() }); - appendix.push_str("\n"); - } - - let message = format!( - "{}: {}", - unsafe { CStr::from_ptr(msg).to_string_lossy() }, - appendix - ); - - match log_level { - 0x01 => error!("{}", message), - 0x02 => info!("{}", message), - _ => error!("Unknwon log level - {}", message), - } - } - } -} - impl Drop for DnsMonitor { fn drop(&mut self) { if unsafe { WinDns_Deinitialize().into_result().is_ok() } { @@ -148,23 +105,13 @@ ffi_error!(DeinitializationResult, Error::Deinitialization); ffi_error!(SettingResult, Error::Setting); -// This callback can be called from multiple threads concurrently, thus if there ever is a real -// context object passed around, it should probably implement Sync. -type ErrorSink = extern "system" fn( - log_level: u8, - msg: *const c_char, - details: *const *const c_char, - num_details: u32, - ctx: *mut c_void, -); - #[allow(non_snake_case)] extern "stdcall" { #[link_name = "WinDns_Initialize"] pub fn WinDns_Initialize( - sink: Option<ErrorSink>, - sink_context: *mut c_void, + sink: Option<LogSink>, + sink_context: *const u8, ) -> InitializationResult; // WinDns_Deinitialize: diff --git a/talpid-core/src/firewall/windows.rs b/talpid-core/src/firewall/windows.rs index bee16fee3a..38e388ecbf 100644 --- a/talpid-core/src/firewall/windows.rs +++ b/talpid-core/src/firewall/windows.rs @@ -1,4 +1,5 @@ -use libc::{c_char, c_void}; +use crate::logging::windows::log_sink; + use std::{net::IpAddr, ptr}; use self::winfw::*; @@ -46,33 +47,25 @@ const WINFW_TIMEOUT_SECONDS: u32 = 2; /// The Windows implementation for the firewall and DNS. pub struct Firewall(()); -extern "system" fn error_sink(msg: *const c_char, _ctx: *mut c_void) { - use std::ffi::CStr; - if msg.is_null() { - log::error!("Log message from FFI boundary is NULL"); - } else { - log::error!("{}", unsafe { CStr::from_ptr(msg).to_string_lossy() }); - } -} - impl FirewallT for Firewall { type Error = Error; fn new(args: FirewallArguments) -> Result<Self, Self::Error> { + let logging_context = b"WinFw\0".as_ptr(); if args.initialize_blocked { let cfg = &WinFwSettings::new(args.allow_lan.unwrap()); unsafe { WinFw_InitializeBlocked( WINFW_TIMEOUT_SECONDS, &cfg, - Some(error_sink), - ptr::null_mut(), + Some(log_sink), + logging_context, ) .into_result()? }; } else { unsafe { - WinFw_Initialize(WINFW_TIMEOUT_SECONDS, Some(error_sink), ptr::null_mut()) + WinFw_Initialize(WINFW_TIMEOUT_SECONDS, Some(log_sink), logging_context) .into_result()? }; } @@ -237,12 +230,10 @@ impl Firewall { #[allow(non_snake_case)] mod winfw { use super::Error; + use crate::logging::windows::LogSink; use libc; use talpid_types::net::TransportProtocol; - /// logging callback type for use with `winfw.dll`. - pub type ErrorSink = extern "system" fn(msg: *const libc::c_char, ctx: *mut libc::c_void); - #[repr(C)] pub struct WinFwRelay { pub ip: *const libc::wchar_t, @@ -300,16 +291,16 @@ mod winfw { #[link_name = "WinFw_Initialize"] pub fn WinFw_Initialize( timeout: libc::c_uint, - sink: Option<ErrorSink>, - sink_context: *mut libc::c_void, + sink: Option<LogSink>, + sink_context: *const u8, ) -> InitializationResult; #[link_name = "WinFw_InitializeBlocked"] pub fn WinFw_InitializeBlocked( timeout: libc::c_uint, settings: &WinFwSettings, - sink: Option<ErrorSink>, - sink_context: *mut libc::c_void, + sink: Option<LogSink>, + sink_context: *const u8, ) -> InitializationResult; #[link_name = "WinFw_Deinitialize"] diff --git a/talpid-core/src/logging.rs b/talpid-core/src/logging/mod.rs index 3251a39799..41791fe668 100644 --- a/talpid-core/src/logging.rs +++ b/talpid-core/src/logging/mod.rs @@ -1,5 +1,9 @@ use std::{fs, io, path::Path}; +/// Types/implementations for logging through a callback. +#[cfg(windows)] +pub mod windows; + /// Unable to create new log file #[derive(err_derive::Error, Debug)] #[error(display = "Unable to create new log file")] diff --git a/talpid-core/src/logging/windows.rs b/talpid-core/src/logging/windows.rs new file mode 100644 index 0000000000..97d6a47b0d --- /dev/null +++ b/talpid-core/src/logging/windows.rs @@ -0,0 +1,30 @@ +use libc::{c_char, c_void}; +use std::ffi::CStr; + +/// Logging callback type. +pub type LogSink = extern "system" fn(level: log::Level, msg: *const c_char, context: *mut c_void); + + +/// Logging callback implementation. +pub extern "system" fn log_sink(level: log::Level, msg: *const c_char, context: *mut c_void) { + if msg.is_null() { + log::error!("Log message from FFI boundary is NULL"); + } else { + let rust_log_level = log::Level::from(level); + let target = if context.is_null() { + "UNKNOWN".into() + } else { + unsafe { CStr::from_ptr(context as *const _).to_string_lossy() } + }; + + let managed_msg = unsafe { CStr::from_ptr(msg).to_string_lossy() }; + + log::logger().log( + &log::Record::builder() + .level(rust_log_level) + .target(&target) + .args(format_args!("{}", managed_msg)) + .build(), + ); + } +} diff --git a/talpid-core/src/offline/windows.rs b/talpid-core/src/offline/windows.rs index 8bb13c98e3..adcd14ce10 100644 --- a/talpid-core/src/offline/windows.rs +++ b/talpid-core/src/offline/windows.rs @@ -6,7 +6,7 @@ //! GNU General Public License as published by the Free Software Foundation, either version 3 of //! the License, or (at your option) any later version. -use crate::{tunnel_state_machine::TunnelCommand, winnet}; +use crate::{logging::windows::log_sink, tunnel_state_machine::TunnelCommand, winnet}; use futures::sync::mpsc::UnboundedSender; use parking_lot::Mutex; use std::{ @@ -197,8 +197,8 @@ impl BroadcastListener { if !winnet::WinNet_ActivateConnectivityMonitor( Some(Self::connectivity_callback), callback_context, - Some(winnet::log_sink), - ptr::null_mut(), + Some(log_sink), + b"Connectivity monitor\0".as_ptr(), ) { return Err(Error::ConnectivityMonitorError); } diff --git a/talpid-core/src/winnet.rs b/talpid-core/src/winnet.rs index 231aacf08a..24e30fabeb 100644 --- a/talpid-core/src/winnet.rs +++ b/talpid-core/src/winnet.rs @@ -1,15 +1,9 @@ use self::api::*; -pub use self::api::{ - LogSink, WinNet_ActivateConnectivityMonitor, WinNet_DeactivateConnectivityMonitor, -}; -use crate::routing::Node; +pub use self::api::{WinNet_ActivateConnectivityMonitor, WinNet_DeactivateConnectivityMonitor}; +use crate::{logging::windows::log_sink, routing::Node}; use ipnetwork::IpNetwork; -use libc::{c_char, c_void, wchar_t}; -use std::{ - ffi::{CStr, OsString}, - net::IpAddr, - ptr, -}; +use libc::{c_void, wchar_t}; +use std::{ffi::OsString, net::IpAddr, ptr}; use widestring::WideCString; /// Errors that this module may produce. @@ -36,28 +30,8 @@ pub enum Error { ConnectivityUnkown, } -#[allow(dead_code)] -#[repr(u8)] -pub enum LogSeverity { - Error = 0, - Warning, - Info, - Trace, -} - -/// Logging callback used with `winnet.dll`. -pub extern "system" fn log_sink(severity: LogSeverity, msg: *const c_char, _ctx: *mut c_void) { - if msg.is_null() { - log::error!("Log message from FFI boundary is NULL"); - } else { - let managed_msg = unsafe { CStr::from_ptr(msg).to_string_lossy() }; - match severity { - LogSeverity::Warning => log::warn!("{}", managed_msg), - LogSeverity::Info => log::info!("{}", managed_msg), - LogSeverity::Trace => log::trace!("{}", managed_msg), - _ => log::error!("{}", managed_msg), - } - } +fn logging_context() -> *const u8 { + b"WinNet\0".as_ptr() } /// Returns true if metrics were changed, false otherwise @@ -66,7 +40,11 @@ pub fn ensure_top_metric_for_interface(interface_alias: &str) -> Result<bool, Er WideCString::from_str(interface_alias).map_err(Error::InvalidInterfaceAlias)?; let metric_result = unsafe { - WinNet_EnsureTopMetric(interface_alias_ws.as_ptr(), Some(log_sink), ptr::null_mut()) + WinNet_EnsureTopMetric( + interface_alias_ws.as_ptr(), + Some(log_sink), + logging_context(), + ) }; match metric_result { @@ -87,7 +65,7 @@ pub fn ensure_top_metric_for_interface(interface_alias: &str) -> Result<bool, Er /// Checks if IPv6 is enabled for the TAP interface pub fn get_tap_interface_ipv6_status() -> Result<bool, Error> { let tap_ipv6_status = - unsafe { WinNet_GetTapInterfaceIpv6Status(Some(log_sink), ptr::null_mut()) }; + unsafe { WinNet_GetTapInterfaceIpv6Status(Some(log_sink), logging_context()) }; match tap_ipv6_status { // Enabled @@ -111,7 +89,7 @@ pub fn get_tap_interface_ipv6_status() -> Result<bool, Error> { pub fn get_tap_interface_alias() -> Result<OsString, Error> { let mut alias_ptr: *mut wchar_t = ptr::null_mut(); let status = unsafe { - WinNet_GetTapInterfaceAlias(&mut alias_ptr as *mut _, Some(log_sink), ptr::null_mut()) + WinNet_GetTapInterfaceAlias(&mut alias_ptr as *mut _, Some(log_sink), logging_context()) }; if !status { @@ -286,7 +264,7 @@ impl Drop for WinNetRoute { } pub fn activate_routing_manager(routes: &[WinNetRoute]) -> bool { - return unsafe { WinNet_ActivateRouteManager(Some(log_sink), ptr::null_mut()) } + return unsafe { WinNet_ActivateRouteManager(Some(log_sink), logging_context()) } && routing_manager_add_routes(routes); } @@ -375,26 +353,22 @@ pub fn add_device_ip_addresses(iface: &String, addresses: &Vec<IpAddr>) -> bool let converted_addresses: Vec<_> = addresses.iter().map(|addr| WinNetIp::from(*addr)).collect(); let ptr = converted_addresses.as_ptr(); let length: u32 = converted_addresses.len() as u32; - unsafe { WinNet_AddDeviceIpAddresses(raw_iface, ptr, length, Some(log_sink), ptr::null_mut()) } + unsafe { + WinNet_AddDeviceIpAddresses(raw_iface, ptr, length, Some(log_sink), logging_context()) + } } #[allow(non_snake_case)] mod api { - use super::{DefaultRouteChangedCallback, LogSeverity}; - use libc::{c_char, c_void, wchar_t}; - - /// logging callback type for use with `winnet.dll`. - pub type LogSink = - extern "system" fn(severity: LogSeverity, msg: *const c_char, ctx: *mut c_void); + use super::DefaultRouteChangedCallback; + use crate::logging::windows::LogSink; + use libc::{c_void, wchar_t}; pub type ConnectivityCallback = unsafe extern "system" fn(is_connected: bool, ctx: *mut c_void); extern "system" { #[link_name = "WinNet_ActivateRouteManager"] - pub fn WinNet_ActivateRouteManager( - sink: Option<LogSink>, - sink_context: *mut c_void, - ) -> bool; + pub fn WinNet_ActivateRouteManager(sink: Option<LogSink>, sink_context: *const u8) -> bool; #[link_name = "WinNet_AddRoutes"] pub fn WinNet_AddRoutes(routes: *const super::WinNetRoute, num_routes: u32) -> bool; @@ -415,20 +389,20 @@ mod api { pub fn WinNet_EnsureTopMetric( tunnel_interface_alias: *const wchar_t, sink: Option<LogSink>, - sink_context: *mut c_void, + sink_context: *const u8, ) -> u32; #[link_name = "WinNet_GetTapInterfaceIpv6Status"] pub fn WinNet_GetTapInterfaceIpv6Status( sink: Option<LogSink>, - sink_context: *mut c_void, + sink_context: *const u8, ) -> u32; #[link_name = "WinNet_GetTapInterfaceAlias"] pub fn WinNet_GetTapInterfaceAlias( tunnel_interface_alias: *mut *mut wchar_t, sink: Option<LogSink>, - sink_context: *mut c_void, + sink_context: *const u8, ) -> bool; #[link_name = "WinNet_ReleaseString"] @@ -439,7 +413,7 @@ mod api { callback: Option<ConnectivityCallback>, callbackContext: *mut libc::c_void, sink: Option<LogSink>, - sink_context: *mut c_void, + sink_context: *const u8, ) -> bool; #[link_name = "WinNet_RegisterDefaultRouteChangedCallback"] @@ -461,7 +435,7 @@ mod api { addresses: *const super::WinNetIp, num_addresses: u32, sink: Option<LogSink>, - sink_context: *mut c_void, + sink_context: *const u8, ) -> bool; } } 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..b942664af1 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 = 1, + 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 diff --git a/windows/windns/extras.sln b/windows/windns/extras.sln index 51448f0506..b65334eea0 100644 --- a/windows/windns/extras.sln +++ b/windows/windns/extras.sln @@ -6,15 +6,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "loader", "src\extras\loader ProjectSection(ProjectDependencies) = postProject {A5344205-FC37-4572-9C63-8564ECC410AC} = {A5344205-FC37-4572-9C63-8564ECC410AC} {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} = {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "windns", "src\windns\windns.vcxproj", "{A5344205-FC37-4572-9C63-8564ECC410AC}" ProjectSection(ProjectDependencies) = postProject {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} = {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcommon", "..\windows-libraries\src\libcommon\libcommon.vcxproj", "{B52E2D10-A94A-4605-914A-2DCEF6A757EF}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshared", "..\libshared\src\libshared\libshared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" + ProjectSection(ProjectDependencies) = postProject + {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -47,6 +54,14 @@ Global {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x64.Build.0 = Release|x64 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.ActiveCfg = Release|Win32 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.Build.0 = Release|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x64.ActiveCfg = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x64.Build.0 = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x86.ActiveCfg = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x86.Build.0 = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x64.ActiveCfg = Release|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x64.Build.0 = Release|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x86.ActiveCfg = Release|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/windows/windns/src/extras/loader/loader.cpp b/windows/windns/src/extras/loader/loader.cpp index b20b4336b0..d4e118e3a0 100644 --- a/windows/windns/src/extras/loader/loader.cpp +++ b/windows/windns/src/extras/loader/loader.cpp @@ -1,37 +1,18 @@ #include "stdafx.h" #include "windns/windns.h" -#include "libcommon/trace/trace.h" -#include "libcommon/trace/consoletracesink.h" +#include <libshared/logging/stdoutlogger.h> +#include <libcommon/trace/trace.h> +#include <libcommon/trace/consoletracesink.h> #include <iostream> #include <conio.h> #include <vector> #include <windows.h> -void WINDNS_API LogSink(WinDnsLogCategory category, const char *message, const char **details, - uint32_t numDetails, void *context) -{ - if (WINDNS_LOG_CATEGORY_ERROR == category) - { - std::cout << "WINDNS Error: "; - } - else - { - std::cout << "WINDNS Info: "; - } - - std::cout << message << std::endl; - - for (uint32_t i = 0; i < numDetails; ++i) - { - std::cout << " " << details[i] << std::endl; - } -} - int main() { common::trace::Trace::RegisterSink(new common::trace::ConsoleTraceSink); - std::wcout << L"WinDns_Initialize: " << std::boolalpha << WinDns_Initialize(LogSink, nullptr) << std::endl; + std::wcout << L"WinDns_Initialize: " << std::boolalpha << WinDns_Initialize(shared::logging::StdoutLogger, nullptr) << std::endl; const wchar_t *servers[] = { diff --git a/windows/windns/src/extras/loader/loader.vcxproj b/windows/windns/src/extras/loader/loader.vcxproj index 96f4178bba..43780ba0fd 100644 --- a/windows/windns/src/extras/loader/loader.vcxproj +++ b/windows/windns/src/extras/loader/loader.vcxproj @@ -93,12 +93,12 @@ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> + <WarningLevel>Level4</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../../libshared/src/;$(ProjectDir)../../;$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile> @@ -106,18 +106,18 @@ <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>windns.lib;libcommon.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>libshared.lib;windns.lib;libcommon.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> + <WarningLevel>Level4</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../../libshared/src/;$(ProjectDir)../../;$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile> @@ -125,20 +125,20 @@ <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>windns.lib;libcommon.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>libshared.lib;windns.lib;libcommon.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> + <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../../libshared/src/;$(ProjectDir)../../;$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> @@ -148,20 +148,20 @@ <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>windns.lib;libcommon.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>libshared.lib;windns.lib;libcommon.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> + <WarningLevel>Level4</WarningLevel> <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../../libshared/src/;$(ProjectDir)../../;$(ProjectDir)../../../../windows-libraries/src/</AdditionalIncludeDirectories> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> </ClCompile> @@ -171,7 +171,7 @@ <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>windns.lib;libcommon.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>libshared.lib;windns.lib;libcommon.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> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/windows/windns/src/windns/confineoperation.cpp b/windows/windns/src/windns/confineoperation.cpp index a43bbd0d2e..5097986c0f 100644 --- a/windows/windns/src/windns/confineoperation.cpp +++ b/windows/windns/src/windns/confineoperation.cpp @@ -5,7 +5,7 @@ bool ConfineOperation ( const char *literalOperation, - std::function<void(const char *, const char **, uint32_t)> errorCallback, + std::shared_ptr<common::logging::ILogSink> logSink, std::function<void()> operation ) { @@ -14,29 +14,11 @@ bool ConfineOperation operation(); return true; } - catch (NetShError &err) - { - auto raw = CreateRawStringArray(err.details()); - - const char **details = reinterpret_cast<const char **>(&raw[0]); - uint32_t numDetails = static_cast<uint32_t>(err.details().size()); - - if (0 == numDetails) - { - details = nullptr; - } - - const auto what = std::string(literalOperation).append(": ").append(err.what()); - - errorCallback(what.c_str(), details, numDetails); - - return false; - } - catch (std::exception &err) + catch (const std::exception &err) { const auto what = std::string(literalOperation).append(": ").append(err.what()); - errorCallback(what.c_str(), nullptr, 0); + logSink->error(what.c_str()); return false; } @@ -44,73 +26,8 @@ bool ConfineOperation { const auto what = std::string(literalOperation).append(": Unspecified failure"); - errorCallback(what.c_str(), nullptr, 0); + logSink->error(what.c_str()); return false; } } - -bool ConfineOperation -( - const char *literalOperation, - ILogSink *logSink, - std::function<void()> operation -) -{ - auto ForwardError = [logSink](const char *error, const char **details, uint32_t numDetails) - { - if (nullptr != logSink) - { - logSink->error(error, details, numDetails); - } - }; - - return ConfineOperation(literalOperation, ForwardError, operation); -} - -std::vector<uint8_t> CreateRawStringArray(const std::vector<std::string> &arr) -{ - // - // Return a buffer containing a nullptr if there are no items in the array. - // This enables clients of this function to address the pointer table. - // - - if (arr.empty()) - { - return std::vector<uint8_t>(sizeof(char *), 0); - } - - // - // Determine total size needed. - // - - size_t bufferSize = 0; - - for (const auto &str : arr) - { - bufferSize += sizeof(char *); - bufferSize += (str.size() + 1); - } - - // - // Copy strings and populate pointer table. - // - - std::vector<uint8_t> buffer(bufferSize, 0); - - char **pointerTable = reinterpret_cast<char**>(&buffer[0]); - char *data = reinterpret_cast<char*>(&buffer[0] + (sizeof(char*) * arr.size())); - - for (const auto &str : arr) - { - const auto fullStringSize = str.size() + 1; - - *pointerTable = data; - memcpy(data, str.c_str(), fullStringSize); - - ++pointerTable; - data += fullStringSize; - } - - return buffer; -} diff --git a/windows/windns/src/windns/confineoperation.h b/windows/windns/src/windns/confineoperation.h index 4c37058da2..56aa48a929 100644 --- a/windows/windns/src/windns/confineoperation.h +++ b/windows/windns/src/windns/confineoperation.h @@ -1,6 +1,6 @@ #pragma once -#include "ilogsink.h" +#include <libcommon/logging/ilogsink.h> #include <functional> #include <vector> #include <string> @@ -9,25 +9,6 @@ bool ConfineOperation ( const char *literalOperation, - std::function<void(const char *, const char **, uint32_t)> errorCallback, + std::shared_ptr<common::logging::ILogSink> logSink, std::function<void()> operation ); - -bool ConfineOperation -( - const char *literalOperation, - ILogSink *logSink, - std::function<void()> operation -); - -// -// The returned buffer looks like this: -// -// string pointer 1 -// string pointer 2 -// string pointer n -// string 1 -// string 2 -// string n -// -std::vector<uint8_t> CreateRawStringArray(const std::vector<std::string> &arr); diff --git a/windows/windns/src/windns/ilogsink.h b/windows/windns/src/windns/ilogsink.h deleted file mode 100644 index 0d39b172b2..0000000000 --- a/windows/windns/src/windns/ilogsink.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#include "windns.h" -#include <cstdint> - -struct LogSinkInfo -{ - WinDnsLogSink sink; - void* context; -}; - -struct ILogSink -{ - virtual ~ILogSink() = 0 - { - } - - virtual void error(const char *msg, const char **details, uint32_t numDetails) = 0; - - virtual void error(const char *msg) - { - error(msg, nullptr, 0); - } - - virtual void info(const char *msg, const char **details, uint32_t numDetails) = 0; - - virtual void info(const char *msg) - { - info(msg, nullptr, 0); - } -}; diff --git a/windows/windns/src/windns/logsink.cpp b/windows/windns/src/windns/logsink.cpp deleted file mode 100644 index b5f127d25c..0000000000 --- a/windows/windns/src/windns/logsink.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "stdafx.h" -#include "logsink.h" - -LogSink::LogSink(const LogSinkInfo &target) - : m_target(target) -{ -} - -void LogSink::setTarget(const LogSinkInfo &target) -{ - std::scoped_lock<std::mutex> lock(m_targetMutex); - - m_target = target; -} - -void LogSink::error(const char *msg, const char **details, uint32_t numDetails) -{ - std::scoped_lock<std::mutex> lock(m_targetMutex); - - if (nullptr != m_target.sink) - { - m_target.sink(WINDNS_LOG_CATEGORY_ERROR, msg, details, numDetails, m_target.context); - } -} - -void LogSink::info(const char *msg, const char **details, uint32_t numDetails) -{ - std::scoped_lock<std::mutex> lock(m_targetMutex); - - if (nullptr != m_target.sink) - { - m_target.sink(WINDNS_LOG_CATEGORY_INFO, msg, details, numDetails, m_target.context); - } -} diff --git a/windows/windns/src/windns/logsink.h b/windows/windns/src/windns/logsink.h deleted file mode 100644 index 236c8e3242..0000000000 --- a/windows/windns/src/windns/logsink.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "ilogsink.h" -#include <mutex> - -class LogSink : public ILogSink -{ -public: - - LogSink(const LogSinkInfo &target); - - void setTarget(const LogSinkInfo &target); - - void error(const char *msg, const char **details, uint32_t numDetails) override; - void info(const char *msg, const char **details, uint32_t numDetails) override; - -private: - - std::mutex m_targetMutex; - LogSinkInfo m_target; -}; diff --git a/windows/windns/src/windns/netsh.cpp b/windows/windns/src/windns/netsh.cpp index 8e1df6a44e..d8354e4e0b 100644 --- a/windows/windns/src/windns/netsh.cpp +++ b/windows/windns/src/windns/netsh.cpp @@ -11,34 +11,9 @@ namespace { -std::vector<std::string> BlockToRows(const std::string &textBlock) -{ - // - // TODO: Formalize and move to libcommon. - // There is a recurring need to split a text block into lines, ignoring blank lines. - // - // Also, changing the encoding back and forth is terribly wasteful. - // Should look into replacing all of this with Boost some day. - // - - const auto wideTextBlock = common::string::ToWide(textBlock); - const auto wideRows = common::string::Tokenize(wideTextBlock, L"\r\n"); - - std::vector<std::string> result; - - result.reserve(wideRows.size()); - - std::transform(wideRows.begin(), wideRows.end(), std::back_inserter(result), [](const std::wstring &str) - { - return common::string::ToAnsi(str); - }); - - return result; -} - __declspec(noreturn) void ThrowWithDetails(std::string &&error, common::ApplicationRunner &netsh) { - std::vector<std::string> details { "Failed to capture output from 'netsh'" }; + std::string details("Failed to capture output from 'netsh'"); std::string output; @@ -47,20 +22,17 @@ __declspec(noreturn) void ThrowWithDetails(std::string &&error, common::Applicat if (netsh.read(output, MAX_CHARS, TIMEOUT_MILLISECONDS)) { - auto outputRows = BlockToRows(output); - - if (false == outputRows.empty()) - { - details = std::move(outputRows); - } + details = std::move(output); } - throw NetShError(std::move(error), std::move(details)); + const auto msg = std::string(error).append(": ").append(details); + + throw std::runtime_error(msg.c_str()); } } // anonymous namespace -NetSh::NetSh(std::shared_ptr<ILogSink> logSink) +NetSh::NetSh(std::shared_ptr<common::logging::ILogSink> logSink) : m_logSink(logSink) { const auto system32 = common::fs::GetKnownFolderPath(FOLDERID_System, 0, nullptr); @@ -243,6 +215,6 @@ void NetSh::validateShellOut(common::ApplicationRunner &netsh, uint32_t timeout) << elapsed << " ms of " << actualTimeout << " ms max permitted execution time"; - m_logSink->info(ss.str().c_str(), nullptr, 0); + m_logSink->info(ss.str().c_str()); } } diff --git a/windows/windns/src/windns/netsh.h b/windows/windns/src/windns/netsh.h index d80c55529c..3b0b2b0251 100644 --- a/windows/windns/src/windns/netsh.h +++ b/windows/windns/src/windns/netsh.h @@ -1,6 +1,6 @@ #pragma once -#include "ilogsink.h" +#include <libcommon/logging/ilogsink.h> #include <libcommon/applicationrunner.h> #include <string> #include <vector> @@ -12,7 +12,7 @@ class NetSh { public: - NetSh(std::shared_ptr<ILogSink> logSink); + NetSh(std::shared_ptr<common::logging::ILogSink> logSink); void setIpv4StaticDns(uint32_t interfaceIndex, const std::vector<std::wstring> &nameServers, uint32_t timeout = 0); @@ -26,30 +26,8 @@ public: private: - std::shared_ptr<ILogSink> m_logSink; + std::shared_ptr<common::logging::ILogSink> m_logSink; std::wstring m_netShPath; void validateShellOut(common::ApplicationRunner &netsh, uint32_t timeout); }; - -class NetShError : public std::exception -{ -public: - - NetShError(std::string &&error, std::vector<std::string> &&details) - : std::exception(error.c_str()) - , m_error(std::move(error)) - , m_details(std::move(details)) - { - } - - const std::vector<std::string> &details() - { - return m_details; - } - -private: - - const std::string m_error; - const std::vector<std::string> m_details; -}; diff --git a/windows/windns/src/windns/windns.cpp b/windows/windns/src/windns/windns.cpp index 1ea10f0f08..c0d36e8ad2 100644 --- a/windows/windns/src/windns/windns.cpp +++ b/windows/windns/src/windns/windns.cpp @@ -1,11 +1,12 @@ #include "stdafx.h" #include <libcommon/guid.h> #include <libcommon/string.h> -#include <shared/network/interfaceutils.h> +#include <libshared/network/interfaceutils.h> +#include <libcommon/logging/ilogsink.h> +#include <libshared/logging/logsinkadapter.h> #include "windns.h" #include "confineoperation.h" #include "netsh.h" -#include "logsink.h" #include <memory> #include <vector> #include <string> @@ -28,7 +29,7 @@ bool operator==(const IN6_ADDR &lhs, const IN6_ADDR &rhs) namespace { -std::shared_ptr<LogSink> g_LogSink; +std::shared_ptr<common::logging::ILogSink> g_LogSink; std::shared_ptr<NetSh> g_NetSh; std::vector<std::wstring> MakeStringArray(const wchar_t **strings, uint32_t numStrings) @@ -43,14 +44,6 @@ std::vector<std::wstring> MakeStringArray(const wchar_t **strings, uint32_t numS return v; } -void ForwardError(const char *message, const char **details, uint32_t numDetails) -{ - if (nullptr != g_LogSink) - { - g_LogSink->error(message, details, numDetails); - } -} - uint32_t ConvertInterfaceAliasToIndex(const std::wstring &interfaceAlias) { NET_LUID luid; @@ -184,8 +177,8 @@ WINDNS_LINKAGE bool WINDNS_API WinDns_Initialize( - WinDnsLogSink logSink, - void *logContext + MullvadLogSink logSink, + void *logSinkContext ) { if (g_LogSink) @@ -193,9 +186,9 @@ WinDns_Initialize( return false; } - return ConfineOperation("Initialize", ForwardError, [&]() + try { - g_LogSink = std::make_shared<LogSink>(LogSinkInfo{ logSink, logContext }); + g_LogSink = std::make_shared<shared::logging::LogSinkAdapter>(logSink, logSinkContext); try { @@ -206,7 +199,29 @@ WinDns_Initialize( g_LogSink.reset(); throw; } - }); + + return true; + } + catch (const std::exception &err) + { + if (nullptr != logSink) + { + const auto msg = std::string("Failed to initialize WinDns: ").append(err.what()); + logSink(MULLVAD_LOG_LEVEL_ERROR, msg.c_str(), logSinkContext); + } + + return false; + } + catch (...) + { + if (nullptr != logSink) + { + const std::string msg("Failed to initialize WinDns: Unspecified error"); + logSink(MULLVAD_LOG_LEVEL_ERROR, msg.c_str(), logSinkContext); + } + + return false; + } } WINDNS_LINKAGE @@ -232,53 +247,61 @@ WinDns_Set( uint32_t numIpv6Servers ) { - return ConfineOperation("Apply DNS settings", ForwardError, [&]() + if (nullptr == g_LogSink) { - // - // Check the settings on the adapter. - // If it already has the exact same settings we need, we're done. - // - - try - { - const auto activeSettings = GetAdapterDnsAddresses(interfaceAlias); - const auto wantedSetting = ConvertAddresses(ipv4Servers, numIpv4Servers, ipv6Servers, numIpv6Servers); - - if (Equal(activeSettings, wantedSetting)) - { - std::stringstream ss; + return false; + } - ss << "DNS settings on adapter with alias \"" << common::string::ToAnsi(interfaceAlias) - << "\" are up-to-date"; + // + // Check the settings on the adapter. + // If it already has the exact same settings we need, we're done. + // - g_LogSink->info(ss.str().c_str(), nullptr, 0); + try + { + const auto activeSettings = GetAdapterDnsAddresses(interfaceAlias); + const auto wantedSetting = ConvertAddresses(ipv4Servers, numIpv4Servers, ipv6Servers, numIpv6Servers); - return; - } - } - catch (const std::exception &ex) + if (Equal(activeSettings, wantedSetting)) { std::stringstream ss; - ss << "Failed to evaluate DNS settings on adapter with alias \"" - << common::string::ToAnsi(interfaceAlias) << "\": " << ex.what(); + ss << "DNS settings on adapter with alias \"" << common::string::ToAnsi(interfaceAlias) + << "\" are up-to-date"; + + g_LogSink->info(ss.str().c_str()); - g_LogSink->info(ss.str().c_str(), nullptr, 0); + return true; } - catch (...) - { - std::stringstream ss; + } + catch (const std::exception & ex) + { + std::stringstream ss; - ss << "Failed to evaluate DNS settings on adapter with alias \"" - << common::string::ToAnsi(interfaceAlias) << "\": Unspecified failure"; + ss << "Failed to evaluate DNS settings on adapter with alias \"" + << common::string::ToAnsi(interfaceAlias) << "\": " << ex.what(); - g_LogSink->info(ss.str().c_str(), nullptr, 0); - } + g_LogSink->info(ss.str().c_str()); + } + catch (...) + { + std::stringstream ss; - // - // Onwards - // + ss << "Failed to evaluate DNS settings on adapter with alias \"" + << common::string::ToAnsi(interfaceAlias) << "\": Unspecified failure"; + g_LogSink->info(ss.str().c_str()); + } + + // + // Apply specified settings. + // + + const auto operation = std::string("Apply DNS settings on adapter with alias \"") + .append(common::string::ToAnsi(interfaceAlias)).append("\""); + + return ConfineOperation(operation.c_str(), g_LogSink, [&]() + { const auto interfaceIndex = ConvertInterfaceAliasToIndex(interfaceAlias); if (nullptr != ipv4Servers && 0 != numIpv4Servers) diff --git a/windows/windns/src/windns/windns.h b/windows/windns/src/windns/windns.h index 2ecd046f5b..dee2993681 100644 --- a/windows/windns/src/windns/windns.h +++ b/windows/windns/src/windns/windns.h @@ -1,5 +1,7 @@ #pragma once -#include <cstdint> + +#include <libshared/logging/logsink.h> +#include <stdint.h> // // WINDNS public API @@ -17,15 +19,6 @@ // Functions /////////////////////////////////////////////////////////////////////////////// -enum WinDnsLogCategory -{ - WINDNS_LOG_CATEGORY_ERROR = 0x01, - WINDNS_LOG_CATEGORY_INFO = 0x02 -}; - -typedef void (WINDNS_API *WinDnsLogSink)(WinDnsLogCategory category, const char *message, - const char **details, uint32_t numDetails, void *context); - // // WinDns_Initialize: // @@ -37,8 +30,8 @@ WINDNS_LINKAGE bool WINDNS_API WinDns_Initialize( - WinDnsLogSink logSink, - void *logContext + MullvadLogSink logSink, + void *logSinkContext ); // diff --git a/windows/windns/src/windns/windns.vcxproj b/windows/windns/src/windns/windns.vcxproj index 31a74eab87..05293ca9a4 100644 --- a/windows/windns/src/windns/windns.vcxproj +++ b/windows/windns/src/windns/windns.vcxproj @@ -98,7 +98,7 @@ <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>_DEBUG;WINDNS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../../../shared/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../libshared/src/;$(ProjectDir)../../../windows-libraries/src/</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> @@ -106,7 +106,7 @@ <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib;wbemuuid.lib;comsuppw.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>libshared.lib;libcommon.lib;Iphlpapi.lib;wbemuuid.lib;comsuppw.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -117,7 +117,7 @@ <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>WIN32;_DEBUG;WINDNS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../../../shared/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../libshared/src/;$(ProjectDir)../../../windows-libraries/src/</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> @@ -125,7 +125,7 @@ <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib;wbemuuid.lib;comsuppw.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>libshared.lib;libcommon.lib;Iphlpapi.lib;wbemuuid.lib;comsuppw.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> @@ -138,7 +138,7 @@ <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>WIN32;NDEBUG;WINDNS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../../../shared/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../libshared/src/;$(ProjectDir)../../../windows-libraries/src/</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> @@ -148,7 +148,7 @@ <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib;wbemuuid.lib;comsuppw.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>libshared.lib;libcommon.lib;Iphlpapi.lib;wbemuuid.lib;comsuppw.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> @@ -161,7 +161,7 @@ <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>NDEBUG;WINDNS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> - <AdditionalIncludeDirectories>$(ProjectDir)../;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../../../shared/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../libshared/src/;$(ProjectDir)../../../windows-libraries/src/</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> @@ -171,13 +171,11 @@ <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib;wbemuuid.lib;comsuppw.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>libshared.lib;libcommon.lib;Iphlpapi.lib;wbemuuid.lib;comsuppw.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> </Link> </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="confineoperation.h" /> - <ClInclude Include="logsink.h" /> - <ClInclude Include="ilogsink.h" /> <ClInclude Include="netsh.h" /> <ClInclude Include="stdafx.h" /> <ClInclude Include="targetver.h" /> @@ -186,7 +184,6 @@ <ItemGroup> <ClCompile Include="confineoperation.cpp" /> <ClCompile Include="dllmain.cpp" /> - <ClCompile Include="logsink.cpp" /> <ClCompile Include="netsh.cpp" /> <ClCompile Include="stdafx.cpp"> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> diff --git a/windows/windns/src/windns/windns.vcxproj.filters b/windows/windns/src/windns/windns.vcxproj.filters index e71bf3e814..69449dc6c4 100644 --- a/windows/windns/src/windns/windns.vcxproj.filters +++ b/windows/windns/src/windns/windns.vcxproj.filters @@ -6,8 +6,6 @@ <ClInclude Include="windns.h" /> <ClInclude Include="netsh.h" /> <ClInclude Include="confineoperation.h" /> - <ClInclude Include="ilogsink.h" /> - <ClInclude Include="logsink.h" /> </ItemGroup> <ItemGroup> <ClCompile Include="dllmain.cpp" /> @@ -15,7 +13,6 @@ <ClCompile Include="windns.cpp" /> <ClCompile Include="netsh.cpp" /> <ClCompile Include="confineoperation.cpp" /> - <ClCompile Include="logsink.cpp" /> </ItemGroup> <ItemGroup> <ResourceCompile Include="windns.rc" /> diff --git a/windows/windns/windns.sln b/windows/windns/windns.sln index 13f072ff31..efe218a454 100644 --- a/windows/windns/windns.sln +++ b/windows/windns/windns.sln @@ -10,7 +10,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "windns", "src\windns\windns {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} = {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shared", "..\shared\src\shared\shared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshared", "..\libshared\src\libshared\libshared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" + ProjectSection(ProjectDependencies) = postProject + {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/windows/windows-libraries b/windows/windows-libraries -Subproject 19889be7a7e3555a03b9678dc486b429d5fad10 +Subproject 3c5212ce3085addf9311392aeaeed9f13d79b27 diff --git a/windows/winfw/src/extras/cli/cli.vcxproj b/windows/winfw/src/extras/cli/cli.vcxproj index b4cf2f8cf1..e8c9f21745 100644 --- a/windows/winfw/src/extras/cli/cli.vcxproj +++ b/windows/winfw/src/extras/cli/cli.vcxproj @@ -97,7 +97,7 @@ <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\;$(ProjectDir)..\..\..\..\libwfp\src\;$(ProjectDir)..\..\..\..\windows-libraries\src\</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\;$(ProjectDir)..\..\..\..\libwfp\src\;$(ProjectDir)..\..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\..\libshared\src\</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> @@ -115,7 +115,7 @@ <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\;$(ProjectDir)..\..\..\..\libwfp\src\;$(ProjectDir)..\..\..\..\windows-libraries\src\</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\;$(ProjectDir)..\..\..\..\libwfp\src\;$(ProjectDir)..\..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\..\libshared\src\</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> @@ -135,7 +135,7 @@ <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\;$(ProjectDir)..\..\..\..\libwfp\src\;$(ProjectDir)..\..\..\..\windows-libraries\src\</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\;$(ProjectDir)..\..\..\..\libwfp\src\;$(ProjectDir)..\..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\..\libshared\src\</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> @@ -157,7 +157,7 @@ <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\;$(ProjectDir)..\..\..\..\libwfp\src\;$(ProjectDir)..\..\..\..\windows-libraries\src\</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\;$(ProjectDir)..\..\..\..\libwfp\src\;$(ProjectDir)..\..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\..\libshared\src\</AdditionalIncludeDirectories> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> diff --git a/windows/winfw/src/extras/cli/commands/winfw/init.cpp b/windows/winfw/src/extras/cli/commands/winfw/init.cpp index 6236027725..b97bb494a8 100644 --- a/windows/winfw/src/extras/cli/commands/winfw/init.cpp +++ b/windows/winfw/src/extras/cli/commands/winfw/init.cpp @@ -44,7 +44,7 @@ void Init::handleRequest(const std::vector<std::wstring> &arguments) } //static -void WINFW_API Init::ErrorForwarder(const char *errorMessage, void *context) +void WINFW_API Init::ErrorForwarder(MULLVAD_LOG_LEVEL, const char *errorMessage, void *context) { auto thiz = reinterpret_cast<Init *>(context); diff --git a/windows/winfw/src/extras/cli/commands/winfw/init.h b/windows/winfw/src/extras/cli/commands/winfw/init.h index f3589535bf..e855769c95 100644 --- a/windows/winfw/src/extras/cli/commands/winfw/init.h +++ b/windows/winfw/src/extras/cli/commands/winfw/init.h @@ -22,7 +22,7 @@ private: MessageSink m_messageSink; - static void WINFW_API ErrorForwarder(const char *errorMessage, void *context); + static void WINFW_API ErrorForwarder(MULLVAD_LOG_LEVEL level, const char *errorMessage, void *context); }; } diff --git a/windows/winfw/src/extras/cli/commands/winfw/policy.cpp b/windows/winfw/src/extras/cli/commands/winfw/policy.cpp index decead0596..02c358449c 100644 --- a/windows/winfw/src/extras/cli/commands/winfw/policy.cpp +++ b/windows/winfw/src/extras/cli/commands/winfw/policy.cpp @@ -111,7 +111,8 @@ void Policy::processConnecting(const KeyValuePairs &arguments) auto success = WinFw_ApplyPolicyConnecting ( settings, - relay + relay, + nullptr ); m_messageSink((success @@ -141,7 +142,8 @@ void Policy::processConnected(const KeyValuePairs &arguments) settings, relay, GetArgumentValue(arguments, L"tunnel").c_str(), - GetArgumentValue(arguments, L"dns").c_str() + GetArgumentValue(arguments, L"dns").c_str(), + nullptr ); m_messageSink((success diff --git a/windows/winfw/src/extras/cli/util.cpp b/windows/winfw/src/extras/cli/util.cpp index 6181e68639..2cd668d060 100644 --- a/windows/winfw/src/extras/cli/util.cpp +++ b/windows/winfw/src/extras/cli/util.cpp @@ -1,7 +1,7 @@ #include "stdafx.h" #include "util.h" #include "inlineformatter.h" -#include "libcommon/string.h" +#include <libcommon/string.h> #include <string> void PrettyPrintProperties(MessageSink messageSink, PrettyPrintOptions options, const PropertyList &properties) diff --git a/windows/winfw/src/extras/cli/util.h b/windows/winfw/src/extras/cli/util.h index 3919e03422..e7deeebb3e 100644 --- a/windows/winfw/src/extras/cli/util.h +++ b/windows/winfw/src/extras/cli/util.h @@ -4,8 +4,8 @@ #include <memory> #include <string> #include "propertylist.h" -#include "libwfp/filterengine.h" -#include "libcommon/string.h" +#include <libwfp/filterengine.h> +#include <libcommon/string.h> typedef std::function<void(const std::wstring &)> MessageSink; diff --git a/windows/winfw/src/winfw/winfw.cpp b/windows/winfw/src/winfw/winfw.cpp index 3065408f3d..7260de3e8b 100644 --- a/windows/winfw/src/winfw/winfw.cpp +++ b/windows/winfw/src/winfw/winfw.cpp @@ -11,8 +11,8 @@ namespace uint32_t g_timeout = 0; -WinFwErrorSink g_errorSink = nullptr; -void * g_errorContext = nullptr; +MullvadLogSink g_logSink = nullptr; +void *g_logSinkContext = nullptr; FwContext *g_fwContext = nullptr; @@ -51,8 +51,8 @@ bool WINFW_API WinFw_Initialize( uint32_t timeout, - WinFwErrorSink errorSink, - void *errorContext + MullvadLogSink logSink, + void *logSinkContext ) { if (nullptr != g_fwContext) @@ -67,8 +67,8 @@ WinFw_Initialize( // Convert seconds to milliseconds. g_timeout = timeout * 1000; - g_errorSink = errorSink; - g_errorContext = errorContext; + g_logSink = logSink; + g_logSinkContext = logSinkContext; try { @@ -76,9 +76,9 @@ WinFw_Initialize( } catch (std::exception &err) { - if (nullptr != g_errorSink) + if (nullptr != g_logSink) { - g_errorSink(err.what(), g_errorContext); + g_logSink(MULLVAD_LOG_LEVEL_ERROR, err.what(), g_logSinkContext); } return false; @@ -98,8 +98,8 @@ WINFW_API WinFw_InitializeBlocked( uint32_t timeout, const WinFwSettings &settings, - WinFwErrorSink errorSink, - void *errorContext + MullvadLogSink logSink, + void *logSinkContext ) { if (nullptr != g_fwContext) @@ -114,8 +114,8 @@ WinFw_InitializeBlocked( // Convert seconds to milliseconds. g_timeout = timeout * 1000; - g_errorSink = errorSink; - g_errorContext = errorContext; + g_logSink = logSink; + g_logSinkContext = logSinkContext; try { @@ -123,9 +123,9 @@ WinFw_InitializeBlocked( } catch (std::exception &err) { - if (nullptr != g_errorSink) + if (nullptr != g_logSink) { - g_errorSink(err.what(), g_errorContext); + g_logSink(MULLVAD_LOG_LEVEL_ERROR, err.what(), g_logSinkContext); } return false; @@ -174,9 +174,9 @@ WinFw_ApplyPolicyConnecting( } catch (std::exception &err) { - if (nullptr != g_errorSink) + if (nullptr != g_logSink) { - g_errorSink(err.what(), g_errorContext); + g_logSink(MULLVAD_LOG_LEVEL_ERROR, err.what(), g_logSinkContext); } return false; @@ -209,9 +209,9 @@ WinFw_ApplyPolicyConnected( } catch (std::exception &err) { - if (nullptr != g_errorSink) + if (nullptr != g_logSink) { - g_errorSink(err.what(), g_errorContext); + g_logSink(MULLVAD_LOG_LEVEL_ERROR, err.what(), g_logSinkContext); } return false; @@ -240,9 +240,9 @@ WinFw_ApplyPolicyBlocked( } catch (std::exception &err) { - if (nullptr != g_errorSink) + if (nullptr != g_logSink) { - g_errorSink(err.what(), g_errorContext); + g_logSink(MULLVAD_LOG_LEVEL_ERROR, err.what(), g_logSinkContext); } return false; @@ -269,9 +269,9 @@ WinFw_Reset() } catch (std::exception &err) { - if (nullptr != g_errorSink) + if (nullptr != g_logSink) { - g_errorSink(err.what(), g_errorContext); + g_logSink(MULLVAD_LOG_LEVEL_ERROR, err.what(), g_logSinkContext); } return false; diff --git a/windows/winfw/src/winfw/winfw.h b/windows/winfw/src/winfw/winfw.h index 6d43b0db4c..c95890dd4a 100644 --- a/windows/winfw/src/winfw/winfw.h +++ b/windows/winfw/src/winfw/winfw.h @@ -1,5 +1,7 @@ #pragma once -#include <cstdint> + +#include <libshared/logging/logsink.h> +#include <stdint.h> // // WINFW public API @@ -58,9 +60,6 @@ WinFwRelay; // transaction lock to become available. Specify 0 to use a default timeout // determined by Windows. // -// Optionally provide a callback if you are interested in logging exceptions. -// -typedef void (WINFW_API *WinFwErrorSink)(const char *errorMessage, void *context); extern "C" WINFW_LINKAGE @@ -68,8 +67,8 @@ bool WINFW_API WinFw_Initialize( uint32_t timeout, - WinFwErrorSink errorSink, - void *errorContext + MullvadLogSink logSink, + void *logSinkContext ); // @@ -89,8 +88,8 @@ WINFW_API WinFw_InitializeBlocked( uint32_t timeout, const WinFwSettings &settings, - WinFwErrorSink errorSink, - void *errorContext + MullvadLogSink logSink, + void *logSinkContext ); // diff --git a/windows/winfw/src/winfw/winfw.vcxproj b/windows/winfw/src/winfw/winfw.vcxproj index cbabe2f4f7..15da42ec0f 100644 --- a/windows/winfw/src/winfw/winfw.vcxproj +++ b/windows/winfw/src/winfw/winfw.vcxproj @@ -160,7 +160,7 @@ <PreprocessorDefinitions>WIN32;_DEBUG;WINFW_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\libwfp\src\</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\libwfp\src\</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -179,7 +179,7 @@ <PreprocessorDefinitions>_DEBUG;WINFW_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\libwfp\src\</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\libwfp\src\</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -200,7 +200,7 @@ <PreprocessorDefinitions>WIN32;NDEBUG;WINFW_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\libwfp\src\</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\libwfp\src\</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -223,7 +223,7 @@ <PreprocessorDefinitions>NDEBUG;WINFW_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\libwfp\src\</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir)..\..\..\libwfp\src\</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> diff --git a/windows/winnet/extras.sln b/windows/winnet/extras.sln index e50989583b..c59c831a99 100644 --- a/windows/winnet/extras.sln +++ b/windows/winnet/extras.sln @@ -4,13 +4,14 @@ VisualStudioVersion = 16.0.29324.140 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "loader", "src\extras\loader\loader.vcxproj", "{227C50F4-D9F6-4D9A-84A0-33CE84432D0D}" ProjectSection(ProjectDependencies) = postProject - {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} = {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4} = {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winnet", "src\winnet\winnet.vcxproj", "{89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}" ProjectSection(ProjectDependencies) = postProject {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} = {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcommon", "..\windows-libraries\src\libcommon\libcommon.vcxproj", "{B52E2D10-A94A-4605-914A-2DCEF6A757EF}" @@ -18,13 +19,21 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "src\extras\tests\tests.vcxproj", "{01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}" ProjectSection(ProjectDependencies) = postProject {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} = {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4} = {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshared", "..\libshared\src\libshared\libshared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" + ProjectSection(ProjectDependencies) = postProject + {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 + Debug-AutoTests|x64 = Debug-AutoTests|x64 + Debug-AutoTests|x86 = Debug-AutoTests|x86 Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection @@ -33,14 +42,20 @@ Global {227C50F4-D9F6-4D9A-84A0-33CE84432D0D}.Debug|x64.Build.0 = Debug|x64 {227C50F4-D9F6-4D9A-84A0-33CE84432D0D}.Debug|x86.ActiveCfg = Debug|Win32 {227C50F4-D9F6-4D9A-84A0-33CE84432D0D}.Debug|x86.Build.0 = Debug|Win32 + {227C50F4-D9F6-4D9A-84A0-33CE84432D0D}.Debug-AutoTests|x64.ActiveCfg = Debug|x64 + {227C50F4-D9F6-4D9A-84A0-33CE84432D0D}.Debug-AutoTests|x86.ActiveCfg = Debug|Win32 {227C50F4-D9F6-4D9A-84A0-33CE84432D0D}.Release|x64.ActiveCfg = Release|x64 {227C50F4-D9F6-4D9A-84A0-33CE84432D0D}.Release|x64.Build.0 = Release|x64 {227C50F4-D9F6-4D9A-84A0-33CE84432D0D}.Release|x86.ActiveCfg = Release|Win32 {227C50F4-D9F6-4D9A-84A0-33CE84432D0D}.Release|x86.Build.0 = Release|Win32 - {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug|x64.ActiveCfg = Debug Static|x64 - {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug|x64.Build.0 = Debug Static|x64 + {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug|x64.ActiveCfg = Debug|x64 + {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug|x64.Build.0 = Debug|x64 {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug|x86.ActiveCfg = Debug|Win32 {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug|x86.Build.0 = Debug|Win32 + {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug-AutoTests|x64.ActiveCfg = Debug Static|x64 + {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug-AutoTests|x64.Build.0 = Debug Static|x64 + {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug-AutoTests|x86.ActiveCfg = Debug Static|Win32 + {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Debug-AutoTests|x86.Build.0 = Debug Static|Win32 {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Release|x64.ActiveCfg = Release|x64 {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Release|x64.Build.0 = Release|x64 {89C5CDE8-04DB-4D9C-A8D8-7F786DAFB6D4}.Release|x86.ActiveCfg = Release|Win32 @@ -49,18 +64,34 @@ Global {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Debug|x64.Build.0 = Debug|x64 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Debug|x86.ActiveCfg = Debug|Win32 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Debug|x86.Build.0 = Debug|Win32 + {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Debug-AutoTests|x64.ActiveCfg = Debug|x64 + {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Debug-AutoTests|x64.Build.0 = Debug|x64 + {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Debug-AutoTests|x86.ActiveCfg = Debug|Win32 + {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Debug-AutoTests|x86.Build.0 = Debug|Win32 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x64.ActiveCfg = Release|x64 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x64.Build.0 = Release|x64 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.ActiveCfg = Release|Win32 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.Build.0 = Release|Win32 {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Debug|x64.ActiveCfg = Debug|x64 - {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Debug|x64.Build.0 = Debug|x64 {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Debug|x86.ActiveCfg = Debug|Win32 - {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Debug|x86.Build.0 = Debug|Win32 - {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Release|x64.ActiveCfg = Release|x64 - {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Release|x64.Build.0 = Release|x64 - {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Release|x86.ActiveCfg = Release|Win32 - {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Release|x86.Build.0 = Release|Win32 + {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Debug-AutoTests|x64.ActiveCfg = Debug|x64 + {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Debug-AutoTests|x64.Build.0 = Debug|x64 + {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Debug-AutoTests|x86.ActiveCfg = Debug|Win32 + {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Debug-AutoTests|x86.Build.0 = Debug|Win32 + {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Release|x64.ActiveCfg = Debug|x64 + {01A4E766-CC61-40B7-A3D6-7A37F6BF5CCB}.Release|x86.ActiveCfg = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x64.ActiveCfg = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x64.Build.0 = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x86.ActiveCfg = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x86.Build.0 = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug-AutoTests|x64.ActiveCfg = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug-AutoTests|x64.Build.0 = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug-AutoTests|x86.ActiveCfg = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug-AutoTests|x86.Build.0 = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x64.ActiveCfg = Release|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x64.Build.0 = Release|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x86.ActiveCfg = Release|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/windows/winnet/src/extras/loader/loader.cpp b/windows/winnet/src/extras/loader/loader.cpp index bdacc1567d..00d795c032 100644 --- a/windows/winnet/src/extras/loader/loader.cpp +++ b/windows/winnet/src/extras/loader/loader.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" -#include "../../winnet/winnet.h" +#include <winnet/winnet.h> +#include <libshared/logging/stdoutlogger.h> #include <iostream> void __stdcall ConnectivityChanged(bool connected, void *) @@ -7,32 +8,6 @@ void __stdcall ConnectivityChanged(bool connected, void *) std::wcout << (0 != connected? L"Connected" : L"NOT connected") << std::endl; } -namespace -{ - -void __stdcall log(MULLVAD_LOG_SINK_SEVERITY severity, const char *msg, void *) -{ - switch (severity) - { - case MULLVAD_LOG_SINK_SEVERITY_ERROR: - std::cout << "Error: "; - break; - case MULLVAD_LOG_SINK_SEVERITY_WARNING: - std::cout << "Warning: "; - break; - case MULLVAD_LOG_SINK_SEVERITY_INFO: - std::cout << "Info: "; - break; - case MULLVAD_LOG_SINK_SEVERITY_TRACE: - std::cout << "Trace: "; - break; - } - - std::cout << msg << std::endl; -} - -} - int main() { //wchar_t *alias = nullptr; @@ -56,7 +31,7 @@ int main() const auto status = WinNet_ActivateConnectivityMonitor( ConnectivityChanged, nullptr, - log, + shared::logging::StdoutLogger, nullptr ); @@ -64,4 +39,3 @@ int main() return 0; } - diff --git a/windows/winnet/src/extras/loader/loader.vcxproj b/windows/winnet/src/extras/loader/loader.vcxproj index e225b64dd8..6f43421d39 100644 --- a/windows/winnet/src/extras/loader/loader.vcxproj +++ b/windows/winnet/src/extras/loader/loader.vcxproj @@ -107,12 +107,14 @@ <PreprocessorDefinitions>WINNET_STATIC;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../libshared/src/</AdditionalIncludeDirectories> + <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> <Link> <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration)</AdditionalLibraryDirectories> - <AdditionalDependencies>winnet-static.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>libshared.lib;winnet.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> @@ -124,13 +126,14 @@ <PreprocessorDefinitions>WINNET_STATIC;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <AdditionalIncludeDirectories>$(SolutionDir)src</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../libshared/src/</AdditionalIncludeDirectories> + <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> <Link> <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration)</AdditionalLibraryDirectories> - <AdditionalDependencies>winnet-static.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>libshared.lib;winnet.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> @@ -144,6 +147,8 @@ <PreprocessorDefinitions>WINNET_STATIC;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../libshared/src/</AdditionalIncludeDirectories> + <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> <Link> <SubSystem>Console</SubSystem> @@ -151,7 +156,7 @@ <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration)</AdditionalLibraryDirectories> - <AdditionalDependencies>winnet-static.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>libshared.lib;winnet.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> @@ -165,6 +170,8 @@ <PreprocessorDefinitions>WINNET_STATIC;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../libshared/src/</AdditionalIncludeDirectories> + <LanguageStandard>stdcpplatest</LanguageStandard> </ClCompile> <Link> <SubSystem>Console</SubSystem> @@ -172,7 +179,7 @@ <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration)</AdditionalLibraryDirectories> - <AdditionalDependencies>winnet-static.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>libshared.lib;winnet.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> </Link> </ItemDefinitionGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> diff --git a/windows/winnet/src/extras/loader/loader.vcxproj.filters b/windows/winnet/src/extras/loader/loader.vcxproj.filters index 408a9591b1..cd0f4643c7 100644 --- a/windows/winnet/src/extras/loader/loader.vcxproj.filters +++ b/windows/winnet/src/extras/loader/loader.vcxproj.filters @@ -3,13 +3,9 @@ <ItemGroup> <ClCompile Include="loader.cpp" /> <ClCompile Include="stdafx.cpp" /> - <ClCompile Include="..\..\winnet\routemanager.cpp" /> - <ClCompile Include="..\..\winnet\adapters.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="stdafx.h" /> <ClInclude Include="targetver.h" /> - <ClInclude Include="..\..\winnet\routemanager.h" /> - <ClInclude Include="..\..\winnet\adapters.h" /> </ItemGroup> </Project>
\ No newline at end of file diff --git a/windows/winnet/src/extras/tests/adaptermonitor.cpp b/windows/winnet/src/extras/tests/adaptermonitor.cpp index bfb3da8d5e..465bb0b7cd 100644 --- a/windows/winnet/src/extras/tests/adaptermonitor.cpp +++ b/windows/winnet/src/extras/tests/adaptermonitor.cpp @@ -1,39 +1,21 @@ #include "stdafx.h" #include "testadapterutil.h" +#include <libshared/logging/stdoutlogger.h> +#include <libshared/logging/logsinkadapter.h> #include <iostream> - #include <CppUnitTest.h> -#include <libcommon/trace/trace.h> using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace { - -void logFunc(common::logging::Severity severity, const char *msg) -{ - using common::logging::Severity; - - switch (severity) - { - case Severity::Error: - std::cout << "Error: "; - break; - case Severity::Warning: - std::cout << "Warning: "; - break; - case Severity::Info: - std::cout << "Info: "; - break; - case Severity::Trace: - std::cout << "Trace: "; - break; - } - std::cout << msg << std::endl; +auto MakeStdoutLogger() +{ + return std::make_shared<shared::logging::LogSinkAdapter>(shared::logging::StdoutLogger, nullptr); } - + enum class LastEvent { NoEvent, @@ -48,7 +30,7 @@ namespace Microsoft::VisualStudio::CppUnitTestFramework { template<> -static std::wstring ToString<LastEvent>(const enum class LastEvent& t) +std::wstring ToString<LastEvent>(const enum class LastEvent& t) { switch (t) { @@ -72,9 +54,9 @@ public: TEST_METHOD(addAdapter) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -84,7 +66,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -93,7 +75,7 @@ public: ); Assert::AreEqual( - 0ULL, + size_t(0), adapterCount, L"Expected 0 adapters initially" ); @@ -117,7 +99,7 @@ public: testProvider->sendEvent(&iface, MibAddInstance); Assert::AreEqual( - 1ULL, + size_t(1), adapterCount, L"Expected new adapter" ); @@ -125,9 +107,9 @@ public: TEST_METHOD(addAdapter_Duplicate) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -137,7 +119,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -162,7 +144,7 @@ public: testProvider->sendEvent(&iface, MibAddInstance); Assert::AreEqual( - 1ULL, + size_t(1), adapterCount, L"Expected new adapter" ); @@ -173,7 +155,7 @@ public: testProvider->sendEvent(&iface, MibAddInstance); Assert::AreEqual( - 1ULL, + size_t(1), adapterCount, L"Expected ignored duplicate interface event" ); @@ -181,9 +163,9 @@ public: TEST_METHOD(removeAdapter_AdminStatus) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -193,7 +175,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -235,7 +217,7 @@ public: testProvider->removeAdapter(adapter); Assert::AreEqual( - 0ULL, + size_t(0), adapterCount, L"Expected removed adapter" ); @@ -243,9 +225,9 @@ public: TEST_METHOD(removeAdapter_NoInterfaces) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -255,7 +237,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -299,7 +281,7 @@ public: testProvider->removeAdapter(adapter); Assert::AreEqual( - 0ULL, + size_t(0), adapterCount, L"Expected removed adapter" ); @@ -307,9 +289,9 @@ public: TEST_METHOD(removeAdapter_Duplicate) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -319,7 +301,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -343,7 +325,7 @@ public: testProvider->sendEvent(&iface, MibAddInstance); Assert::AreEqual( - 1ULL, + size_t(1), adapterCount, L"Expected new adapter" ); @@ -363,7 +345,7 @@ public: testProvider->sendEvent(&iface, MibDeleteInstance); Assert::AreEqual( - 0ULL, + size_t(0), adapterCount, L"State inconsistent after duplicate Delete event" ); @@ -371,9 +353,9 @@ public: TEST_METHOD(addIPv6Interface) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -383,7 +365,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -410,7 +392,7 @@ public: testProvider->sendEvent(&iface, MibAddInstance); Assert::AreEqual( - 1ULL, + size_t(1), adapterCount, L"Expected new adapter" ); @@ -418,9 +400,9 @@ public: TEST_METHOD(addIPv4And6Interface) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -430,7 +412,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -474,9 +456,9 @@ public: TEST_METHOD(addIPv4And6Interface_RemoveIPv4) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -486,7 +468,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -537,9 +519,9 @@ public: TEST_METHOD(addIPv4And6Interface_RemoveIPv6) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -549,7 +531,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -600,9 +582,9 @@ public: TEST_METHOD(addIPv4And6Interface_RemoveBoth) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); - const auto filter = [](const MIB_IF_ROW2 &row) -> bool + const auto filter = [](const MIB_IF_ROW2 &) -> bool { return true; }; @@ -612,7 +594,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType) -> void { adapterCount = adapters.size(); }, @@ -665,7 +647,7 @@ public: TEST_METHOD(filter) { - auto logSink = std::make_shared<common::logging::LogSink>(logFunc); + auto logSink = MakeStdoutLogger(); const auto testProvider = std::make_shared<TestDataProvider>(); @@ -697,7 +679,7 @@ public: NetworkAdapterMonitor inst( logSink, - [&adapterCount, &lastEvent](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *adapter, UpdateType updateType) -> void + [&adapterCount, &lastEvent](const std::vector<MIB_IF_ROW2> &adapters, const MIB_IF_ROW2 *, UpdateType updateType) -> void { switch (updateType) { @@ -746,7 +728,7 @@ public: Assert::AreEqual(LastEvent::NoEvent, lastEvent, L"Unexpectedly received event for loopback adapter"); Assert::AreEqual( - 0ULL, + size_t(0), adapterCount, L"Loopback adapter was not filtered correctly" ); diff --git a/windows/winnet/src/extras/tests/testadapterutil.cpp b/windows/winnet/src/extras/tests/testadapterutil.cpp index 09d488bc27..128cbee681 100644 --- a/windows/winnet/src/extras/tests/testadapterutil.cpp +++ b/windows/winnet/src/extras/tests/testadapterutil.cpp @@ -1,13 +1,11 @@ #include "stdafx.h" - #include "testadapterutil.h" - #include <CppUnitTest.h> using namespace Microsoft::VisualStudio::CppUnitTestFramework; #include <libcommon/logging/logsink.h> -#include "../../winnet/networkadaptermonitor.h" +#include <winnet/networkadaptermonitor.h> using FilterType = NetworkAdapterMonitor::FilterType; using UpdateSinkType = NetworkAdapterMonitor::UpdateSinkType; @@ -63,11 +61,11 @@ void MibIfTable::remove(const MIB_IF_ROW2 &row) // DWORD TestDataProvider::notifyIpInterfaceChange( - ADDRESS_FAMILY Family, + ADDRESS_FAMILY, PIPINTERFACE_CHANGE_CALLBACK Callback, PVOID CallerContext, - BOOLEAN InitialNotification, - HANDLE *NotificationHandle + BOOLEAN, + HANDLE * ) { // TODO: assert: m_callback == nullptr @@ -78,7 +76,7 @@ DWORD TestDataProvider::notifyIpInterfaceChange( return NO_ERROR; } -DWORD TestDataProvider::cancelMibChangeNotify2(HANDLE NotificationHandle) +DWORD TestDataProvider::cancelMibChangeNotify2(HANDLE) { // TODO: assert: m_callback != nullptr // TODO: multiple callbacks? diff --git a/windows/winnet/src/extras/tests/testadapterutil.h b/windows/winnet/src/extras/tests/testadapterutil.h index 4b4ae80799..5ae8cc32c2 100644 --- a/windows/winnet/src/extras/tests/testadapterutil.h +++ b/windows/winnet/src/extras/tests/testadapterutil.h @@ -1,11 +1,8 @@ #pragma once #include <functional> - -#include <WinSock2.h> - -#include <libcommon/logging/logsink.h> -#include "../../winnet/networkadaptermonitor.h" +#include <winSock2.h> +#include <winnet/networkadaptermonitor.h> using FilterType = NetworkAdapterMonitor::FilterType; using UpdateSinkType = NetworkAdapterMonitor::UpdateSinkType; diff --git a/windows/winnet/src/extras/tests/tests.vcxproj b/windows/winnet/src/extras/tests/tests.vcxproj index 6a332a9f48..d9afdea25e 100644 --- a/windows/winnet/src/extras/tests/tests.vcxproj +++ b/windows/winnet/src/extras/tests/tests.vcxproj @@ -5,18 +5,10 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> <ProjectConfiguration Include="Debug|x64"> <Configuration>Debug</Configuration> <Platform>x64</Platform> </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <VCProjectVersion>16.0</VCProjectVersion> @@ -35,14 +27,6 @@ <CharacterSet>Unicode</CharacterSet> <UseOfMfc>false</UseOfMfc> </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <UseOfMfc>false</UseOfMfc> - </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> @@ -50,14 +34,6 @@ <CharacterSet>Unicode</CharacterSet> <UseOfMfc>false</UseOfMfc> </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>DynamicLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v142</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <UseOfMfc>false</UseOfMfc> - </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> @@ -66,15 +42,9 @@ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <LinkIncremental>true</LinkIncremental> @@ -83,21 +53,15 @@ </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>true</LinkIncremental> - <IntDir>$(SolutionDir)bin\temp\$(Platform)-$(Configuration)\$(ProjectName)\</IntDir> <OutDir>$(SolutionDir)bin\$(Platform)-$(Configuration)\</OutDir> + <IntDir>$(SolutionDir)bin\temp\$(Platform)-$(Configuration)\$(ProjectName)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> + <WarningLevel>Level4</WarningLevel> <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(SolutionDir)..\windows-libraries\src;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../libshared/src;$(ProjectDir)../../../../windows-libraries/src;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <UseFullPaths>true</UseFullPaths> <LanguageStandard>stdcpplatest</LanguageStandard> @@ -106,60 +70,24 @@ <Link> <SubSystem>Windows</SubSystem> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration);$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>libcommon.lib;Iphlpapi.lib;winnet-static.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>libshared.lib;libcommon.lib;winnet-static.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> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> + <WarningLevel>Level4</WarningLevel> <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../;$(ProjectDir)../../../../libshared/src;$(ProjectDir)../../../../windows-libraries/src;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <UseFullPaths>true</UseFullPaths> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader>Use</PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader>Use</PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <AdditionalIncludeDirectories>$(SolutionDir)..\windows-libraries\src;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> <LanguageStandard>stdcpplatest</LanguageStandard> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> </ClCompile> <Link> <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration);$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>libcommon.lib;winnet.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>libshared.lib;libcommon.lib;winnet-static.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> </Link> </ItemDefinitionGroup> <ItemGroup> @@ -171,8 +99,6 @@ <ClCompile Include="stdafx.cpp"> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> </ClCompile> <ClCompile Include="adaptermonitor.cpp" /> <ClCompile Include="testadapterutil.cpp" /> diff --git a/windows/winnet/src/winnet/winnet.cpp b/windows/winnet/src/winnet/winnet.cpp index c94970b863..3c8f133d57 100644 --- a/windows/winnet/src/winnet/winnet.cpp +++ b/windows/winnet/src/winnet/winnet.cpp @@ -3,8 +3,9 @@ #include "NetworkInterfaces.h"
#include "offlinemonitor.h"
#include "routing/routemanager.h"
-#include <shared/logsinkadapter.h>
-#include <shared/network/interfaceutils.h>
+#include <libshared/logging/logsinkadapter.h>
+#include <libshared/logging/unwind.h>
+#include <libshared/network/interfaceutils.h>
#include <libcommon/error.h>
#include <libcommon/network.h>
#include <cstdint>
@@ -25,7 +26,7 @@ OfflineMonitor *g_OfflineMonitor = nullptr; std::mutex g_RouteManagerLock;
RouteManager *g_RouteManager = nullptr;
-std::shared_ptr<shared::LogSinkAdapter> g_RouteManagerLogSink;
+std::shared_ptr<shared::logging::LogSinkAdapter> g_RouteManagerLogSink;
Network ConvertNetwork(const WINNET_IPNETWORK &in)
{
@@ -134,18 +135,6 @@ std::vector<Route> ConvertRoutes(const WINNET_ROUTE *routes, uint32_t numRoutes) return out;
}
-void UnwindAndLog(MullvadLogSink logSink, void *logSinkContext, const std::exception &err)
-{
- if (nullptr == logSink)
- {
- return;
- }
-
- auto logger = std::make_shared<shared::LogSinkAdapter>(logSink, logSinkContext);
-
- common::error::UnwindException(err, logger);
-}
-
std::vector<SOCKADDR_INET> ConvertAddresses(const WINNET_IP *addresses, uint32_t numAddresses)
{
//
@@ -209,7 +198,7 @@ WinNet_EnsureTopMetric( }
catch (const std::exception &err)
{
- UnwindAndLog(logSink, logSinkContext, err);
+ shared::logging::UnwindAndLog(logSink, logSinkContext, err);
return WINNET_ETM_STATUS_FAILURE;
}
catch (...)
@@ -250,7 +239,7 @@ WinNet_GetTapInterfaceIpv6Status( }
catch (const std::exception &err)
{
- UnwindAndLog(logSink, logSinkContext, err);
+ shared::logging::UnwindAndLog(logSink, logSinkContext, err);
return WINNET_GTII_STATUS_FAILURE;
}
catch (...)
@@ -282,7 +271,7 @@ WinNet_GetTapInterfaceAlias( }
catch (const std::exception &err)
{
- UnwindAndLog(logSink, logSinkContext, err);
+ shared::logging::UnwindAndLog(logSink, logSinkContext, err);
return false;
}
catch (...)
@@ -331,7 +320,7 @@ WinNet_ActivateConnectivityMonitor( callback(connected, callbackContext);
};
- auto logger = std::make_shared<shared::LogSinkAdapter>(logSink, logSinkContext);
+ auto logger = std::make_shared<shared::logging::LogSinkAdapter>(logSink, logSinkContext);
g_OfflineMonitor = new OfflineMonitor(logger, forwarder);
@@ -339,7 +328,7 @@ WinNet_ActivateConnectivityMonitor( }
catch (const std::exception &err)
{
- UnwindAndLog(logSink, logSinkContext, err);
+ shared::logging::UnwindAndLog(logSink, logSinkContext, err);
return false;
}
catch (...)
@@ -383,14 +372,14 @@ WinNet_ActivateRouteManager( throw std::runtime_error("Cannot activate route manager twice");
}
- g_RouteManagerLogSink = std::make_shared<shared::LogSinkAdapter>(logSink, logSinkContext);
+ g_RouteManagerLogSink = std::make_shared<shared::logging::LogSinkAdapter>(logSink, logSinkContext);
g_RouteManager = new RouteManager(g_RouteManagerLogSink);
return true;
}
catch (const std::exception &err)
{
- UnwindAndLog(logSink, logSinkContext, err);
+ shared::logging::UnwindAndLog(logSink, logSinkContext, err);
return false;
}
catch (...)
@@ -713,7 +702,7 @@ WinNet_AddDeviceIpAddresses( }
catch (const std::exception &err)
{
- UnwindAndLog(logSink, logSinkContext, err);
+ shared::logging::UnwindAndLog(logSink, logSinkContext, err);
return false;
}
catch (...)
diff --git a/windows/winnet/src/winnet/winnet.h b/windows/winnet/src/winnet/winnet.h index f277d61c81..40ccf9f421 100644 --- a/windows/winnet/src/winnet/winnet.h +++ b/windows/winnet/src/winnet/winnet.h @@ -1,6 +1,6 @@ #pragma once -#include <shared/logsink.h> +#include <libshared/logging/logsink.h> #include <stdint.h> #include <stdbool.h> diff --git a/windows/winnet/src/winnet/winnet.vcxproj b/windows/winnet/src/winnet/winnet.vcxproj index 5fb0a50ec5..c21f75b2c1 100644 --- a/windows/winnet/src/winnet/winnet.vcxproj +++ b/windows/winnet/src/winnet/winnet.vcxproj @@ -170,14 +170,14 @@ <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\shared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <ModuleDefinitionFile>winnet.def</ModuleDefinitionFile> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration)</AdditionalLibraryDirectories> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>libshared.lib;libcommon.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|Win32'"> @@ -190,7 +190,7 @@ <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\shared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -201,7 +201,7 @@ </Link> <Lib> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-Debug</AdditionalLibraryDirectories> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib</AdditionalDependencies> + <AdditionalDependencies>libshared.lib;libcommon.lib;Iphlpapi.lib</AdditionalDependencies> </Lib> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> @@ -214,12 +214,12 @@ <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\shared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>libshared.lib;libcommon.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration)</AdditionalLibraryDirectories> <ModuleDefinitionFile>winnet.def</ModuleDefinitionFile> </Link> @@ -234,7 +234,7 @@ <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\shared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -244,7 +244,7 @@ <ModuleDefinitionFile>winnet.def</ModuleDefinitionFile> </Link> <Lib> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib</AdditionalDependencies> + <AdditionalDependencies>libshared.lib;libcommon.lib;Iphlpapi.lib</AdditionalDependencies> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-Debug</AdditionalLibraryDirectories> </Lib> </ItemDefinitionGroup> @@ -260,7 +260,7 @@ <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\shared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -269,7 +269,7 @@ <GenerateDebugInformation>true</GenerateDebugInformation> <ModuleDefinitionFile>winnet.def</ModuleDefinitionFile> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration)</AdditionalLibraryDirectories> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>libshared.lib;libcommon.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> @@ -284,7 +284,7 @@ <ConformanceMode>true</ConformanceMode> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <LanguageStandard>stdcpplatest</LanguageStandard> - <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\shared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)..\..\..\libshared\src\;$(ProjectDir)..\..\..\windows-libraries\src\;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -293,7 +293,7 @@ <GenerateDebugInformation>true</GenerateDebugInformation> <ModuleDefinitionFile>winnet.def</ModuleDefinitionFile> <AdditionalLibraryDirectories>$(SolutionDir)/bin/$(Platform)-$(Configuration)</AdditionalLibraryDirectories> - <AdditionalDependencies>shared.lib;libcommon.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>libshared.lib;libcommon.lib;Iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> diff --git a/windows/winnet/winnet.sln b/windows/winnet/winnet.sln index a64d15d479..9a83e0d4a2 100644 --- a/windows/winnet/winnet.sln +++ b/windows/winnet/winnet.sln @@ -11,7 +11,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winnet", "src\winnet\winnet EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcommon", "..\windows-libraries\src\libcommon\libcommon.vcxproj", "{B52E2D10-A94A-4605-914A-2DCEF6A757EF}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shared", "..\shared\src\shared\shared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshared", "..\libshared\src\libshared\libshared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" + ProjectSection(ProjectDependencies) = postProject + {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/windows/winutil/extras.sln b/windows/winutil/extras.sln index 756ecbd9d6..02e5b42d6b 100644 --- a/windows/winutil/extras.sln +++ b/windows/winutil/extras.sln @@ -7,15 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "migration", "src\extras\mig ProjectSection(ProjectDependencies) = postProject {C075F50C-1A62-46D1-9494-02C8F48A9419} = {C075F50C-1A62-46D1-9494-02C8F48A9419} {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} = {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winutil", "src\winutil\winutil.vcxproj", "{C075F50C-1A62-46D1-9494-02C8F48A9419}" ProjectSection(ProjectDependencies) = postProject {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} = {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcommon", "..\windows-libraries\src\libcommon\libcommon.vcxproj", "{B52E2D10-A94A-4605-914A-2DCEF6A757EF}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshared", "..\libshared\src\libshared\libshared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" + ProjectSection(ProjectDependencies) = postProject + {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -48,6 +55,14 @@ Global {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x64.Build.0 = Release|x64 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.ActiveCfg = Release|Win32 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.Build.0 = Release|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x64.ActiveCfg = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x64.Build.0 = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x86.ActiveCfg = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x86.Build.0 = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x64.ActiveCfg = Release|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x64.Build.0 = Release|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x86.ActiveCfg = Release|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/windows/winutil/src/extras/migration/migration.cpp b/windows/winutil/src/extras/migration/migration.cpp index 0ee4d458fe..e5fdf3f5ef 100644 --- a/windows/winutil/src/extras/migration/migration.cpp +++ b/windows/winutil/src/extras/migration/migration.cpp @@ -1,34 +1,30 @@ #include "stdafx.h" #include <iostream> -#include "../../winutil/winutil.h" - -void WINUTIL_API ErrorSink(const char *errorMessage, void *) -{ - std::cout << "Error: " << errorMessage << std::endl; -} +#include <libshared/logging/stdoutlogger.h> +#include <winutil/winutil.h> int main() { - const auto status = WinUtil_MigrateAfterWindowsUpdate(ErrorSink, nullptr); + const auto status = WinUtil_MigrateAfterWindowsUpdate(shared::logging::StdoutLogger, nullptr); switch (status) { - case WINUTIL_MIGRATION_STATUS::SUCCESS: + case WINUTIL_MIGRATION_STATUS_SUCCESS: { std::wcout << L"Success" << std::endl; break; } - case WINUTIL_MIGRATION_STATUS::ABORTED: + case WINUTIL_MIGRATION_STATUS_ABORTED: { std::wcout << L"Aborted" << std::endl; break; } - case WINUTIL_MIGRATION_STATUS::NOTHING_TO_MIGRATE: + case WINUTIL_MIGRATION_STATUS_NOTHING_TO_MIGRATE: { std::wcout << L"Nothing to migrate" << std::endl; break; } - case WINUTIL_MIGRATION_STATUS::FAILED: + case WINUTIL_MIGRATION_STATUS_FAILED: { std::wcout << L"Failed" << std::endl; break; @@ -37,4 +33,3 @@ int main() return 0; } - diff --git a/windows/winutil/src/extras/migration/migration.vcxproj b/windows/winutil/src/extras/migration/migration.vcxproj index 0283a21c60..a030827149 100644 --- a/windows/winutil/src/extras/migration/migration.vcxproj +++ b/windows/winutil/src/extras/migration/migration.vcxproj @@ -100,11 +100,12 @@ <ConformanceMode>true</ConformanceMode> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <AdditionalIncludeDirectories>$(ProjectDir)../../../../winutil/src/;$(ProjectDir)../../../../libshared/src</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>winutil.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>libshared.lib;winutil.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> <AdditionalLibraryDirectories>$(SolutionDir)\bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> @@ -118,11 +119,12 @@ <ConformanceMode>true</ConformanceMode> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <AdditionalIncludeDirectories>$(ProjectDir)../../../../winutil/src/;$(ProjectDir)../../../../libshared/src</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>winutil.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>libshared.lib;winutil.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> <AdditionalLibraryDirectories>$(SolutionDir)\bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> @@ -138,13 +140,14 @@ <ConformanceMode>true</ConformanceMode> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <AdditionalIncludeDirectories>$(ProjectDir)../../../../winutil/src/;$(ProjectDir)../../../../libshared/src</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Console</SubSystem> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>winutil.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>libshared.lib;winutil.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> <AdditionalLibraryDirectories>$(SolutionDir)\bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> @@ -160,13 +163,14 @@ <ConformanceMode>true</ConformanceMode> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <AdditionalIncludeDirectories>$(ProjectDir)../../../../winutil/src/;$(ProjectDir)../../../../libshared/src</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Console</SubSystem> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>winutil.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>libshared.lib;winutil.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> <AdditionalLibraryDirectories>$(SolutionDir)\bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup> diff --git a/windows/winutil/src/winutil/winutil.cpp b/windows/winutil/src/winutil/winutil.cpp index 633e181779..4ea0ac27e3 100644 --- a/windows/winutil/src/winutil/winutil.cpp +++ b/windows/winutil/src/winutil/winutil.cpp @@ -1,7 +1,8 @@ #include "stdafx.h" #include "winutil.h" #include "migration.h" -#include "libcommon/valuemapper.h" +#include <libshared/logging/unwind.h> +#include <libcommon/valuemapper.h> #include <stdexcept> extern "C" @@ -9,8 +10,8 @@ WINUTIL_LINKAGE WINUTIL_MIGRATION_STATUS WINUTIL_API WinUtil_MigrateAfterWindowsUpdate( - WinUtilErrorSink errorSink, - void *errorSinkContext + MullvadLogSink logSink, + void *logSinkContext ) { try @@ -19,24 +20,20 @@ WinUtil_MigrateAfterWindowsUpdate( const common::ValueMapper<migration::MigrationStatus, WINUTIL_MIGRATION_STATUS> mapper = { - value_type(migration::MigrationStatus::Success, WINUTIL_MIGRATION_STATUS::SUCCESS), - value_type(migration::MigrationStatus::Aborted, WINUTIL_MIGRATION_STATUS::ABORTED), - value_type(migration::MigrationStatus::NothingToMigrate, WINUTIL_MIGRATION_STATUS::NOTHING_TO_MIGRATE), + value_type(migration::MigrationStatus::Success, WINUTIL_MIGRATION_STATUS_SUCCESS), + value_type(migration::MigrationStatus::Aborted, WINUTIL_MIGRATION_STATUS_ABORTED), + value_type(migration::MigrationStatus::NothingToMigrate, WINUTIL_MIGRATION_STATUS_NOTHING_TO_MIGRATE), }; return mapper.map(migration::MigrateAfterWindowsUpdate()); } catch (const std::exception &err) { - if (nullptr != errorSink) - { - errorSink(err.what(), errorSinkContext); - } - - return WINUTIL_MIGRATION_STATUS::FAILED; + shared::logging::UnwindAndLog(logSink, logSinkContext, err); + return WINUTIL_MIGRATION_STATUS_FAILED; } catch (...) { - return WINUTIL_MIGRATION_STATUS::FAILED; + return WINUTIL_MIGRATION_STATUS_FAILED; } } diff --git a/windows/winutil/src/winutil/winutil.h b/windows/winutil/src/winutil/winutil.h index 8939aadc8f..c29a57a079 100644 --- a/windows/winutil/src/winutil/winutil.h +++ b/windows/winutil/src/winutil/winutil.h @@ -1,6 +1,7 @@ #pragma once -#include <cstdint> +#include <libshared/logging/logsink.h> +#include <stdint.h> #ifdef WINUTIL_EXPORTS #define WINUTIL_LINKAGE __declspec(dllexport) @@ -10,19 +11,17 @@ #define WINUTIL_API __stdcall -typedef void (WINUTIL_API *WinUtilErrorSink)(const char *errorMessage, void *context); - -enum class WINUTIL_MIGRATION_STATUS : uint32_t +enum WINUTIL_MIGRATION_STATUS { - SUCCESS = 0, + WINUTIL_MIGRATION_STATUS_SUCCESS = 0, // Destination already exists - ABORTED, + WINUTIL_MIGRATION_STATUS_ABORTED, // There's no backup - NOTHING_TO_MIGRATE, + WINUTIL_MIGRATION_STATUS_NOTHING_TO_MIGRATE, - FAILED, + WINUTIL_MIGRATION_STATUS_FAILED, }; extern "C" @@ -30,6 +29,6 @@ WINUTIL_LINKAGE WINUTIL_MIGRATION_STATUS WINUTIL_API WinUtil_MigrateAfterWindowsUpdate( - WinUtilErrorSink errorSink, - void *errorSinkContext + MullvadLogSink logSink, + void *logSinkContext ); diff --git a/windows/winutil/src/winutil/winutil.vcxproj b/windows/winutil/src/winutil/winutil.vcxproj index 7d4e17dbff..3113553ce3 100644 --- a/windows/winutil/src/winutil/winutil.vcxproj +++ b/windows/winutil/src/winutil/winutil.vcxproj @@ -123,13 +123,13 @@ <ConformanceMode>true</ConformanceMode> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <AdditionalIncludeDirectories>$(ProjectDir)../../../windows-libraries/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../libshared/src/;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../../../</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>libcommon.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>libshared.lib;libcommon.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> <ModuleDefinitionFile>winutil.def</ModuleDefinitionFile> </Link> </ItemDefinitionGroup> @@ -143,13 +143,13 @@ <ConformanceMode>true</ConformanceMode> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <AdditionalIncludeDirectories>$(ProjectDir)../../../windows-libraries/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../libshared/src/;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../../../</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>libcommon.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>libshared.lib;libcommon.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> <ModuleDefinitionFile>winutil.def</ModuleDefinitionFile> </Link> </ItemDefinitionGroup> @@ -165,7 +165,7 @@ <ConformanceMode>true</ConformanceMode> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <AdditionalIncludeDirectories>$(ProjectDir)../../../windows-libraries/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../libshared/src/;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../../../</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -173,7 +173,7 @@ <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>libcommon.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>libshared.lib;libcommon.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> <ModuleDefinitionFile>winutil.def</ModuleDefinitionFile> </Link> </ItemDefinitionGroup> @@ -189,7 +189,7 @@ <ConformanceMode>true</ConformanceMode> <LanguageStandard>stdcpplatest</LanguageStandard> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <AdditionalIncludeDirectories>$(ProjectDir)../../../windows-libraries/src/</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(ProjectDir)../../../libshared/src/;$(ProjectDir)../../../windows-libraries/src/;$(ProjectDir)../../../</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Windows</SubSystem> @@ -197,7 +197,7 @@ <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <AdditionalLibraryDirectories>$(SolutionDir)bin\$(Platform)-$(Configuration)\</AdditionalLibraryDirectories> - <AdditionalDependencies>libcommon.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>libshared.lib;libcommon.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> <ModuleDefinitionFile>winutil.def</ModuleDefinitionFile> </Link> </ItemDefinitionGroup> diff --git a/windows/winutil/winutil.sln b/windows/winutil/winutil.sln index 8109de4e94..79dc0dc851 100644 --- a/windows/winutil/winutil.sln +++ b/windows/winutil/winutil.sln @@ -6,10 +6,16 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winutil", "src\winutil\winutil.vcxproj", "{C075F50C-1A62-46D1-9494-02C8F48A9419}" ProjectSection(ProjectDependencies) = postProject {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} = {EE69EA4A-CF71-4B88-866B-957F60C4CE0D} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcommon", "..\windows-libraries\src\libcommon\libcommon.vcxproj", "{B52E2D10-A94A-4605-914A-2DCEF6A757EF}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshared", "..\libshared\src\libshared\libshared.vcxproj", "{EE69EA4A-CF71-4B88-866B-957F60C4CE0D}" + ProjectSection(ProjectDependencies) = postProject + {B52E2D10-A94A-4605-914A-2DCEF6A757EF} = {B52E2D10-A94A-4605-914A-2DCEF6A757EF} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -34,6 +40,14 @@ Global {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x64.Build.0 = Release|x64 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.ActiveCfg = Release|Win32 {B52E2D10-A94A-4605-914A-2DCEF6A757EF}.Release|x86.Build.0 = Release|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x64.ActiveCfg = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x64.Build.0 = Debug|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x86.ActiveCfg = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Debug|x86.Build.0 = Debug|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x64.ActiveCfg = Release|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x64.Build.0 = Release|x64 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x86.ActiveCfg = Release|Win32 + {EE69EA4A-CF71-4B88-866B-957F60C4CE0D}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE |
