summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--windows/windns/src/windns/configmanager.cpp6
-rw-r--r--windows/windns/src/windns/configmanager.h5
-rw-r--r--windows/windns/src/windns/windns.cpp13
-rw-r--r--windows/windns/src/windns/windnscontext.cpp40
-rw-r--r--windows/windns/src/windns/windnscontext.h1
5 files changed, 35 insertions, 30 deletions
diff --git a/windows/windns/src/windns/configmanager.cpp b/windows/windns/src/windns/configmanager.cpp
index 2c5ddb065f..138bbd5f75 100644
--- a/windows/windns/src/windns/configmanager.cpp
+++ b/windows/windns/src/windns/configmanager.cpp
@@ -31,6 +31,12 @@ void ConfigManager::updateServers(const std::vector<std::wstring> &servers)
m_servers = servers;
}
+void ConfigManager::updateConfigSink(const ConfigSinkInfo &configSinkInfo)
+{
+ XTRACE(L"Updating config sink");
+ m_configSinkInfo = configSinkInfo;
+}
+
const std::vector<std::wstring> &ConfigManager::getServers() const
{
return m_servers;
diff --git a/windows/windns/src/windns/configmanager.h b/windows/windns/src/windns/configmanager.h
index f677f56e8b..66c2152d5a 100644
--- a/windows/windns/src/windns/configmanager.h
+++ b/windows/windns/src/windns/configmanager.h
@@ -68,6 +68,11 @@ public:
void updateServers(const std::vector<std::wstring> &servers);
//
+ // Update the callback used for persisting settings.
+ //
+ void updateConfigSink(const ConfigSinkInfo &configSinkInfo);
+
+ //
// Get the current set of servers used for overriding DNS settings.
//
const std::vector<std::wstring> &getServers() const;
diff --git a/windows/windns/src/windns/windns.cpp b/windows/windns/src/windns/windns.cpp
index e2ee3e841d..728df4b173 100644
--- a/windows/windns/src/windns/windns.cpp
+++ b/windows/windns/src/windns/windns.cpp
@@ -100,19 +100,6 @@ WinDns_Set(
try
{
- //
- // TODO: This is a temporary hack to enable alpha version. Review.
- //
-
- delete g_Context;
- g_Context = nullptr;
-
- g_Context = new WinDnsContext;
-
- //
- // Onwards.
- //
-
ClientSinkInfo sinkInfo;
sinkInfo.errorSinkInfo = ErrorSinkInfo{ g_ErrorSink, g_ErrorContext };
diff --git a/windows/windns/src/windns/windnscontext.cpp b/windows/windns/src/windns/windnscontext.cpp
index 5bcd986bf6..50dfa2519d 100644
--- a/windows/windns/src/windns/windnscontext.cpp
+++ b/windows/windns/src/windns/windnscontext.cpp
@@ -12,27 +12,35 @@ WinDnsContext::WinDnsContext()
bool WinDnsContext::set(const std::vector<std::wstring> &servers, const ClientSinkInfo &sinkInfo)
{
- m_sinkInfo = sinkInfo;
+ if (nullptr == m_configManager)
+ {
+ m_configManager = std::make_shared<ConfigManager>(servers, sinkInfo.configSinkInfo);
- m_configManager = std::make_shared<ConfigManager>(servers, m_sinkInfo.configSinkInfo);
+ //
+ // Register interface configuration monitoring.
+ //
- //
- // Register interface configuration monitoring.
- //
+ auto eventSink = std::make_shared<NetConfigEventSink>(m_connection, m_configManager);
+ auto eventDispatcher = CComPtr<wmi::IEventDispatcher>(new wmi::ModificationEventDispatcher(eventSink));
- auto eventSink = std::make_shared<NetConfigEventSink>(m_connection, m_configManager);
- auto eventDispatcher = CComPtr<wmi::IEventDispatcher>(new wmi::ModificationEventDispatcher(eventSink));
+ m_notification = std::make_unique<wmi::Notification>(m_connection, eventDispatcher);
- m_notification = std::make_unique<wmi::Notification>(m_connection, eventDispatcher);
+ m_notification->activate
+ (
+ L"SELECT * "
+ L"FROM __InstanceModificationEvent "
+ L"WITHIN 1 "
+ L"WHERE TargetInstance ISA 'Win32_NetworkAdapterConfiguration'"
+ L"AND TargetInstance.IPEnabled = True"
+ );
+ }
+ else
+ {
+ ConfigManager::Mutex mutex(*m_configManager);
- m_notification->activate
- (
- L"SELECT * "
- L"FROM __InstanceModificationEvent "
- L"WITHIN 1 "
- L"WHERE TargetInstance ISA 'Win32_NetworkAdapterConfiguration'"
- L"AND TargetInstance.IPEnabled = True"
- );
+ m_configManager->updateServers(servers);
+ m_configManager->updateConfigSink(sinkInfo.configSinkInfo);
+ }
//
// Discover all active interfaces and apply our DNS settings.
diff --git a/windows/windns/src/windns/windnscontext.h b/windows/windns/src/windns/windnscontext.h
index d6d3ad5a56..19e17550cf 100644
--- a/windows/windns/src/windns/windnscontext.h
+++ b/windows/windns/src/windns/windnscontext.h
@@ -29,5 +29,4 @@ private:
std::shared_ptr<wmi::Connection> m_connection;
std::shared_ptr<ConfigManager> m_configManager;
std::unique_ptr<wmi::Notification> m_notification;
- ClientSinkInfo m_sinkInfo;
};