diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-12-12 00:45:50 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-12-12 01:11:43 +0100 |
commit | 034a1a12f7849276823546f369b00507dc8029ce (patch) | |
tree | 47ad6263978713be38e331c877602ba622e6d9d1 /WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift | |
parent | Fixed a potential race condition, better naming on PacketTunnelSettingsGenerator methods (diff) | |
download | wireguard-apple-034a1a12f7849276823546f369b00507dc8029ce.tar.xz wireguard-apple-034a1a12f7849276823546f369b00507dc8029ce.zip |
Supply missing pieces of path change
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r-- | WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift index 04e9637..f5f0296 100644 --- a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift +++ b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift @@ -95,16 +95,18 @@ class PacketTunnelProvider: NEPacketTunnelProvider { networkMonitor = NWPathMonitor() networkMonitor?.pathUpdateHandler = { path in guard handle >= 0 else { return } - if path.status == .satisfied { - let endpointString = packetTunnelSettingsGenerator.endpointUapiConfiguration() - - let endpointGoString = endpointString.withCString { - gostring_t(p: $0, n: endpointString.utf8.count) + wg_log(.debug, message: "Network change detected, re-establishing sockets and IPs: \(path.availableInterfaces)") + let endpointString = packetTunnelSettingsGenerator.endpointUapiConfiguration(currentListenPort: wgGetListenPort(handle)) + let err = endpointString.withCString { + wgSetConfig(handle, gostring_t(p: $0, n: endpointString.utf8.count)) + } + if err == -EADDRINUSE { + let endpointString = packetTunnelSettingsGenerator.endpointUapiConfiguration(currentListenPort: 0) + _ = endpointString.withCString { + wgSetConfig(handle, gostring_t(p: $0, n: endpointString.utf8.count)) + } } - - wg_log(.debug, staticMessage: "Network change detected, calling wgSetConfig") - wgSetConfig(handle, endpointGoString) } } networkMonitor?.start(queue: DispatchQueue(label: "NetworkMonitor")) |