diff --git a/OpenVPN Adapter/OpenVPNReachability+Internal.h b/OpenVPN Adapter/OpenVPNReachability+Internal.h index c711428..d38837a 100644 --- a/OpenVPN Adapter/OpenVPNReachability+Internal.h +++ b/OpenVPN Adapter/OpenVPNReachability+Internal.h @@ -11,8 +11,6 @@ @interface OpenVPNReachability (Internal) -@property OpenVPNReachabilityTracker *reachabilityTracker; - - (void)updateReachabilityStatus:(OpenVPNReachabilityStatus)status; @end diff --git a/OpenVPN Adapter/OpenVPNReachability.h b/OpenVPN Adapter/OpenVPNReachability.h index 9402107..7df9185 100644 --- a/OpenVPN Adapter/OpenVPNReachability.h +++ b/OpenVPN Adapter/OpenVPNReachability.h @@ -12,8 +12,9 @@ @interface OpenVPNReachability : NSObject @property (readonly, nonatomic) OpenVPNReachabilityStatus reachabilityStatus; +@property (copy, nonatomic) void (^ _Nullable reachabilityStatusChangedBlock)(OpenVPNReachabilityStatus reachabilityStatus); -- (nonnull instancetype)initWatchingWWAN:(BOOL)watchWWAN watchingWiFi:(BOOL)watchWiFi; +- (nonnull instancetype)init; - (void)startTracking; - (void)stopTracking; diff --git a/OpenVPN Adapter/OpenVPNReachability.mm b/OpenVPN Adapter/OpenVPNReachability.mm index 750da00..63207b7 100644 --- a/OpenVPN Adapter/OpenVPNReachability.mm +++ b/OpenVPN Adapter/OpenVPNReachability.mm @@ -9,13 +9,49 @@ #import "OpenVPNReachability.h" #import "OpenVPNReachability+Internal.h" +@interface OpenVPNReachability () { + OpenVPNReachabilityStatus _reachabilityStatus; +} + +@property (assign, nonatomic) OpenVPNReachabilityTracker *reachabilityTracker; + +@end + @implementation OpenVPNReachability (Internal) - +- (void)updateReachabilityStatus:(OpenVPNReachabilityStatus)status { + _reachabilityStatus = status; + if (self.reachabilityStatusChangedBlock) { + self.reachabilityStatusChangedBlock(status); + } +} @end @implementation OpenVPNReachability +- (OpenVPNReachabilityStatus)reachabilityStatus { + return _reachabilityStatus; +} + +- (nonnull instancetype)init { + self = [super init]; + if (self) { + self.reachabilityTracker = new OpenVPNReachabilityTracker(true, false, (__bridge void *)self); + } + return self; +} + +- (void)startTracking { + self.reachabilityTracker->reachability_tracker_schedule(); +} + +- (void)stopTracking { + self.reachabilityTracker->reachability_tracker_cancel(); +} + +- (void)dealloc { + delete self.reachabilityTracker; +} @end