diff options
| -rw-r--r-- | windows/windns/src/windns/configmanager.cpp | 6 | ||||
| -rw-r--r-- | windows/windns/src/windns/configmanager.h | 5 | ||||
| -rw-r--r-- | windows/windns/src/windns/windns.cpp | 13 | ||||
| -rw-r--r-- | windows/windns/src/windns/windnscontext.cpp | 40 | ||||
| -rw-r--r-- | windows/windns/src/windns/windnscontext.h | 1 |
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; }; |
