diff --git a/Sources/OpenVPNAdapter/library/OpenVPNAdapter.h b/Sources/OpenVPNAdapter/library/OpenVPNAdapter.h index 9019147..7847bd8 100644 --- a/Sources/OpenVPNAdapter/library/OpenVPNAdapter.h +++ b/Sources/OpenVPNAdapter/library/OpenVPNAdapter.h @@ -96,6 +96,11 @@ NS_SWIFT_NAME(openVPNAdapter(_:handleEvent:message:)); */ @property (nonatomic, class, readonly) NSString *platform; +/** + + */ +@property (nonatomic, weak) id packetFlow; + /** The object that acts as the delegate of the adapter. */ @@ -126,11 +131,6 @@ NS_SWIFT_NAME(openVPNAdapter(_:handleEvent:message:)); */ @property (nonatomic, readonly) OpenVPNTransportStats *transportStatistics; -/** - - */ -- (instancetype)initWithPacketFlow:(id)packetFlow; - /** Applies the given configuration object. Call this method prior to connecting, this method has no effect after calling connect. @@ -181,8 +181,6 @@ NS_SWIFT_NAME(apply(configuration:)); */ - (void)disconnect; -- (instancetype) init NS_UNAVAILABLE; - @end NS_ASSUME_NONNULL_END diff --git a/Sources/OpenVPNAdapter/library/OpenVPNAdapter.mm b/Sources/OpenVPNAdapter/library/OpenVPNAdapter.mm index cf31cd4..53bfd22 100644 --- a/Sources/OpenVPNAdapter/library/OpenVPNAdapter.mm +++ b/Sources/OpenVPNAdapter/library/OpenVPNAdapter.mm @@ -40,10 +40,10 @@ @implementation OpenVPNAdapter -- (instancetype)initWithPacketFlow:(id)packetFlow { +- (instancetype)init { if (self = [super init]) { _vpnClient = new OpenVPNClient(self); - _packetFlowBridge = [[OpenVPNPacketFlowBridge alloc] initWithPacketFlow:packetFlow]; + _packetFlowBridge = [[OpenVPNPacketFlowBridge alloc] init]; } return self; } @@ -87,6 +87,8 @@ } - (void)connect { + NSAssert(self.packetFlow != nil, @"packetFlow property shouldn't be nil, set it before trying to establish connection."); + dispatch_queue_attr_t attributes = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_UTILITY, 0); dispatch_queue_t connectQueue = dispatch_queue_create("me.ss-abramchuk.openvpn-adapter.connection.", attributes); dispatch_async(connectQueue, ^{ @@ -166,6 +168,14 @@ return _networkSettingsBuilder; } +- (id)packetFlow { + return self.packetFlowBridge.packetFlow; +} + +- (void)setPacketFlow:(id)packetFlow { + self.packetFlowBridge.packetFlow = packetFlow; +} + #pragma mark - OpenVPNClientDelegate - (BOOL)setRemoteAddress:(NSString *)address { diff --git a/Sources/OpenVPNAdapter/library/OpenVPNPacketFlowBridge.h b/Sources/OpenVPNAdapter/library/OpenVPNPacketFlowBridge.h index f8dc55d..f99258f 100644 --- a/Sources/OpenVPNAdapter/library/OpenVPNPacketFlowBridge.h +++ b/Sources/OpenVPNAdapter/library/OpenVPNPacketFlowBridge.h @@ -14,12 +14,11 @@ NS_ASSUME_NONNULL_BEGIN @interface OpenVPNPacketFlowBridge: NSObject +@property (nonatomic, weak) id packetFlow; + @property (nonatomic, readonly) CFSocketRef openVPNSocket; @property (nonatomic, readonly) CFSocketRef packetFlowSocket; -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithPacketFlow:(id)packetFlow NS_DESIGNATED_INITIALIZER; - - (BOOL)configureSocketsWithError:(NSError **)error; - (void)invalidateSocketsIfNeeded; diff --git a/Sources/OpenVPNAdapter/library/OpenVPNPacketFlowBridge.mm b/Sources/OpenVPNAdapter/library/OpenVPNPacketFlowBridge.mm index 249db65..c464901 100644 --- a/Sources/OpenVPNAdapter/library/OpenVPNPacketFlowBridge.mm +++ b/Sources/OpenVPNAdapter/library/OpenVPNPacketFlowBridge.mm @@ -15,21 +15,8 @@ #import "OpenVPNPacket.h" #import "OpenVPNAdapterPacketFlow.h" -@interface OpenVPNPacketFlowBridge () - -@property (nonatomic) id packetFlow; - -@end - @implementation OpenVPNPacketFlowBridge -- (instancetype)initWithPacketFlow:(id)packetFlow { - if (self = [super init]) { - _packetFlow = packetFlow; - } - return self; -} - #pragma mark - Sockets Configuration static void SocketCallback(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address, const void *data, void *obj) { diff --git a/Tests/OpenVPNAdapter/OpenVPNAdapterTests.swift b/Tests/OpenVPNAdapter/OpenVPNAdapterTests.swift index e6ddbb6..a8940ea 100644 --- a/Tests/OpenVPNAdapter/OpenVPNAdapterTests.swift +++ b/Tests/OpenVPNAdapter/OpenVPNAdapterTests.swift @@ -32,7 +32,7 @@ class OpenVPNAdapterTests: XCTestCase { func testApplyConfiguration() { guard let vpnConfiguration = VPNProfile.configuration.data(using: .utf8) else { fatalError() } - let adapter = OpenVPNAdapter(packetFlow: customFlow) + let adapter = OpenVPNAdapter() let configuration = OpenVPNConfiguration() configuration.fileContent = vpnConfiguration @@ -52,7 +52,7 @@ class OpenVPNAdapterTests: XCTestCase { } func testProvideCredentials() { - let adapter = OpenVPNAdapter(packetFlow: customFlow) + let adapter = OpenVPNAdapter() let credentials = OpenVPNCredentials() credentials.username = "username" @@ -71,7 +71,7 @@ class OpenVPNAdapterTests: XCTestCase { func testConnection() { guard let vpnConfiguration = VPNProfile.configuration.data(using: .utf8) else { fatalError() } - let adapter = OpenVPNAdapter(packetFlow: customFlow) + let adapter = OpenVPNAdapter() let configuration = OpenVPNConfiguration() configuration.fileContent = vpnConfiguration @@ -99,6 +99,7 @@ class OpenVPNAdapterTests: XCTestCase { expectations[.connection] = expectation(description: "me.ss-abramchuk.openvpn-adapter.connection") + adapter.packetFlow = customFlow adapter.delegate = self adapter.connect()