]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
VPN: Better error messages
authorRoopesh Chander <roop@roopc.net>
Mon, 29 Oct 2018 18:54:50 +0000 (00:24 +0530)
committerRoopesh Chander <roop@roopc.net>
Mon, 29 Oct 2018 18:54:50 +0000 (00:24 +0530)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/iOS/TunnelDetailTableViewController.swift
WireGuard/WireGuard/UI/iOS/TunnelsListTableViewController.swift
WireGuard/WireGuard/VPN/TunnelsManager.swift

index d5b75b364a2dfe96e893ad3bc31282ac045c4255..d86c1d6527646c92f81c5e9946a8f97f0b47db33 100644 (file)
@@ -165,11 +165,19 @@ extension TunnelDetailTableViewController {
             let cell = tableView.dequeueReusableCell(withIdentifier: TunnelDetailTableViewStatusCell.id, for: indexPath) as! TunnelDetailTableViewStatusCell
             cell.tunnel = self.tunnel
             cell.onSwitchToggled = { [weak self] isOn in
-                cell.isSwitchInteractionEnabled = false
                 guard let s = self else { return }
                 if (isOn) {
-                    s.tunnelsManager.startActivation(of: s.tunnel) { error in
-                        print("Error while activating: \(String(describing: error))")
+                    s.tunnelsManager.startActivation(of: s.tunnel) { [weak self] error in
+                        if let error = error {
+                            switch (error) {
+                            case TunnelsManagerError.noEndpoint:
+                                self?.showErrorAlert(title: "Endpoint missing", message: "There must be atleast one peer with an endpoint")
+                            case TunnelsManagerError.dnsResolutionFailed:
+                                self?.showErrorAlert(title: "DNS Failure", message: "One or more endpoint domains could not be resolved")
+                            default:
+                                self?.showErrorAlert(title: "Internal error", message: "The tunnel could not be activated")
+                            }
+                        }
                     }
                 } else {
                     s.tunnelsManager.startDeactivation(of: s.tunnel) { error in
index fa8e3ce3ea9341136617f7048f4d5d3146c241b2..f0087850ac6d9b98f7e0e94f77ca9a10a13cb58e 100644 (file)
@@ -232,7 +232,16 @@ extension TunnelsListTableViewController {
                 guard let s = self, let tunnelsManager = s.tunnelsManager else { return }
                 if (isOn) {
                     tunnelsManager.startActivation(of: tunnel) { error in
-                        print("Error while activating: \(String(describing: error))")
+                        if let error = error {
+                            switch (error) {
+                            case TunnelsManagerError.noEndpoint:
+                                self?.showErrorAlert(title: "Endpoint missing", message: "There must be atleast one peer with an endpoint")
+                            case TunnelsManagerError.dnsResolutionFailed:
+                                self?.showErrorAlert(title: "DNS Failure", message: "One or more endpoint domains could not be resolved")
+                            default:
+                                self?.showErrorAlert(title: "Internal error", message: "The tunnel could not be activated")
+                            }
+                        }
                     }
                 } else {
                     tunnelsManager.startDeactivation(of: tunnel) { error in
index 6559382736db577a418374d539fd249ba0049c1c..749b83dc6faa0749f995a438accb4d88483af088 100644 (file)
@@ -265,6 +265,7 @@ class TunnelContainer: NSObject {
         if let endpoints = dnsResolver.resolveWithoutNetworkRequests() {
             guard (endpoints.contains(where: { $0 != nil })) else {
                 completionHandler(TunnelsManagerError.noEndpoint)
+                status = .inactive
                 return
             }
             self.tunnelProvider.loadFromPreferences { [weak self] (error) in
@@ -278,7 +279,10 @@ class TunnelContainer: NSObject {
                 } catch (let error) {
                     os_log("Failed to activate tunnel: %{public}@", log: OSLog.default, type: .debug, "\(error)")
                     completionHandler(error)
+                    s.status = .inactive
+                    return
                 }
+                completionHandler(nil)
             }
         } else {
             self.dnsResolver = dnsResolver
@@ -302,7 +306,8 @@ class TunnelContainer: NSObject {
                         try session.startTunnel(options: tunnelOptions)
                     } catch (let error) {
                         os_log("Failed to activate tunnel: %{public}@", log: OSLog.default, type: .debug, "\(error)")
-                        completionHandler(error)
+                        s.status = .inactive
+                        return
                     }
                 }
             }