From 3231a876602ac3a4987e7fd0f063e4f773a53524 Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Tue, 16 Oct 2018 18:23:24 +0300 Subject: [PATCH 1/6] Use mutable sets for dns, domains, and exception list --- .../OpenVPNNetworkSettingsBuilder.h | 6 ++--- .../OpenVPNNetworkSettingsBuilder.m | 26 ++++++++++--------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h index 63903d2..d56b5fb 100644 --- a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h +++ b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h @@ -33,10 +33,10 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) NSMutableArray *ipv6IncludedRoutes; @property (nonatomic, readonly) NSMutableArray *ipv6ExcludedRoutes; -@property (nonatomic, readonly) NSMutableArray *dnsServers; -@property (nonatomic, readonly) NSMutableArray *searchDomains; +@property (nonatomic, readonly) NSMutableSet *dnsServers; +@property (nonatomic, readonly) NSMutableSet *searchDomains; -@property (nonatomic, readonly) NSMutableArray *proxyExceptionList; +@property (nonatomic, readonly) NSMutableSet *proxyExceptionList; @property (nonatomic) BOOL autoProxyConfigurationEnabled; @property (nonatomic, copy, nullable) NSURL *proxyAutoConfigurationURL; diff --git a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m index 11a31f1..c0e8424 100644 --- a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m +++ b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m @@ -11,6 +11,8 @@ @interface OpenVPNNetworkSettingsBuilder () +// TODO: Use NSHashTable for routes to avoid duplicates + @property (nonatomic) NSMutableArray *ipv4LocalAddresses; @property (nonatomic) NSMutableArray *ipv4SubnetMasks; @property (nonatomic) NSMutableArray *ipv4IncludedRoutes; @@ -21,10 +23,10 @@ @property (nonatomic) NSMutableArray *ipv6IncludedRoutes; @property (nonatomic) NSMutableArray *ipv6ExcludedRoutes; -@property (nonatomic) NSMutableArray *dnsServers; -@property (nonatomic) NSMutableArray *searchDomains; +@property (nonatomic) NSMutableSet *dnsServers; +@property (nonatomic) NSMutableSet *searchDomains; -@property (nonatomic) NSMutableArray *proxyExceptionList; +@property (nonatomic) NSMutableSet *proxyExceptionList; @end @@ -58,8 +60,8 @@ } if (self.dnsServers.count) { - NEDNSSettings *dnsSettings = [[NEDNSSettings alloc] initWithServers:self.dnsServers]; - dnsSettings.searchDomains = self.searchDomains; + NEDNSSettings *dnsSettings = [[NEDNSSettings alloc] initWithServers:self.dnsServers.allObjects]; + dnsSettings.searchDomains = self.searchDomains.allObjects; networkSettings.DNSSettings = dnsSettings; } @@ -68,7 +70,7 @@ proxySettings.autoProxyConfigurationEnabled = self.autoProxyConfigurationEnabled; proxySettings.proxyAutoConfigurationURL = self.proxyAutoConfigurationURL; - proxySettings.exceptionList = self.proxyExceptionList; + proxySettings.exceptionList = self.proxyExceptionList.allObjects; proxySettings.HTTPServer = self.httpProxyServer; proxySettings.HTTPEnabled = self.httpProxyServerEnabled; proxySettings.HTTPSServer = self.httpsProxyServer; @@ -124,18 +126,18 @@ return _ipv6ExcludedRoutes; } -- (NSMutableArray *)dnsServers { - if (!_dnsServers) { _dnsServers = [[NSMutableArray alloc] init]; } +- (NSMutableSet *)dnsServers { + if (!_dnsServers) { _dnsServers = [[NSMutableSet alloc] init]; } return _dnsServers; } -- (NSMutableArray *)searchDomains { - if (!_searchDomains) { _searchDomains = [[NSMutableArray alloc] init]; } +- (NSMutableSet *)searchDomains { + if (!_searchDomains) { _searchDomains = [[NSMutableSet alloc] init]; } return _searchDomains; } -- (NSMutableArray *)proxyExceptionList { - if (!_proxyExceptionList) { _proxyExceptionList = [[NSMutableArray alloc] init]; } +- (NSMutableSet *)proxyExceptionList { + if (!_proxyExceptionList) { _proxyExceptionList = [[NSMutableSet alloc] init]; } return _proxyExceptionList; } From 10f3985e579cd92dc3d82381d1d93a378e6d7481 Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Tue, 16 Oct 2018 19:08:00 +0300 Subject: [PATCH 2/6] Add helper categories to NSArray and NSSet --- OpenVPNAdapter.xcodeproj/project.pbxproj | 24 ++++++++++++++++++++++++ Sources/OpenVPNAdapter/NSArray+Empty.h | 18 ++++++++++++++++++ Sources/OpenVPNAdapter/NSArray+Empty.m | 16 ++++++++++++++++ Sources/OpenVPNAdapter/NSSet+Empty.h | 18 ++++++++++++++++++ Sources/OpenVPNAdapter/NSSet+Empty.m | 16 ++++++++++++++++ 5 files changed, 92 insertions(+) create mode 100644 Sources/OpenVPNAdapter/NSArray+Empty.h create mode 100644 Sources/OpenVPNAdapter/NSArray+Empty.m create mode 100644 Sources/OpenVPNAdapter/NSSet+Empty.h create mode 100644 Sources/OpenVPNAdapter/NSSet+Empty.m diff --git a/OpenVPNAdapter.xcodeproj/project.pbxproj b/OpenVPNAdapter.xcodeproj/project.pbxproj index 4908f0a..81bc639 100644 --- a/OpenVPNAdapter.xcodeproj/project.pbxproj +++ b/OpenVPNAdapter.xcodeproj/project.pbxproj @@ -99,6 +99,14 @@ C98467A91EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = C98467A51EAA5B7700272A9A /* OpenVPNConfiguration.mm */; }; C98467AB1EAA5BE100272A9A /* OpenVPNConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */; }; C98467AC1EAA5BE200272A9A /* OpenVPNConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */; }; + C9A50F2D21763A2C0010C0D4 /* NSArray+Empty.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F2B21763A2C0010C0D4 /* NSArray+Empty.h */; }; + C9A50F2E21763A2C0010C0D4 /* NSArray+Empty.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F2B21763A2C0010C0D4 /* NSArray+Empty.h */; }; + C9A50F2F21763A2C0010C0D4 /* NSArray+Empty.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F2C21763A2C0010C0D4 /* NSArray+Empty.m */; }; + C9A50F3021763A2C0010C0D4 /* NSArray+Empty.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F2C21763A2C0010C0D4 /* NSArray+Empty.m */; }; + C9A50F3321763CBC0010C0D4 /* NSSet+Empty.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F3121763CBC0010C0D4 /* NSSet+Empty.h */; }; + C9A50F3421763CBC0010C0D4 /* NSSet+Empty.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F3121763CBC0010C0D4 /* NSSet+Empty.h */; }; + C9A50F3521763CBC0010C0D4 /* NSSet+Empty.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F3221763CBC0010C0D4 /* NSSet+Empty.m */; }; + C9A50F3621763CBC0010C0D4 /* NSSet+Empty.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F3221763CBC0010C0D4 /* NSSet+Empty.m */; }; C9B7955E1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9B7955F1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9B795601F1D16AA00CF35FE /* OpenVPNReachability.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9B7955D1F1D16AA00CF35FE /* OpenVPNReachability.mm */; }; @@ -230,6 +238,10 @@ C98467A41EAA5B7700272A9A /* OpenVPNConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNConfiguration.h; path = OpenVPNAdapter/OpenVPNConfiguration.h; sourceTree = ""; }; C98467A51EAA5B7700272A9A /* OpenVPNConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNConfiguration.mm; path = OpenVPNAdapter/OpenVPNConfiguration.mm; sourceTree = ""; }; C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "OpenVPNConfiguration+Internal.h"; path = "OpenVPNAdapter/OpenVPNConfiguration+Internal.h"; sourceTree = ""; }; + C9A50F2B21763A2C0010C0D4 /* NSArray+Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSArray+Empty.h"; path = "Sources/OpenVPNAdapter/NSArray+Empty.h"; sourceTree = SOURCE_ROOT; }; + C9A50F2C21763A2C0010C0D4 /* NSArray+Empty.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Empty.m"; path = "Sources/OpenVPNAdapter/NSArray+Empty.m"; sourceTree = SOURCE_ROOT; }; + C9A50F3121763CBC0010C0D4 /* NSSet+Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSSet+Empty.h"; path = "Sources/OpenVPNAdapter/NSSet+Empty.h"; sourceTree = SOURCE_ROOT; }; + C9A50F3221763CBC0010C0D4 /* NSSet+Empty.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSSet+Empty.m"; path = "Sources/OpenVPNAdapter/NSSet+Empty.m"; sourceTree = SOURCE_ROOT; }; C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNReachability.h; path = OpenVPNAdapter/OpenVPNReachability.h; sourceTree = ""; }; C9B7955D1F1D16AA00CF35FE /* OpenVPNReachability.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNReachability.mm; path = OpenVPNAdapter/OpenVPNReachability.mm; sourceTree = ""; }; C9B795621F1D182500CF35FE /* OpenVPNReachabilityTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNReachabilityTracker.h; path = OpenVPNAdapter/OpenVPNReachabilityTracker.h; sourceTree = ""; }; @@ -572,6 +584,10 @@ children = ( C9E350BF200F6EC0000820D9 /* NSError+OpenVPNError.h */, C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */, + C9A50F2B21763A2C0010C0D4 /* NSArray+Empty.h */, + C9A50F2C21763A2C0010C0D4 /* NSArray+Empty.m */, + C9A50F3121763CBC0010C0D4 /* NSSet+Empty.h */, + C9A50F3221763CBC0010C0D4 /* NSSet+Empty.m */, ); name = Extensions; sourceTree = ""; @@ -612,6 +628,7 @@ C9657A5E1EB0D60700EFF210 /* OpenVPNTransportProtocol.h in Headers */, C9657A1D1EB0A8D800EFF210 /* OpenVPNConnectionInfo+Internal.h in Headers */, C9B7955E1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */, + C9A50F3321763CBC0010C0D4 /* NSSet+Empty.h in Headers */, C915F1F41F612F3300B3DF23 /* OpenVPNPrivateKey.h in Headers */, C9657A171EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */, C9310BC120FF6E9700838910 /* Umbrella-Header.h in Headers */, @@ -630,6 +647,7 @@ C9657A6A1EB0D75700EFF210 /* OpenVPNTLSCertProfile.h in Headers */, C9657A461EB0CB5900EFF210 /* OpenVPNServerEntry+Internal.h in Headers */, C9657A251EB0B60200EFF210 /* OpenVPNTransportStats.h in Headers */, + C9A50F2D21763A2C0010C0D4 /* NSArray+Empty.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -658,6 +676,7 @@ C9657A5F1EB0D60700EFF210 /* OpenVPNTransportProtocol.h in Headers */, C9657A1E1EB0A8D800EFF210 /* OpenVPNConnectionInfo+Internal.h in Headers */, C9B7955F1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */, + C9A50F3421763CBC0010C0D4 /* NSSet+Empty.h in Headers */, C915F1F51F612F3300B3DF23 /* OpenVPNPrivateKey.h in Headers */, C9657A181EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */, C9310BC220FF6E9700838910 /* Umbrella-Header.h in Headers */, @@ -676,6 +695,7 @@ C9657A6B1EB0D75700EFF210 /* OpenVPNTLSCertProfile.h in Headers */, C9657A471EB0CB5900EFF210 /* OpenVPNServerEntry+Internal.h in Headers */, C9657A261EB0B60200EFF210 /* OpenVPNTransportStats.h in Headers */, + C9A50F2E21763A2C0010C0D4 /* NSArray+Empty.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -926,11 +946,13 @@ ABD6EF121F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm in Sources */, C9657A311EB0B7A900EFF210 /* OpenVPNTransportStats.mm in Sources */, C9B795661F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */, + C9A50F3521763CBC0010C0D4 /* NSSet+Empty.m in Sources */, C9657A581EB0CE1300EFF210 /* OpenVPNProperties.mm in Sources */, C9CA4DD51F602F7B00C4F184 /* OpenVPNCertificate.m in Sources */, C9CDFDDD200781AF00323B73 /* OpenVPNClient.mm in Sources */, C915F1F61F612F3300B3DF23 /* OpenVPNPrivateKey.m in Sources */, C9FD921B1E9A667600374FC4 /* ovpncli.cpp in Sources */, + C9A50F2F21763A2C0010C0D4 /* NSArray+Empty.m in Sources */, C9657A361EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm in Sources */, C9657A211EB0ACAE00EFF210 /* OpenVPNConnectionInfo.mm in Sources */, C9C2B2BD200CC42A00CA0FF3 /* OpenVPNPacket.mm in Sources */, @@ -967,11 +989,13 @@ ABD6EF131F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm in Sources */, C9657A301EB0B7A600EFF210 /* OpenVPNTransportStats.mm in Sources */, C9B795671F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */, + C9A50F3621763CBC0010C0D4 /* NSSet+Empty.m in Sources */, C9657A591EB0CE1400EFF210 /* OpenVPNProperties.mm in Sources */, C9CA4DD61F602F7B00C4F184 /* OpenVPNCertificate.m in Sources */, C9CDFDDE200781AF00323B73 /* OpenVPNClient.mm in Sources */, C915F1F71F612F3300B3DF23 /* OpenVPNPrivateKey.m in Sources */, C9D2ABDE1EA20F99007EDF9D /* ovpncli.cpp in Sources */, + C9A50F3021763A2C0010C0D4 /* NSArray+Empty.m in Sources */, C9657A371EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm in Sources */, C9657A221EB0ACAE00EFF210 /* OpenVPNConnectionInfo.mm in Sources */, C9C2B2BE200CC42A00CA0FF3 /* OpenVPNPacket.mm in Sources */, diff --git a/Sources/OpenVPNAdapter/NSArray+Empty.h b/Sources/OpenVPNAdapter/NSArray+Empty.h new file mode 100644 index 0000000..eb2fbc0 --- /dev/null +++ b/Sources/OpenVPNAdapter/NSArray+Empty.h @@ -0,0 +1,18 @@ +// +// NSArray+Empty.h +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 16/10/2018. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSArray (Empty) + +@property (nonatomic, readonly) BOOL isNotEmpty; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/OpenVPNAdapter/NSArray+Empty.m b/Sources/OpenVPNAdapter/NSArray+Empty.m new file mode 100644 index 0000000..f7e12f1 --- /dev/null +++ b/Sources/OpenVPNAdapter/NSArray+Empty.m @@ -0,0 +1,16 @@ +// +// NSArray+Empty.m +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 16/10/2018. +// + +#import "NSArray+Empty.h" + +@implementation NSArray (Empty) + +- (BOOL)isNotEmpty { + return (self.count > 0) ? YES : NO; +} + +@end diff --git a/Sources/OpenVPNAdapter/NSSet+Empty.h b/Sources/OpenVPNAdapter/NSSet+Empty.h new file mode 100644 index 0000000..a4165b2 --- /dev/null +++ b/Sources/OpenVPNAdapter/NSSet+Empty.h @@ -0,0 +1,18 @@ +// +// NSSet+Empty.h +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 16/10/2018. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface NSSet (Empty) + +@property (nonatomic, readonly) BOOL isNotEmpty; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Sources/OpenVPNAdapter/NSSet+Empty.m b/Sources/OpenVPNAdapter/NSSet+Empty.m new file mode 100644 index 0000000..b3b634d --- /dev/null +++ b/Sources/OpenVPNAdapter/NSSet+Empty.m @@ -0,0 +1,16 @@ +// +// NSSet+Empty.m +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 16/10/2018. +// + +#import "NSSet+Empty.h" + +@implementation NSSet (Empty) + +- (BOOL)isNotEmpty { + return (self.count > 0) ? YES : NO; +} + +@end From fc4446fa7daa8cebcfcd652f4aa3a979efaf5687 Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Tue, 16 Oct 2018 19:09:28 +0300 Subject: [PATCH 3/6] Check conditions using NSAssert and use Empty categories to check arrays and sets for emptiness --- .../OpenVPNNetworkSettingsBuilder.m | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m index c0e8424..b305152 100644 --- a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m +++ b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m @@ -9,6 +9,9 @@ #import +#import "NSArray+Empty.h" +#import "NSSet+Empty.h" + @interface OpenVPNNetworkSettingsBuilder () // TODO: Use NSHashTable for routes to avoid duplicates @@ -35,11 +38,13 @@ #pragma mark - NEPacketTunnelNetworkSettings Generation - (NEPacketTunnelNetworkSettings *)networkSettings { - if (!self.remoteAddress.length) { return nil; } + NSAssert(self.remoteAddress != nil && self.remoteAddress.length > 0, @"Remote address is nil or empty."); NEPacketTunnelNetworkSettings *networkSettings = [[NEPacketTunnelNetworkSettings alloc] initWithTunnelRemoteAddress:self.remoteAddress]; - if (self.ipv4LocalAddresses.count && (self.ipv4LocalAddresses.count == self.ipv4SubnetMasks.count)) { + if (self.ipv4LocalAddresses.isNotEmpty) { + NSAssert(self.ipv4LocalAddresses.count == self.ipv4SubnetMasks.count, @"Number of IPv4 addresses is not equal to number of IPv4 subnet masks."); + NEIPv4Settings *ipv4Settings = [[NEIPv4Settings alloc] initWithAddresses:self.ipv4LocalAddresses subnetMasks:self.ipv4SubnetMasks]; @@ -49,7 +54,9 @@ networkSettings.IPv4Settings = ipv4Settings; } - if (self.ipv6LocalAddresses.count && (self.ipv6LocalAddresses.count == self.ipv6NetworkPrefixLengths.count)) { + if (self.ipv6LocalAddresses.isNotEmpty) { + NSAssert(self.ipv6LocalAddresses.count == self.ipv6NetworkPrefixLengths.count, @"Number of IPv6 addresses is not equal to number of IPv6 prefixes."); + NEIPv6Settings *ipv6Settings = [[NEIPv6Settings alloc] initWithAddresses:self.ipv6LocalAddresses networkPrefixLengths:self.ipv6NetworkPrefixLengths]; @@ -59,7 +66,7 @@ networkSettings.IPv6Settings = ipv6Settings; } - if (self.dnsServers.count) { + if (self.dnsServers.isNotEmpty) { NEDNSSettings *dnsSettings = [[NEDNSSettings alloc] initWithServers:self.dnsServers.allObjects]; dnsSettings.searchDomains = self.searchDomains.allObjects; networkSettings.DNSSettings = dnsSettings; From 4464188292a75719a4bf5025cf2cf9f0d953fb67 Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Tue, 16 Oct 2018 19:09:46 +0300 Subject: [PATCH 4/6] Don't check network settings for nil --- Sources/OpenVPNAdapter/OpenVPNAdapter.mm | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/OpenVPNAdapter/OpenVPNAdapter.mm b/Sources/OpenVPNAdapter/OpenVPNAdapter.mm index 58bdd17..a5c4e01 100644 --- a/Sources/OpenVPNAdapter/OpenVPNAdapter.mm +++ b/Sources/OpenVPNAdapter/OpenVPNAdapter.mm @@ -260,7 +260,6 @@ - (BOOL)establishTunnel { NEPacketTunnelNetworkSettings *networkSettings = [self.networkSettingsBuilder networkSettings]; - if (!networkSettings) { return NO; } dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); From 6648a643ddb9e01db1d79f5d7c87c1567bfa28fc Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Wed, 17 Oct 2018 09:56:18 +0300 Subject: [PATCH 5/6] Rename array and set categories --- OpenVPNAdapter.xcodeproj/project.pbxproj | 48 +++++++++---------- Sources/OpenVPNAdapter/NSArray+Empty.m | 16 ------- ...Set+Empty.h => NSArray+OpenVPNAdditions.h} | 6 +-- .../OpenVPNAdapter/NSArray+OpenVPNAdditions.m | 16 +++++++ Sources/OpenVPNAdapter/NSSet+Empty.m | 16 ------- ...Array+Empty.h => NSSet+OpenVPNAdditions.h} | 6 +-- .../OpenVPNAdapter/NSSet+OpenVPNAdditions.m | 16 +++++++ .../OpenVPNNetworkSettingsBuilder.m | 10 ++-- 8 files changed, 67 insertions(+), 67 deletions(-) delete mode 100644 Sources/OpenVPNAdapter/NSArray+Empty.m rename Sources/OpenVPNAdapter/{NSSet+Empty.h => NSArray+OpenVPNAdditions.h} (57%) create mode 100644 Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.m delete mode 100644 Sources/OpenVPNAdapter/NSSet+Empty.m rename Sources/OpenVPNAdapter/{NSArray+Empty.h => NSSet+OpenVPNAdditions.h} (58%) create mode 100644 Sources/OpenVPNAdapter/NSSet+OpenVPNAdditions.m diff --git a/OpenVPNAdapter.xcodeproj/project.pbxproj b/OpenVPNAdapter.xcodeproj/project.pbxproj index 81bc639..d1db83e 100644 --- a/OpenVPNAdapter.xcodeproj/project.pbxproj +++ b/OpenVPNAdapter.xcodeproj/project.pbxproj @@ -99,14 +99,14 @@ C98467A91EAA5B7700272A9A /* OpenVPNConfiguration.mm in Sources */ = {isa = PBXBuildFile; fileRef = C98467A51EAA5B7700272A9A /* OpenVPNConfiguration.mm */; }; C98467AB1EAA5BE100272A9A /* OpenVPNConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */; }; C98467AC1EAA5BE200272A9A /* OpenVPNConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */; }; - C9A50F2D21763A2C0010C0D4 /* NSArray+Empty.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F2B21763A2C0010C0D4 /* NSArray+Empty.h */; }; - C9A50F2E21763A2C0010C0D4 /* NSArray+Empty.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F2B21763A2C0010C0D4 /* NSArray+Empty.h */; }; - C9A50F2F21763A2C0010C0D4 /* NSArray+Empty.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F2C21763A2C0010C0D4 /* NSArray+Empty.m */; }; - C9A50F3021763A2C0010C0D4 /* NSArray+Empty.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F2C21763A2C0010C0D4 /* NSArray+Empty.m */; }; - C9A50F3321763CBC0010C0D4 /* NSSet+Empty.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F3121763CBC0010C0D4 /* NSSet+Empty.h */; }; - C9A50F3421763CBC0010C0D4 /* NSSet+Empty.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F3121763CBC0010C0D4 /* NSSet+Empty.h */; }; - C9A50F3521763CBC0010C0D4 /* NSSet+Empty.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F3221763CBC0010C0D4 /* NSSet+Empty.m */; }; - C9A50F3621763CBC0010C0D4 /* NSSet+Empty.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F3221763CBC0010C0D4 /* NSSet+Empty.m */; }; + C9A50F2D21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F2B21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h */; }; + C9A50F2E21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F2B21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h */; }; + C9A50F2F21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F2C21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m */; }; + C9A50F3021763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F2C21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m */; }; + C9A50F3321763CBC0010C0D4 /* NSSet+OpenVPNAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F3121763CBC0010C0D4 /* NSSet+OpenVPNAdditions.h */; }; + C9A50F3421763CBC0010C0D4 /* NSSet+OpenVPNAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A50F3121763CBC0010C0D4 /* NSSet+OpenVPNAdditions.h */; }; + C9A50F3521763CBC0010C0D4 /* NSSet+OpenVPNAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F3221763CBC0010C0D4 /* NSSet+OpenVPNAdditions.m */; }; + C9A50F3621763CBC0010C0D4 /* NSSet+OpenVPNAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C9A50F3221763CBC0010C0D4 /* NSSet+OpenVPNAdditions.m */; }; C9B7955E1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9B7955F1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; C9B795601F1D16AA00CF35FE /* OpenVPNReachability.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9B7955D1F1D16AA00CF35FE /* OpenVPNReachability.mm */; }; @@ -238,10 +238,10 @@ C98467A41EAA5B7700272A9A /* OpenVPNConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNConfiguration.h; path = OpenVPNAdapter/OpenVPNConfiguration.h; sourceTree = ""; }; C98467A51EAA5B7700272A9A /* OpenVPNConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNConfiguration.mm; path = OpenVPNAdapter/OpenVPNConfiguration.mm; sourceTree = ""; }; C98467AA1EAA5BB500272A9A /* OpenVPNConfiguration+Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "OpenVPNConfiguration+Internal.h"; path = "OpenVPNAdapter/OpenVPNConfiguration+Internal.h"; sourceTree = ""; }; - C9A50F2B21763A2C0010C0D4 /* NSArray+Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSArray+Empty.h"; path = "Sources/OpenVPNAdapter/NSArray+Empty.h"; sourceTree = SOURCE_ROOT; }; - C9A50F2C21763A2C0010C0D4 /* NSArray+Empty.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Empty.m"; path = "Sources/OpenVPNAdapter/NSArray+Empty.m"; sourceTree = SOURCE_ROOT; }; - C9A50F3121763CBC0010C0D4 /* NSSet+Empty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSSet+Empty.h"; path = "Sources/OpenVPNAdapter/NSSet+Empty.h"; sourceTree = SOURCE_ROOT; }; - C9A50F3221763CBC0010C0D4 /* NSSet+Empty.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSSet+Empty.m"; path = "Sources/OpenVPNAdapter/NSSet+Empty.m"; sourceTree = SOURCE_ROOT; }; + C9A50F2B21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSArray+OpenVPNAdditions.h"; path = "Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.h"; sourceTree = SOURCE_ROOT; }; + C9A50F2C21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSArray+OpenVPNAdditions.m"; path = "Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.m"; sourceTree = SOURCE_ROOT; }; + C9A50F3121763CBC0010C0D4 /* NSSet+OpenVPNAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "NSSet+OpenVPNAdditions.h"; path = "Sources/OpenVPNAdapter/NSSet+OpenVPNAdditions.h"; sourceTree = SOURCE_ROOT; }; + C9A50F3221763CBC0010C0D4 /* NSSet+OpenVPNAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSSet+OpenVPNAdditions.m"; path = "Sources/OpenVPNAdapter/NSSet+OpenVPNAdditions.m"; sourceTree = SOURCE_ROOT; }; C9B7955C1F1D16AA00CF35FE /* OpenVPNReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNReachability.h; path = OpenVPNAdapter/OpenVPNReachability.h; sourceTree = ""; }; C9B7955D1F1D16AA00CF35FE /* OpenVPNReachability.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenVPNReachability.mm; path = OpenVPNAdapter/OpenVPNReachability.mm; sourceTree = ""; }; C9B795621F1D182500CF35FE /* OpenVPNReachabilityTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenVPNReachabilityTracker.h; path = OpenVPNAdapter/OpenVPNReachabilityTracker.h; sourceTree = ""; }; @@ -584,10 +584,10 @@ children = ( C9E350BF200F6EC0000820D9 /* NSError+OpenVPNError.h */, C9E350C0200F6EC0000820D9 /* NSError+OpenVPNError.m */, - C9A50F2B21763A2C0010C0D4 /* NSArray+Empty.h */, - C9A50F2C21763A2C0010C0D4 /* NSArray+Empty.m */, - C9A50F3121763CBC0010C0D4 /* NSSet+Empty.h */, - C9A50F3221763CBC0010C0D4 /* NSSet+Empty.m */, + C9A50F2B21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h */, + C9A50F2C21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m */, + C9A50F3121763CBC0010C0D4 /* NSSet+OpenVPNAdditions.h */, + C9A50F3221763CBC0010C0D4 /* NSSet+OpenVPNAdditions.m */, ); name = Extensions; sourceTree = ""; @@ -628,7 +628,7 @@ C9657A5E1EB0D60700EFF210 /* OpenVPNTransportProtocol.h in Headers */, C9657A1D1EB0A8D800EFF210 /* OpenVPNConnectionInfo+Internal.h in Headers */, C9B7955E1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */, - C9A50F3321763CBC0010C0D4 /* NSSet+Empty.h in Headers */, + C9A50F3321763CBC0010C0D4 /* NSSet+OpenVPNAdditions.h in Headers */, C915F1F41F612F3300B3DF23 /* OpenVPNPrivateKey.h in Headers */, C9657A171EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */, C9310BC120FF6E9700838910 /* Umbrella-Header.h in Headers */, @@ -647,7 +647,7 @@ C9657A6A1EB0D75700EFF210 /* OpenVPNTLSCertProfile.h in Headers */, C9657A461EB0CB5900EFF210 /* OpenVPNServerEntry+Internal.h in Headers */, C9657A251EB0B60200EFF210 /* OpenVPNTransportStats.h in Headers */, - C9A50F2D21763A2C0010C0D4 /* NSArray+Empty.h in Headers */, + C9A50F2D21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -676,7 +676,7 @@ C9657A5F1EB0D60700EFF210 /* OpenVPNTransportProtocol.h in Headers */, C9657A1E1EB0A8D800EFF210 /* OpenVPNConnectionInfo+Internal.h in Headers */, C9B7955F1F1D16AA00CF35FE /* OpenVPNReachability.h in Headers */, - C9A50F3421763CBC0010C0D4 /* NSSet+Empty.h in Headers */, + C9A50F3421763CBC0010C0D4 /* NSSet+OpenVPNAdditions.h in Headers */, C915F1F51F612F3300B3DF23 /* OpenVPNPrivateKey.h in Headers */, C9657A181EB0A7F800EFF210 /* OpenVPNConnectionInfo.h in Headers */, C9310BC220FF6E9700838910 /* Umbrella-Header.h in Headers */, @@ -695,7 +695,7 @@ C9657A6B1EB0D75700EFF210 /* OpenVPNTLSCertProfile.h in Headers */, C9657A471EB0CB5900EFF210 /* OpenVPNServerEntry+Internal.h in Headers */, C9657A261EB0B60200EFF210 /* OpenVPNTransportStats.h in Headers */, - C9A50F2E21763A2C0010C0D4 /* NSArray+Empty.h in Headers */, + C9A50F2E21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -946,13 +946,13 @@ ABD6EF121F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm in Sources */, C9657A311EB0B7A900EFF210 /* OpenVPNTransportStats.mm in Sources */, C9B795661F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */, - C9A50F3521763CBC0010C0D4 /* NSSet+Empty.m in Sources */, + C9A50F3521763CBC0010C0D4 /* NSSet+OpenVPNAdditions.m in Sources */, C9657A581EB0CE1300EFF210 /* OpenVPNProperties.mm in Sources */, C9CA4DD51F602F7B00C4F184 /* OpenVPNCertificate.m in Sources */, C9CDFDDD200781AF00323B73 /* OpenVPNClient.mm in Sources */, C915F1F61F612F3300B3DF23 /* OpenVPNPrivateKey.m in Sources */, C9FD921B1E9A667600374FC4 /* ovpncli.cpp in Sources */, - C9A50F2F21763A2C0010C0D4 /* NSArray+Empty.m in Sources */, + C9A50F2F21763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m in Sources */, C9657A361EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm in Sources */, C9657A211EB0ACAE00EFF210 /* OpenVPNConnectionInfo.mm in Sources */, C9C2B2BD200CC42A00CA0FF3 /* OpenVPNPacket.mm in Sources */, @@ -989,13 +989,13 @@ ABD6EF131F8F93AB007D3D90 /* OpenVPNPacketFlowBridge.mm in Sources */, C9657A301EB0B7A600EFF210 /* OpenVPNTransportStats.mm in Sources */, C9B795671F1D182500CF35FE /* OpenVPNReachabilityTracker.mm in Sources */, - C9A50F3621763CBC0010C0D4 /* NSSet+Empty.m in Sources */, + C9A50F3621763CBC0010C0D4 /* NSSet+OpenVPNAdditions.m in Sources */, C9657A591EB0CE1400EFF210 /* OpenVPNProperties.mm in Sources */, C9CA4DD61F602F7B00C4F184 /* OpenVPNCertificate.m in Sources */, C9CDFDDE200781AF00323B73 /* OpenVPNClient.mm in Sources */, C915F1F71F612F3300B3DF23 /* OpenVPNPrivateKey.m in Sources */, C9D2ABDE1EA20F99007EDF9D /* ovpncli.cpp in Sources */, - C9A50F3021763A2C0010C0D4 /* NSArray+Empty.m in Sources */, + C9A50F3021763A2C0010C0D4 /* NSArray+OpenVPNAdditions.m in Sources */, C9657A371EB0BA3900EFF210 /* OpenVPNInterfaceStats.mm in Sources */, C9657A221EB0ACAE00EFF210 /* OpenVPNConnectionInfo.mm in Sources */, C9C2B2BE200CC42A00CA0FF3 /* OpenVPNPacket.mm in Sources */, diff --git a/Sources/OpenVPNAdapter/NSArray+Empty.m b/Sources/OpenVPNAdapter/NSArray+Empty.m deleted file mode 100644 index f7e12f1..0000000 --- a/Sources/OpenVPNAdapter/NSArray+Empty.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// NSArray+Empty.m -// OpenVPNAdapter -// -// Created by Sergey Abramchuk on 16/10/2018. -// - -#import "NSArray+Empty.h" - -@implementation NSArray (Empty) - -- (BOOL)isNotEmpty { - return (self.count > 0) ? YES : NO; -} - -@end diff --git a/Sources/OpenVPNAdapter/NSSet+Empty.h b/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.h similarity index 57% rename from Sources/OpenVPNAdapter/NSSet+Empty.h rename to Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.h index a4165b2..71ecf8c 100644 --- a/Sources/OpenVPNAdapter/NSSet+Empty.h +++ b/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.h @@ -1,5 +1,5 @@ // -// NSSet+Empty.h +// NSArray+OpenVPNAdditions.h // OpenVPNAdapter // // Created by Sergey Abramchuk on 16/10/2018. @@ -9,9 +9,9 @@ NS_ASSUME_NONNULL_BEGIN -@interface NSSet (Empty) +@interface NSArray (OpenVPNEmptyArray) -@property (nonatomic, readonly) BOOL isNotEmpty; +@property (nonatomic, readonly) BOOL ovpn_isNotEmpty; @end diff --git a/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.m b/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.m new file mode 100644 index 0000000..1ded853 --- /dev/null +++ b/Sources/OpenVPNAdapter/NSArray+OpenVPNAdditions.m @@ -0,0 +1,16 @@ +// +// NSArray+OpenVPNAdditions.m +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 16/10/2018. +// + +#import "NSArray+OpenVPNAdditions.h" + +@implementation NSArray (OpenVPNEmptyArray) + +- (BOOL)ovpn_isNotEmpty { + return (self.count > 0) ? YES : NO; +} + +@end diff --git a/Sources/OpenVPNAdapter/NSSet+Empty.m b/Sources/OpenVPNAdapter/NSSet+Empty.m deleted file mode 100644 index b3b634d..0000000 --- a/Sources/OpenVPNAdapter/NSSet+Empty.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// NSSet+Empty.m -// OpenVPNAdapter -// -// Created by Sergey Abramchuk on 16/10/2018. -// - -#import "NSSet+Empty.h" - -@implementation NSSet (Empty) - -- (BOOL)isNotEmpty { - return (self.count > 0) ? YES : NO; -} - -@end diff --git a/Sources/OpenVPNAdapter/NSArray+Empty.h b/Sources/OpenVPNAdapter/NSSet+OpenVPNAdditions.h similarity index 58% rename from Sources/OpenVPNAdapter/NSArray+Empty.h rename to Sources/OpenVPNAdapter/NSSet+OpenVPNAdditions.h index eb2fbc0..f7e7c37 100644 --- a/Sources/OpenVPNAdapter/NSArray+Empty.h +++ b/Sources/OpenVPNAdapter/NSSet+OpenVPNAdditions.h @@ -1,5 +1,5 @@ // -// NSArray+Empty.h +// NSSet+OpenVPNAdditions.h // OpenVPNAdapter // // Created by Sergey Abramchuk on 16/10/2018. @@ -9,9 +9,9 @@ NS_ASSUME_NONNULL_BEGIN -@interface NSArray (Empty) +@interface NSSet (OpenVPNEmptySet) -@property (nonatomic, readonly) BOOL isNotEmpty; +@property (nonatomic, readonly) BOOL ovpn_isNotEmpty; @end diff --git a/Sources/OpenVPNAdapter/NSSet+OpenVPNAdditions.m b/Sources/OpenVPNAdapter/NSSet+OpenVPNAdditions.m new file mode 100644 index 0000000..0af8b0f --- /dev/null +++ b/Sources/OpenVPNAdapter/NSSet+OpenVPNAdditions.m @@ -0,0 +1,16 @@ +// +// NSSet+OpenVPNAdditions.m +// OpenVPNAdapter +// +// Created by Sergey Abramchuk on 16/10/2018. +// + +#import "NSSet+OpenVPNAdditions.h" + +@implementation NSSet (OpenVPNEmptySet) + +- (BOOL)ovpn_isNotEmpty { + return (self.count > 0) ? YES : NO; +} + +@end diff --git a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m index b305152..c70843a 100644 --- a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m +++ b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m @@ -9,8 +9,8 @@ #import -#import "NSArray+Empty.h" -#import "NSSet+Empty.h" +#import "NSArray+OpenVPNAdditions.h" +#import "NSSet+OpenVPNAdditions.h" @interface OpenVPNNetworkSettingsBuilder () @@ -42,7 +42,7 @@ NEPacketTunnelNetworkSettings *networkSettings = [[NEPacketTunnelNetworkSettings alloc] initWithTunnelRemoteAddress:self.remoteAddress]; - if (self.ipv4LocalAddresses.isNotEmpty) { + if (self.ipv4LocalAddresses.ovpn_isNotEmpty) { NSAssert(self.ipv4LocalAddresses.count == self.ipv4SubnetMasks.count, @"Number of IPv4 addresses is not equal to number of IPv4 subnet masks."); NEIPv4Settings *ipv4Settings = [[NEIPv4Settings alloc] initWithAddresses:self.ipv4LocalAddresses @@ -54,7 +54,7 @@ networkSettings.IPv4Settings = ipv4Settings; } - if (self.ipv6LocalAddresses.isNotEmpty) { + if (self.ipv6LocalAddresses.ovpn_isNotEmpty) { NSAssert(self.ipv6LocalAddresses.count == self.ipv6NetworkPrefixLengths.count, @"Number of IPv6 addresses is not equal to number of IPv6 prefixes."); NEIPv6Settings *ipv6Settings = [[NEIPv6Settings alloc] initWithAddresses:self.ipv6LocalAddresses @@ -66,7 +66,7 @@ networkSettings.IPv6Settings = ipv6Settings; } - if (self.dnsServers.isNotEmpty) { + if (self.dnsServers.ovpn_isNotEmpty) { NEDNSSettings *dnsSettings = [[NEDNSSettings alloc] initWithServers:self.dnsServers.allObjects]; dnsSettings.searchDomains = self.searchDomains.allObjects; networkSettings.DNSSettings = dnsSettings; From 48f5abfba5b0cbeca2d9446fcc774bd664922254 Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Wed, 17 Oct 2018 14:22:36 +0300 Subject: [PATCH 6/6] Revert previous changes and just check for duplicates within methods of delegate --- Sources/OpenVPNAdapter/OpenVPNAdapter.mm | 66 ++++++++++++++++--- .../OpenVPNNetworkSettingsBuilder.h | 6 +- .../OpenVPNNetworkSettingsBuilder.m | 26 ++++---- 3 files changed, 73 insertions(+), 25 deletions(-) diff --git a/Sources/OpenVPNAdapter/OpenVPNAdapter.mm b/Sources/OpenVPNAdapter/OpenVPNAdapter.mm index a5c4e01..8d4795c 100644 --- a/Sources/OpenVPNAdapter/OpenVPNAdapter.mm +++ b/Sources/OpenVPNAdapter/OpenVPNAdapter.mm @@ -172,6 +172,7 @@ - (BOOL)addIPV4Address:(NSString *)address subnetMask:(NSString *)subnetMask gateway:(NSString *)gateway { self.networkSettingsBuilder.ipv4DefaultGateway = gateway; + [self.networkSettingsBuilder.ipv4LocalAddresses addObject:address]; [self.networkSettingsBuilder.ipv4SubnetMasks addObject:subnetMask]; @@ -180,6 +181,7 @@ - (BOOL)addIPV6Address:(NSString *)address prefixLength:(NSNumber *)prefixLength gateway:(NSString *)gateway { self.networkSettingsBuilder.ipv6DefaultGateway = gateway; + [self.networkSettingsBuilder.ipv6LocalAddresses addObject:address]; [self.networkSettingsBuilder.ipv6NetworkPrefixLengths addObject:prefixLength]; @@ -188,34 +190,78 @@ - (BOOL)addIPV4Route:(NEIPv4Route *)route { route.gatewayAddress = self.networkSettingsBuilder.ipv4DefaultGateway; - [self.networkSettingsBuilder.ipv4IncludedRoutes addObject:route]; - return YES; + NSUInteger index = [self.networkSettingsBuilder.ipv4IncludedRoutes indexOfObjectPassingTest:^BOOL(NEIPv4Route *obj, NSUInteger idx, BOOL *stop) { + return [obj.destinationAddress isEqualToString:route.destinationAddress] && + [obj.destinationSubnetMask isEqualToString:route.destinationSubnetMask]; + }]; + + if (index == NSNotFound) { + [self.networkSettingsBuilder.ipv4IncludedRoutes addObject:route]; + return YES; + } else { + return NO; + } } - (BOOL)addIPV6Route:(NEIPv6Route *)route { route.gatewayAddress = self.networkSettingsBuilder.ipv6DefaultGateway; - [self.networkSettingsBuilder.ipv6IncludedRoutes addObject:route]; - return YES; + NSUInteger index = [self.networkSettingsBuilder.ipv6IncludedRoutes indexOfObjectPassingTest:^BOOL(NEIPv6Route *obj, NSUInteger idx, BOOL *stop) { + return [obj.destinationAddress isEqualToString:route.destinationAddress] && + obj.destinationNetworkPrefixLength == route.destinationNetworkPrefixLength; + }]; + + if (index == NSNotFound) { + [self.networkSettingsBuilder.ipv6IncludedRoutes addObject:route]; + return YES; + } else { + return NO; + } } - (BOOL)excludeIPV4Route:(NEIPv4Route *)route { - [self.networkSettingsBuilder.ipv4ExcludedRoutes addObject:route]; - return YES; + NSUInteger index = [self.networkSettingsBuilder.ipv4ExcludedRoutes indexOfObjectPassingTest:^BOOL(NEIPv4Route *obj, NSUInteger idx, BOOL *stop) { + return [obj.destinationAddress isEqualToString:route.destinationAddress] && + [obj.destinationSubnetMask isEqualToString:route.destinationSubnetMask]; + }]; + + if (index == NSNotFound) { + [self.networkSettingsBuilder.ipv4ExcludedRoutes addObject:route]; + return YES; + } else { + return NO; + } } - (BOOL)excludeIPV6Route:(NEIPv6Route *)route { - [self.networkSettingsBuilder.ipv6ExcludedRoutes addObject:route]; - return YES; + NSUInteger index = [self.networkSettingsBuilder.ipv6ExcludedRoutes indexOfObjectPassingTest:^BOOL(NEIPv6Route *obj, NSUInteger idx, BOOL *stop) { + return [obj.destinationAddress isEqualToString:route.destinationAddress] && + obj.destinationNetworkPrefixLength == route.destinationNetworkPrefixLength; + }]; + + if (index == NSNotFound) { + [self.networkSettingsBuilder.ipv6ExcludedRoutes addObject:route]; + return YES; + } else { + return NO; + } } - (BOOL)addDNS:(NSString *)dns { + if ([self.networkSettingsBuilder.dnsServers containsObject:dns]) { + return NO; + } + [self.networkSettingsBuilder.dnsServers addObject:dns]; return YES; } - (BOOL)addSearchDomain:(NSString *)domain { + if ([self.networkSettingsBuilder.searchDomains containsObject:domain]) { + return NO; + } + [self.networkSettingsBuilder.searchDomains addObject:domain]; return YES; } @@ -231,6 +277,10 @@ } - (BOOL)addProxyBypassHost:(NSString *)bypassHost { + if ([self.networkSettingsBuilder.proxyExceptionList containsObject:bypassHost]) { + return NO; + } + [self.networkSettingsBuilder.proxyExceptionList addObject:bypassHost]; return YES; } diff --git a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h index d56b5fb..63903d2 100644 --- a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h +++ b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.h @@ -33,10 +33,10 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) NSMutableArray *ipv6IncludedRoutes; @property (nonatomic, readonly) NSMutableArray *ipv6ExcludedRoutes; -@property (nonatomic, readonly) NSMutableSet *dnsServers; -@property (nonatomic, readonly) NSMutableSet *searchDomains; +@property (nonatomic, readonly) NSMutableArray *dnsServers; +@property (nonatomic, readonly) NSMutableArray *searchDomains; -@property (nonatomic, readonly) NSMutableSet *proxyExceptionList; +@property (nonatomic, readonly) NSMutableArray *proxyExceptionList; @property (nonatomic) BOOL autoProxyConfigurationEnabled; @property (nonatomic, copy, nullable) NSURL *proxyAutoConfigurationURL; diff --git a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m index c70843a..f95433c 100644 --- a/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m +++ b/Sources/OpenVPNAdapter/OpenVPNNetworkSettingsBuilder.m @@ -14,8 +14,6 @@ @interface OpenVPNNetworkSettingsBuilder () -// TODO: Use NSHashTable for routes to avoid duplicates - @property (nonatomic) NSMutableArray *ipv4LocalAddresses; @property (nonatomic) NSMutableArray *ipv4SubnetMasks; @property (nonatomic) NSMutableArray *ipv4IncludedRoutes; @@ -26,10 +24,10 @@ @property (nonatomic) NSMutableArray *ipv6IncludedRoutes; @property (nonatomic) NSMutableArray *ipv6ExcludedRoutes; -@property (nonatomic) NSMutableSet *dnsServers; -@property (nonatomic) NSMutableSet *searchDomains; +@property (nonatomic) NSMutableArray *dnsServers; +@property (nonatomic) NSMutableArray *searchDomains; -@property (nonatomic) NSMutableSet *proxyExceptionList; +@property (nonatomic) NSMutableArray *proxyExceptionList; @end @@ -67,8 +65,8 @@ } if (self.dnsServers.ovpn_isNotEmpty) { - NEDNSSettings *dnsSettings = [[NEDNSSettings alloc] initWithServers:self.dnsServers.allObjects]; - dnsSettings.searchDomains = self.searchDomains.allObjects; + NEDNSSettings *dnsSettings = [[NEDNSSettings alloc] initWithServers:self.dnsServers]; + dnsSettings.searchDomains = self.searchDomains; networkSettings.DNSSettings = dnsSettings; } @@ -77,7 +75,7 @@ proxySettings.autoProxyConfigurationEnabled = self.autoProxyConfigurationEnabled; proxySettings.proxyAutoConfigurationURL = self.proxyAutoConfigurationURL; - proxySettings.exceptionList = self.proxyExceptionList.allObjects; + proxySettings.exceptionList = self.proxyExceptionList; proxySettings.HTTPServer = self.httpProxyServer; proxySettings.HTTPEnabled = self.httpProxyServerEnabled; proxySettings.HTTPSServer = self.httpsProxyServer; @@ -133,18 +131,18 @@ return _ipv6ExcludedRoutes; } -- (NSMutableSet *)dnsServers { - if (!_dnsServers) { _dnsServers = [[NSMutableSet alloc] init]; } +- (NSMutableArray *)dnsServers { + if (!_dnsServers) { _dnsServers = [[NSMutableArray alloc] init]; } return _dnsServers; } -- (NSMutableSet *)searchDomains { - if (!_searchDomains) { _searchDomains = [[NSMutableSet alloc] init]; } +- (NSMutableArray *)searchDomains { + if (!_searchDomains) { _searchDomains = [[NSMutableArray alloc] init]; } return _searchDomains; } -- (NSMutableSet *)proxyExceptionList { - if (!_proxyExceptionList) { _proxyExceptionList = [[NSMutableSet alloc] init]; } +- (NSMutableArray *)proxyExceptionList { + if (!_proxyExceptionList) { _proxyExceptionList = [[NSMutableArray alloc] init]; } return _proxyExceptionList; }