summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-04-24 14:30:49 +0200
committerDavid Lönnhager <david.l@mullvad.net>2020-04-24 16:51:47 +0200
commit318286740ded413a1830196b094b324e928b85da (patch)
tree806ef36af829dfb1e95555a0589a6cbbb133fd56
parentf5e804513155d692cc34aaafa4ada3e24bb01031 (diff)
downloadmullvadvpn-318286740ded413a1830196b094b324e928b85da.tar.xz
mullvadvpn-318286740ded413a1830196b094b324e928b85da.zip
Optimize EnableIpv6ForAdapter in winnet
-rw-r--r--windows/winnet/src/winnet/netconfig.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/windows/winnet/src/winnet/netconfig.cpp b/windows/winnet/src/winnet/netconfig.cpp
index 2a8e2e1c64..7fd7b38869 100644
--- a/windows/winnet/src/winnet/netconfig.cpp
+++ b/windows/winnet/src/winnet/netconfig.cpp
@@ -5,6 +5,7 @@
#include <windows.h>
#include <netcfgx.h>
#include <devguid.h>
+#include <libcommon/registry/registry.h>
#include <libcommon/error.h>
#include <libcommon/string.h>
#include <libcommon/memory.h>
@@ -143,6 +144,34 @@ void SetIpv6BindingForBindName(INetCfg *netCfg, const std::wstring &bindName, bo
void EnableIpv6ForAdapter(const std::wstring &adapterGuid)
{
+ try
+ {
+ //
+ // Avoid using the COM objects unless necessary
+ // due to slow performance.
+ //
+
+ const auto key = common::registry::Registry::OpenKey(
+ HKEY_LOCAL_MACHINE,
+ L"SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Linkage"
+ );
+ const auto bindings = key->readStringArray(L"Bind");
+
+ std::wstring matchString = std::wstring(L"\\Device\\").append(adapterGuid);
+
+ for (auto it = bindings.begin(); it != bindings.end(); ++it)
+ {
+ if (0 == _wcsicmp(it->c_str(), matchString.c_str()))
+ {
+ // return from function
+ return;
+ }
+ }
+ }
+ catch (...)
+ {
+ }
+
//
// Initialize COM
//