summaryrefslogtreecommitdiffhomepage
path: root/windows
diff options
context:
space:
mode:
authorOdd Stranne <odd@mullvad.net>2018-06-04 14:51:30 +0200
committerOdd Stranne <odd@mullvad.net>2018-06-18 08:45:15 +0200
commit73ee6af8a30640537ce329f52f67d6d4e0a15f1c (patch)
tree60e638c0429dd81ded1911d3f9b279dccb9f0696 /windows
parent276600656eb68d3fd3da7db441871b44d7759236 (diff)
downloadmullvadvpn-73ee6af8a30640537ce329f52f67d6d4e0a15f1c.tar.xz
mullvadvpn-73ee6af8a30640537ce329f52f67d6d4e0a15f1c.zip
Provide config sink to ConfigManager
Diffstat (limited to 'windows')
-rw-r--r--windows/windns/src/windns/configmanager.cpp15
-rw-r--r--windows/windns/src/windns/configmanager.h9
-rw-r--r--windows/windns/src/windns/windnscontext.cpp2
3 files changed, 25 insertions, 1 deletions
diff --git a/windows/windns/src/windns/configmanager.cpp b/windows/windns/src/windns/configmanager.cpp
index 4ebdfcfbae..bff2cf4264 100644
--- a/windows/windns/src/windns/configmanager.cpp
+++ b/windows/windns/src/windns/configmanager.cpp
@@ -6,9 +6,11 @@
ConfigManager::ConfigManager
(
const std::vector<std::wstring> &servers,
+ const ConfigSinkInfo &configSinkInfo,
std::shared_ptr<ITraceSink> traceSink
)
: m_servers(servers)
+ , m_configSinkInfo(configSinkInfo)
, m_traceSink(traceSink)
{
}
@@ -63,6 +65,8 @@ ConfigManager::UpdateType ConfigManager::updateConfig(const DnsConfig &previous,
{
XTRACE(L"Creating new interface configuration entry");
m_configs.insert(std::make_pair(configIndex, previous));
+
+ exportConfigs();
}
return UpdateType::WinDnsEnforced;
@@ -82,6 +86,8 @@ ConfigManager::UpdateType ConfigManager::updateConfig(const DnsConfig &previous,
iter->second = target;
}
+ exportConfigs();
+
return UpdateType::External;
}
@@ -109,3 +115,12 @@ bool ConfigManager::internalUpdate(const DnsConfig &config)
return std::equal(m_servers.begin(), m_servers.end(), updatedServers->begin(), updatedServers->end());
}
+
+void ConfigManager::exportConfigs()
+{
+ //
+ // TODO: Serialize all configs and send to config sink
+ //
+ // serialize as array of DnsConfig?
+ //
+}
diff --git a/windows/windns/src/windns/configmanager.h b/windows/windns/src/windns/configmanager.h
index 1344e23857..65c2000c99 100644
--- a/windows/windns/src/windns/configmanager.h
+++ b/windows/windns/src/windns/configmanager.h
@@ -1,6 +1,7 @@
#pragma once
#include "dnsconfig.h"
+#include "clientsinkinfo.h"
#include "itracesink.h"
#include <map>
#include <string>
@@ -50,6 +51,7 @@ public:
ConfigManager
(
const std::vector<std::wstring> &servers,
+ const ConfigSinkInfo &configSinkInfo,
std::shared_ptr<ITraceSink> traceSink = std::make_shared<NullTraceSink>()
);
@@ -89,7 +91,9 @@ public:
private:
std::mutex m_mutex;
+
std::vector<std::wstring> m_servers;
+ ConfigSinkInfo m_configSinkInfo;
//
// Organize configs based on their system assigned index.
@@ -102,4 +106,9 @@ private:
// Tests, by looking at the servers, whether this is an update initied by WINDNS.
//
bool internalUpdate(const DnsConfig &config);
+
+ //
+ // Bundle the current config details and send them into the config sink.
+ //
+ void exportConfigs();
};
diff --git a/windows/windns/src/windns/windnscontext.cpp b/windows/windns/src/windns/windnscontext.cpp
index 8daff46145..aac564f6a6 100644
--- a/windows/windns/src/windns/windnscontext.cpp
+++ b/windows/windns/src/windns/windnscontext.cpp
@@ -13,7 +13,7 @@ bool WinDnsContext::set(const std::vector<std::wstring> &servers, const ClientSi
{
m_sinkInfo = sinkInfo;
- m_configManager = std::make_shared<ConfigManager>(servers);
+ m_configManager = std::make_shared<ConfigManager>(servers, m_sinkInfo.configSinkInfo);
//
// Register interface configuration monitoring.