Reset tunnel on disconnect

This commit is contained in:
Sergey Abramchuk
2019-02-24 16:06:24 +03:00
parent e7084c56c6
commit 399ce8435d
3 changed files with 14 additions and 4 deletions

View File

@@ -34,11 +34,11 @@ typedef NS_ENUM(NSInteger, OpenVPNAdapterEvent);
the TUN interface, or nil if an error occurred. the TUN interface, or nil if an error occurred.
@param openVPNAdapter The OpenVPNAdapter instance requesting this information. @param openVPNAdapter The OpenVPNAdapter instance requesting this information.
@param networkSettings The NEPacketTunnelNetworkSettings to be used for the tunnel. @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. @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 - (void)openVPNAdapter:(OpenVPNAdapter *)openVPNAdapter
configureTunnelWithNetworkSettings:(NEPacketTunnelNetworkSettings *)networkSettings configureTunnelWithNetworkSettings:(nullable NEPacketTunnelNetworkSettings *)networkSettings
completionHandler:(void (^)(id<OpenVPNAdapterPacketFlow> _Nullable packetFlow))completionHandler completionHandler:(void (^)(id<OpenVPNAdapterPacketFlow> _Nullable packetFlow))completionHandler
NS_SWIFT_NAME(openVPNAdapter(_:configureTunnelWithNetworkSettings:completionHandler:)); NS_SWIFT_NAME(openVPNAdapter(_:configureTunnelWithNetworkSettings:completionHandler:));

View File

@@ -398,6 +398,16 @@
_sessionName = nil; _sessionName = nil;
_packetFlowBridge = nil; _packetFlowBridge = nil;
_networkSettingsBuilder = nil; _networkSettingsBuilder = nil;
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
void (^completionHandler)(id<OpenVPNAdapterPacketFlow> _Nullable) = ^(id<OpenVPNAdapterPacketFlow> 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 - #pragma mark -

View File

@@ -111,7 +111,7 @@ class OpenVPNAdapterTests: XCTestCase {
extension OpenVPNAdapterTests: OpenVPNAdapterDelegate { 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) completionHandler(customFlow)
} }