diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-05-07 16:19:56 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-05-13 17:56:36 +0200 |
| commit | 99259312fa3aef722a01bfefe45778f6d9c11b24 (patch) | |
| tree | 173116f7672878bd77087f501f7187d8083536f2 /windows | |
| parent | d2b88b052ee1300250fcba9ba30b9c21c51dd20c (diff) | |
| download | mullvadvpn-99259312fa3aef722a01bfefe45778f6d9c11b24.tar.xz mullvadvpn-99259312fa3aef722a01bfefe45778f6d9c11b24.zip | |
Update route manager on Windows
Diffstat (limited to 'windows')
| -rw-r--r-- | windows/winnet/src/winnet/routing/routemanager.cpp | 49 | ||||
| -rw-r--r-- | windows/winnet/src/winnet/routing/routemanager.h | 1 | ||||
| -rw-r--r-- | windows/winnet/src/winnet/winnet.cpp | 29 | ||||
| -rw-r--r-- | windows/winnet/src/winnet/winnet.h | 7 |
4 files changed, 65 insertions, 21 deletions
diff --git a/windows/winnet/src/winnet/routing/routemanager.cpp b/windows/winnet/src/winnet/routing/routemanager.cpp index 81ee4e3d96..9d5b36ff98 100644 --- a/windows/winnet/src/winnet/routing/routemanager.cpp +++ b/windows/winnet/src/winnet/routing/routemanager.cpp @@ -209,27 +209,7 @@ RouteManager::~RouteManager() m_routeMonitorV4.reset(); m_routeMonitorV6.reset(); - // - // Delete all routes owned by us. - // - - for (const auto &record : m_routes) - { - try - { - deleteFromRoutingTable(record.registeredRoute); - } - catch (const std::exception &ex) - { - std::wstringstream ss; - - ss << L"Failed to delete route as part of cleaning up, Route: " - << FormatRegisteredRoute(record.registeredRoute); - - m_logSink->error(common::string::ToAnsi(ss.str()).c_str()); - m_logSink->error(ex.what()); - } - } + deleteAppliedRoutes(); } void RouteManager::addRoutes(const std::vector<Route> &routes) @@ -302,6 +282,33 @@ void RouteManager::deleteRoutes(const std::vector<Route> &routes) } } +void RouteManager::deleteAppliedRoutes() +{ + // + // Delete all routes owned by us. + // + + for (const auto &record : m_routes) + { + try + { + deleteFromRoutingTable(record.registeredRoute); + } + catch (const std::exception & ex) + { + std::wstringstream ss; + + ss << L"Failed to delete route while clearing applied routes, Route: " + << FormatRegisteredRoute(record.registeredRoute); + + m_logSink->error(common::string::ToAnsi(ss.str()).c_str()); + m_logSink->error(ex.what()); + } + } + + m_routes.clear(); +} + RouteManager::CallbackHandle RouteManager::registerDefaultRouteChangedCallback(DefaultRouteChangedCallback callback) { AutoRecursiveLockType lock(m_defaultRouteCallbacksLock); diff --git a/windows/winnet/src/winnet/routing/routemanager.h b/windows/winnet/src/winnet/routing/routemanager.h index 92c712e25d..07cc7dbf40 100644 --- a/windows/winnet/src/winnet/routing/routemanager.h +++ b/windows/winnet/src/winnet/routing/routemanager.h @@ -32,6 +32,7 @@ public: void addRoutes(const std::vector<Route> &routes); void deleteRoutes(const std::vector<Route> &routes); + void deleteAppliedRoutes(); using DefaultRouteChangedEventType = DefaultRouteMonitor::EventType; diff --git a/windows/winnet/src/winnet/winnet.cpp b/windows/winnet/src/winnet/winnet.cpp index ac56e94ff6..c52fc57d60 100644 --- a/windows/winnet/src/winnet/winnet.cpp +++ b/windows/winnet/src/winnet/winnet.cpp @@ -385,6 +385,35 @@ extern "C" WINNET_LINKAGE
bool
WINNET_API
+WinNet_DeleteAppliedRoutes()
+{
+ AutoLockType lock(g_RouteManagerLock);
+
+ if (nullptr == g_RouteManager)
+ {
+ return false;
+ }
+
+ try
+ {
+ g_RouteManager->deleteAppliedRoutes();
+ return true;
+ }
+ catch (const std::exception & err)
+ {
+ common::error::UnwindException(err, g_RouteManagerLogSink);
+ return false;
+ }
+ catch (...)
+ {
+ return false;
+ }
+}
+
+extern "C"
+WINNET_LINKAGE
+bool
+WINNET_API
WinNet_DeleteRoute(
const WINNET_ROUTE *route
)
diff --git a/windows/winnet/src/winnet/winnet.h b/windows/winnet/src/winnet/winnet.h index 98b0083f03..3597b01a26 100644 --- a/windows/winnet/src/winnet/winnet.h +++ b/windows/winnet/src/winnet/winnet.h @@ -173,6 +173,13 @@ WinNet_DeleteRoute( const WINNET_ROUTE *route ); +extern "C" +WINNET_LINKAGE +bool +WINNET_API +WinNet_DeleteAppliedRoutes( +); + enum WINNET_DEFAULT_ROUTE_CHANGED_EVENT_TYPE { // Best default route changed. |
