aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
diff options
context:
space:
mode:
Diffstat (limited to 'WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift')
-rw-r--r--WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift38
1 files changed, 22 insertions, 16 deletions
diff --git a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
index 1a51573..04e9637 100644
--- a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
+++ b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
@@ -88,8 +88,28 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
return
}
- let wireguardSettings = packetTunnelSettingsGenerator.generateWireGuardSettings()
- let handle = connect(interfaceName: tunnelConfiguration.interface.name, settings: wireguardSettings, fd: fd)
+ let wireguardSettings = packetTunnelSettingsGenerator.uapiConfiguration()
+
+ var handle: Int32 = -1
+
+ 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, staticMessage: "Network change detected, calling wgSetConfig")
+ wgSetConfig(handle, endpointGoString)
+ }
+ }
+ networkMonitor?.start(queue: DispatchQueue(label: "NetworkMonitor"))
+
+ handle = connect(interfaceName: tunnelConfiguration.interface.name, settings: wireguardSettings, fd: fd)
if handle < 0 {
wg_log(.error, staticMessage: "Starting tunnel failed: Could not start WireGuard")
@@ -113,20 +133,6 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
startTunnelCompletionHandler(nil /* No errors */)
}
}
-
- networkMonitor = NWPathMonitor()
- networkMonitor?.pathUpdateHandler = { path in
- if path.status == .satisfied {
- let endpointString = packetTunnelSettingsGenerator.endpointFromSettings()
-
- let endpointGoString = endpointString.withCString {
- gostring_t(p: $0, n: endpointString.utf8.count)
- }
-
- wgSetConfig(handle, endpointGoString)
- }
- }
- networkMonitor?.start(queue: DispatchQueue(label: "NetworkMonitor"))
}
/// Begin the process of stopping the tunnel.