]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
VPN: Support adding multiple configurations in one shot
authorRoopesh Chander <roop@roopc.net>
Wed, 31 Oct 2018 08:59:54 +0000 (14:29 +0530)
committerRoopesh Chander <roop@roopc.net>
Wed, 31 Oct 2018 08:59:54 +0000 (14:29 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/VPN/TunnelsManager.swift

index d9b219577dac0ea645ac439ae45d4721c70f389c..79d5ae870db90c2d0d0d5257a2f694ddf35fea05 100644 (file)
@@ -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)