diff --git a/Sources/OpenVPNAdapter/OpenVPNAdapter.h b/Sources/OpenVPNAdapter/OpenVPNAdapter.h index 45b5ccb..3105daa 100644 --- a/Sources/OpenVPNAdapter/OpenVPNAdapter.h +++ b/Sources/OpenVPNAdapter/OpenVPNAdapter.h @@ -34,11 +34,11 @@ typedef NS_ENUM(NSInteger, OpenVPNAdapterEvent); the TUN interface, or nil if an error occurred. @param openVPNAdapter The OpenVPNAdapter instance requesting this information. - @param networkSettings The NEPacketTunnelNetworkSettings to be used for the tunnel. - @param completionHandler The completion handler to be called with a NEPacketTunnelFlow object, or nil if an error occurred. + @param networkSettings The NEPacketTunnelNetworkSettings to be used for the tunnel. Provides nil to clear out the network settings. + @param completionHandler The completion handler to be called with a NEPacketTunnelFlow object, or nil if an error occurred or the network settings were cleared out. */ - (void)openVPNAdapter:(OpenVPNAdapter *)openVPNAdapter -configureTunnelWithNetworkSettings:(NEPacketTunnelNetworkSettings *)networkSettings +configureTunnelWithNetworkSettings:(nullable NEPacketTunnelNetworkSettings *)networkSettings completionHandler:(void (^)(id _Nullable packetFlow))completionHandler NS_SWIFT_NAME(openVPNAdapter(_:configureTunnelWithNetworkSettings:completionHandler:)); diff --git a/Sources/OpenVPNAdapter/OpenVPNAdapter.mm b/Sources/OpenVPNAdapter/OpenVPNAdapter.mm index 0e7a2e1..84a6e29 100644 --- a/Sources/OpenVPNAdapter/OpenVPNAdapter.mm +++ b/Sources/OpenVPNAdapter/OpenVPNAdapter.mm @@ -398,6 +398,16 @@ _sessionName = nil; _packetFlowBridge = nil; _networkSettingsBuilder = nil; + + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + + void (^completionHandler)(id _Nullable) = ^(id flow) { + dispatch_semaphore_signal(semaphore); + }; + + [self.delegate openVPNAdapter:self configureTunnelWithNetworkSettings:nil completionHandler:completionHandler]; + + dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 30 * NSEC_PER_SEC)); } #pragma mark - diff --git a/Sources/OpenVPNAdapter/OpenVPNConfiguration.h b/Sources/OpenVPNAdapter/OpenVPNConfiguration.h index 4276997..f0a324a 100644 --- a/Sources/OpenVPNAdapter/OpenVPNConfiguration.h +++ b/Sources/OpenVPNAdapter/OpenVPNConfiguration.h @@ -64,11 +64,6 @@ typedef NS_ENUM(NSInteger, OpenVPNTLSCertProfile); */ @property (nonatomic) NSInteger connectionTimeout; -/** - Keep tun interface active during pauses or reconnections - */ -@property (nonatomic) BOOL tunPersist; - /** If YES and a redirect-gateway profile doesn't also define DNS servers, use the standard Google DNS servers. diff --git a/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm b/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm index 42565d1..bb8d414 100644 --- a/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm +++ b/Sources/OpenVPNAdapter/OpenVPNConfiguration.mm @@ -308,14 +308,6 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; _config.connTimeout = connectionTimeout; } -- (BOOL)tunPersist { - return _config.tunPersist; -} - -- (void)setTunPersist:(BOOL)tunPersist { - _config.tunPersist = tunPersist; -} - - (BOOL)googleDNSFallback { return _config.googleDnsFallback; } @@ -485,7 +477,6 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; configuration.proto = self.proto; configuration.ipv6 = self.ipv6; configuration.connectionTimeout = self.connectionTimeout; - configuration.tunPersist = self.tunPersist; configuration.googleDNSFallback = self.googleDNSFallback; configuration.synchronousDNSLookup = self.synchronousDNSLookup; configuration.autologinSessions = self.autologinSessions; @@ -512,7 +503,6 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; [aCoder encodeInteger:self.proto forKey:NSStringFromSelector(@selector(proto))]; [aCoder encodeInteger:self.ipv6 forKey:NSStringFromSelector(@selector(ipv6))]; [aCoder encodeInteger:self.connectionTimeout forKey:NSStringFromSelector(@selector(connectionTimeout))]; - [aCoder encodeBool:self.tunPersist forKey:NSStringFromSelector(@selector(tunPersist))]; [aCoder encodeBool:self.googleDNSFallback forKey:NSStringFromSelector(@selector(googleDNSFallback))]; [aCoder encodeBool:self.synchronousDNSLookup forKey:NSStringFromSelector(@selector(synchronousDNSLookup))]; [aCoder encodeBool:self.autologinSessions forKey:NSStringFromSelector(@selector(autologinSessions))]; @@ -539,7 +529,6 @@ NSString *const OpenVPNTLSCertProfileDefaultValue = @"default"; self.proto = (OpenVPNTransportProtocol)[aDecoder decodeIntegerForKey:NSStringFromSelector(@selector(proto))]; self.ipv6 = (OpenVPNIPv6Preference)[aDecoder decodeIntegerForKey:NSStringFromSelector(@selector(ipv6))]; self.connectionTimeout = [aDecoder decodeIntegerForKey:NSStringFromSelector(@selector(connectionTimeout))]; - self.tunPersist = [aDecoder decodeBoolForKey:NSStringFromSelector(@selector(tunPersist))]; self.googleDNSFallback = [aDecoder decodeBoolForKey:NSStringFromSelector(@selector(googleDNSFallback))]; self.synchronousDNSLookup = [aDecoder decodeBoolForKey:NSStringFromSelector(@selector(synchronousDNSLookup))]; self.autologinSessions = [aDecoder decodeBoolForKey:NSStringFromSelector(@selector(autologinSessions))]; diff --git a/Tests/OpenVPNAdapterTests.swift b/Tests/OpenVPNAdapterTests.swift index eb3a29d..11b7ec0 100644 --- a/Tests/OpenVPNAdapterTests.swift +++ b/Tests/OpenVPNAdapterTests.swift @@ -111,7 +111,7 @@ class OpenVPNAdapterTests: XCTestCase { extension OpenVPNAdapterTests: OpenVPNAdapterDelegate { - func openVPNAdapter(_ openVPNAdapter: OpenVPNAdapter, configureTunnelWithNetworkSettings networkSettings: NEPacketTunnelNetworkSettings, completionHandler: @escaping (OpenVPNAdapterPacketFlow?) -> Void) { + func openVPNAdapter(_ openVPNAdapter: OpenVPNAdapter, configureTunnelWithNetworkSettings networkSettings: NEPacketTunnelNetworkSettings?, completionHandler: @escaping (OpenVPNAdapterPacketFlow?) -> Void) { completionHandler(customFlow) }