aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/VPN
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2018-10-31 14:29:54 +0530
committerRoopesh Chander <roop@roopc.net>2018-10-31 14:29:54 +0530
commit439f8f5a150cfb3384fd6c06dfc47a74e481d7c8 (patch)
tree9fc72c701660fdf538c96b4c86141a00eb56e1b5 /WireGuard/WireGuard/VPN
parentwireguard-go-bridge: extract version for consumption by network extension (diff)
downloadwireguard-apple-439f8f5a150cfb3384fd6c06dfc47a74e481d7c8.tar.xz
wireguard-apple-439f8f5a150cfb3384fd6c06dfc47a74e481d7c8.zip
VPN: Support adding multiple configurations in one shot
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard/WireGuard/VPN')
-rw-r--r--WireGuard/WireGuard/VPN/TunnelsManager.swift21
1 files changed, 21 insertions, 0 deletions
diff --git a/WireGuard/WireGuard/VPN/TunnelsManager.swift b/WireGuard/WireGuard/VPN/TunnelsManager.swift
index d9b2195..79d5ae8 100644
--- a/WireGuard/WireGuard/VPN/TunnelsManager.swift
+++ b/WireGuard/WireGuard/VPN/TunnelsManager.swift
@@ -97,6 +97,27 @@ class TunnelsManager {
}
}
+ func addMultiple(tunnelConfigurations: [TunnelConfiguration], completionHandler: @escaping (Int, Error?) -> Void) {
+ addMultiple(tunnelConfigurations: tunnelConfigurations[0...], completionHandler: completionHandler)
+ }
+
+ private func addMultiple(tunnelConfigurations: ArraySlice<TunnelConfiguration>, completionHandler: @escaping (Int, Error?) -> Void) {
+ assert(!tunnelConfigurations.isEmpty)
+ let head = tunnelConfigurations.first!
+ let tail = tunnelConfigurations[1 ..< tunnelConfigurations.count]
+ self.add(tunnelConfiguration: head) { [weak self] (tunnel, error) in
+ if (error != nil) {
+ completionHandler(tail.count, error)
+ } else if (tail.isEmpty) {
+ completionHandler(0, nil)
+ } else {
+ DispatchQueue.main.async {
+ self?.addMultiple(tunnelConfigurations: tail, completionHandler: completionHandler)
+ }
+ }
+ }
+ }
+
func modify(tunnel: TunnelContainer, with tunnelConfiguration: TunnelConfiguration, completionHandler: @escaping (Error?) -> Void) {
let tunnelName = tunnelConfiguration.interface.name
assert(!tunnelName.isEmpty)