diff options
| author | Odd Stranne <odd@mullvad.net> | 2018-05-31 23:17:09 +0200 |
|---|---|---|
| committer | Odd Stranne <odd@mullvad.net> | 2018-06-18 08:45:14 +0200 |
| commit | 23525e2635b88a90813badf69a0569bcf3ffcb88 (patch) | |
| tree | 68db0fd75d8daa26b1004b7dfa05f9b7e5a50956 | |
| parent | 3fc904d6278ed3a0b1fdbc8ed98941133a87376c (diff) | |
| download | mullvadvpn-23525e2635b88a90813badf69a0569bcf3ffcb88.tar.xz mullvadvpn-23525e2635b88a90813badf69a0569bcf3ffcb88.zip | |
Update WINDNS public API
| -rw-r--r-- | windows/windns/src/windns/clientsinkinfo.h | 21 | ||||
| -rw-r--r-- | windows/windns/src/windns/windns.cpp | 25 | ||||
| -rw-r--r-- | windows/windns/src/windns/windns.h | 29 |
3 files changed, 72 insertions, 3 deletions
diff --git a/windows/windns/src/windns/clientsinkinfo.h b/windows/windns/src/windns/clientsinkinfo.h new file mode 100644 index 0000000000..db42485d8e --- /dev/null +++ b/windows/windns/src/windns/clientsinkinfo.h @@ -0,0 +1,21 @@ +#pragma once + +#include "windns.h" + +struct ErrorSinkInfo +{ + WinDnsErrorSink sink; + void *context; +}; + +struct ConfigSinkInfo +{ + WinDnsConfigSink sink; + void *context; +}; + +struct ClientSinkInfo +{ + ErrorSinkInfo errorSinkInfo; + ConfigSinkInfo configSinkInfo; +}; diff --git a/windows/windns/src/windns/windns.cpp b/windows/windns/src/windns/windns.cpp index 7a9977951f..741d0f3670 100644 --- a/windows/windns/src/windns/windns.cpp +++ b/windows/windns/src/windns/windns.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "windns.h" #include "windnscontext.h" +#include "clientsinkinfo.h" #include <vector> #include <string> @@ -85,7 +86,9 @@ bool WINDNS_API WinDns_Set( const wchar_t **servers, - uint32_t numServers + uint32_t numServers, + WinDnsConfigSink configSink, + void *configContext ) { if (nullptr == g_Context) @@ -108,7 +111,12 @@ WinDns_Set( // Onwards. // - return g_Context->set(MakeStringArray(servers, numServers), g_ErrorSink, g_ErrorContext); + ClientSinkInfo sinkInfo; + + sinkInfo.errorSinkInfo = ErrorSinkInfo{ g_ErrorSink, g_ErrorContext }; + sinkInfo.configSinkInfo = ConfigSinkInfo{ configSink, configContext }; + + return g_Context->set(MakeStringArray(servers, numServers), sinkInfo); } catch (std::exception &err) { @@ -154,3 +162,16 @@ WinDns_Reset( return false; } } + +WINDNS_LINKAGE +bool +WINDNS_API +WinDns_Recover( + const void *configData, + uint32_t dataLength +) +{ + // TODO: smart stuff + + return false; +} diff --git a/windows/windns/src/windns/windns.h b/windows/windns/src/windns/windns.h index 000913ad53..734719ca80 100644 --- a/windows/windns/src/windns/windns.h +++ b/windows/windns/src/windns/windns.h @@ -18,6 +18,7 @@ /////////////////////////////////////////////////////////////////////////////// typedef void (WINDNS_API *WinDnsErrorSink)(const char *errorMessage, void *context); +typedef void (WINDNS_API *WinDnsConfigSink)(const void *configData, uint32_t dataLength, void *context); // // WinDns_Initialize: @@ -55,13 +56,20 @@ WinDns_Deinitialize( // // Configure which DNS servers should be used and start enforcing these settings. // +// The 'configSink' will receive periodic callbacks with updated config data +// until you call WinDns_Reset. +// +// You should persist the config data in preparation for an eventual recovery. +// extern "C" WINDNS_LINKAGE bool WINDNS_API WinDns_Set( const wchar_t **servers, - uint32_t numServers + uint32_t numServers, + WinDnsConfigSink configSink, + void *configContext ); // @@ -72,9 +80,28 @@ WinDns_Set( // (Also taking into account external changes to DNS settings that have occurred // during the period of enforcing specific settings.) // +// It's safe to discard persisted config data once WinDns_Reset returns 'true'. +// extern "C" WINDNS_LINKAGE bool WINDNS_API WinDns_Reset( ); + +// +// WinDns_Recover: +// +// Recover adapter configurations from a previously persisted state. +// +// This is useful if the machine has been abruptly powered off and +// WINDNS did not get a chance to restore settings. +// +extern "C" +WINDNS_LINKAGE +bool +WINDNS_API +WinDns_Recover( + const void *configData, + uint32_t dataLength +); |
