diff options
| author | David Lönnhager <david.l@mullvad.net> | 2022-03-16 11:55:37 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2022-03-18 10:27:41 +0100 |
| commit | 57c3f78e298be5168dc2e69b7ba991128f7e12ad (patch) | |
| tree | 7371fc16e1869bbda206b1f2ce2b4ac333eaecdf | |
| parent | 38bcad1ba806f26f307a9f5ea91d53f4f83d994f (diff) | |
| download | mullvadvpn-57c3f78e298be5168dc2e69b7ba991128f7e12ad.tar.xz mullvadvpn-57c3f78e298be5168dc2e69b7ba991128f7e12ad.zip | |
Only send new addresses to the ST driver if they have changed
| -rw-r--r-- | talpid-core/src/split_tunnel/windows/mod.rs | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/talpid-core/src/split_tunnel/windows/mod.rs b/talpid-core/src/split_tunnel/windows/mod.rs index 5102039e47..e8b5455434 100644 --- a/talpid-core/src/split_tunnel/windows/mod.rs +++ b/talpid-core/src/split_tunnel/windows/mod.rs @@ -362,6 +362,8 @@ impl SplitTunnel { } }; + let mut previous_addresses = (None, None, None, None); + while let Ok((request, response_tx)) = rx.recv() { let response = match request { Request::SetPaths(paths) => { @@ -397,9 +399,27 @@ impl SplitTunnel { tunnel_ipv4 = None; tunnel_ipv6 = None; } - handle - .register_ips(tunnel_ipv4, tunnel_ipv6, internet_ipv4, internet_ipv6) - .map_err(Error::RegisterIps) + if previous_addresses.0 == tunnel_ipv4 + && previous_addresses.1 == tunnel_ipv6 + && previous_addresses.2 == internet_ipv4 + && previous_addresses.3 == internet_ipv6 + { + Ok(()) + } else { + let result = handle + .register_ips( + tunnel_ipv4, + tunnel_ipv6, + internet_ipv4, + internet_ipv6, + ) + .map_err(Error::RegisterIps); + if result.is_ok() { + previous_addresses = + (tunnel_ipv4, tunnel_ipv6, internet_ipv4, internet_ipv6); + } + result + } } }; if response_tx.send(response).is_err() { |
