From 169ae80bd5cf0d32aaa414d255279aec2c39566d Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Sun, 12 Feb 2017 16:15:13 +0300 Subject: [PATCH] Initialize and stop connection to the vpn server --- OpenVPN Tunnel Provider/OpenVPNAdapter.mm | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/OpenVPN Tunnel Provider/OpenVPNAdapter.mm b/OpenVPN Tunnel Provider/OpenVPNAdapter.mm index 181b5a5..1fab8a1 100644 --- a/OpenVPN Tunnel Provider/OpenVPNAdapter.mm +++ b/OpenVPN Tunnel Provider/OpenVPNAdapter.mm @@ -204,7 +204,37 @@ static void socketCallback(CFSocketRef socket, CFSocketCallBackType type, CFData #pragma mark Connection Control +- (void)connect { + dispatch_queue_t connectQueue = dispatch_queue_create("me.ss-abramchuk.openvpn-client.tunnel-provider.connection", NULL); + dispatch_async(connectQueue, ^{ + try { + OpenVPNClient::init_process(); + + ClientAPI::Status status = self.vpnClient->connect(); + if (status.error) { + NSError *error = [NSError errorWithDomain:OpenVPNClientErrorDomain + code:OpenVPNErrorClientFailure + userInfo:@{ NSLocalizedDescriptionKey: [NSString stringWithUTF8String:status.message.c_str()], + OpenVPNClientErrorFatalKey: @(YES), + OpenVPNClientErrorEventKey: @(OpenVPNEventConnectionFailed) }]; + [self.delegate handleError:error]; + } + + OpenVPNClient::uninit_process(); + } catch(const std::exception& e) { + NSError *error = [NSError errorWithDomain:OpenVPNClientErrorDomain + code:OpenVPNErrorClientFailure + userInfo:@{ NSLocalizedDescriptionKey: [NSString stringWithUTF8String:e.what()], + OpenVPNClientErrorFatalKey: @(YES), + OpenVPNClientErrorEventKey: @(OpenVPNEventConnectionFailed) }]; + [self.delegate handleError:error]; + } + }); +} +- (void)disconnect { + self.vpnClient->stop(); +} @end