From 4b81e400fc1a6087b68913e94ef1ed0303844f8d Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Sat, 11 Feb 2017 21:07:11 +0300 Subject: [PATCH] Get error and send it to the delegate --- OpenVPN Tunnel Provider/OpenVPNAdapter.mm | 24 ++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/OpenVPN Tunnel Provider/OpenVPNAdapter.mm b/OpenVPN Tunnel Provider/OpenVPNAdapter.mm index c39936c..5485299 100644 --- a/OpenVPN Tunnel Provider/OpenVPNAdapter.mm +++ b/OpenVPN Tunnel Provider/OpenVPNAdapter.mm @@ -14,6 +14,7 @@ #import +#import "OpenVPNError.h" #import "OpenVPNEvent.h" #import "OpenVPNClient.h" @@ -21,6 +22,9 @@ #import "OpenVPNAdapter+Client.h" #import "OpenVPNAdapter+Provider.h" +NSString *const OpenVPNClientErrorDomain = @"OpenVPNClientErrorDomain"; +NSString *const OpenVPNClientErrorFatalKey = @"OpenVPNClientErrorFatalKey"; + @interface OpenVPNAdapter () @@ -82,15 +86,25 @@ static void socketCallback(CFSocketRef socket, CFSocketCallBackType type, CFData NSAssert(self.delegate != nil, @"delegate property should not be nil"); NSString *eventName = [NSString stringWithUTF8String:event->name.c_str()]; - OpenVPNEvent eventIdentifier = [self getOpenVPNEventFromName:eventName]; + OpenVPNEvent eventIdentifier = [self getOpenVPNEventByName:eventName]; NSString *eventMessage = [NSString stringWithUTF8String:event->info.c_str()]; if (event->error) { NSMutableDictionary *userInfo = [NSMutableDictionary new]; - // TODO: Generate error and handle it by delegate + [userInfo setObject:[NSNumber numberWithBool:event->fatal] forKey:OpenVPNClientErrorFatalKey]; + + if (eventMessage != nil && ![eventMessage isEqualToString:@""]) { + [userInfo setObject:eventMessage forKey:NSLocalizedDescriptionKey]; + } + + NSError *error = [NSError errorWithDomain:OpenVPNClientErrorDomain + code:eventIdentifier + userInfo:[userInfo copy]]; + + [self.delegate handleError:error]; } else { - [self.delegate handleEvent:eventIdentifier message:![eventMessage isEqualToString:@""] ? eventMessage : nil]; + [self.delegate handleEvent:eventIdentifier message:eventMessage == nil || [eventMessage isEqualToString:@""] ? nil : eventMessage]; } } @@ -99,7 +113,7 @@ static void socketCallback(CFSocketRef socket, CFSocketCallBackType type, CFData NSLog(@"%@", message); } -- (OpenVPNEvent)getOpenVPNEventFromName:(NSString *)name { +- (OpenVPNEvent)getOpenVPNEventByName:(NSString *)eventName { NSDictionary *events = @{ @"DISCONNECTED": @(OpenVPNEventDisconnected), @"CONNECTED": @(OpenVPNEventConnected), @@ -134,7 +148,7 @@ static void socketCallback(CFSocketRef socket, CFSocketCallBackType type, CFData @"EPKI_INVALID_ALIAS": @(OpenVPNEventEPKIInvalidAlias), }; - OpenVPNEvent event = events[name] != nil ? (OpenVPNEvent)[(NSNumber *)events[name] unsignedIntegerValue] : OpenVPNEventUnknown; + OpenVPNEvent event = events[eventName] != nil ? (OpenVPNEvent)[(NSNumber *)events[eventName] unsignedIntegerValue] : OpenVPNEventUnknown; return event; }