From 82d9b4115fcc6eed7721f453ef2f3719b65658d2 Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Thu, 16 Mar 2017 20:09:30 +0300 Subject: [PATCH] Handle events and errors by tunnel provider --- .../PacketTunnelProvider.swift | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift b/OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift index 45efedb..e88cbe9 100644 --- a/OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift +++ b/OpenVPN iOS Tunnel Provider/PacketTunnelProvider.swift @@ -77,11 +77,40 @@ extension PacketTunnelProvider: OpenVPNAdapterDelegate { } func handle(event: OpenVPNEvent, message: String?) { - + switch event { + case .connected: // Successfully connected to the VPN server + guard let startHandler = startHandler else { + return + } + + startHandler(nil) + self.startHandler = nil + + case .disconnected: // Disconnected from the VPN server + guard let stopHandler = stopHandler else { + return + } + + stopHandler() + self.startHandler = nil + + default: + break + } } func handle(error: Error) { - + // Handle only fatal errors + guard let fatal = (error as NSError).userInfo[OpenVPNAdapterErrorFatalKey] as? Bool, fatal == true else { + fatalError("") + } + + if let startHandler = startHandler { + startHandler(error) + self.startHandler = nil + } else { + cancelTunnelWithError(error) + } } }