From cb4490ad0dc2c5e98c7512c643d05bd00600809c Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Thu, 5 Oct 2017 15:45:13 +0300 Subject: [PATCH] Return current reachability status using openvpn::Reachability class --- OpenVPN Adapter/OpenVPNReachability.h | 2 +- OpenVPN Adapter/OpenVPNReachability.mm | 34 ++++++++++++++++---------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/OpenVPN Adapter/OpenVPNReachability.h b/OpenVPN Adapter/OpenVPNReachability.h index fd8e272..8ba4632 100644 --- a/OpenVPN Adapter/OpenVPNReachability.h +++ b/OpenVPN Adapter/OpenVPNReachability.h @@ -16,7 +16,7 @@ - (nonnull instancetype)init; -- (void)startTrackingWithCallback:(nullable void (^)(OpenVPNReachabilityStatus))callback; +- (void)startTrackingWithCallback:(nonnull void (^)(OpenVPNReachabilityStatus))callback; - (void)stopTracking; @end diff --git a/OpenVPN Adapter/OpenVPNReachability.mm b/OpenVPN Adapter/OpenVPNReachability.mm index e6bcf09..360da7b 100644 --- a/OpenVPN Adapter/OpenVPNReachability.mm +++ b/OpenVPN Adapter/OpenVPNReachability.mm @@ -6,15 +6,18 @@ // // +#import + #import "OpenVPNReachability.h" #import "OpenVPNReachability+Internal.h" @interface OpenVPNReachability () { BOOL _isTracking; - OpenVPNReachabilityStatus _reachabilityStatus; } -@property (assign, nonatomic) OpenVPNReachabilityTracker *reachabilityTracker; +@property (assign, nonatomic) OpenVPNReachabilityTracker *tracker; +@property (assign, nonatomic) Reachability *reachability; + @property (copy, nonatomic) void (^ reachabilityStatusChangedBlock)(OpenVPNReachabilityStatus); @end @@ -22,10 +25,7 @@ @implementation OpenVPNReachability (Internal) - (void)updateReachabilityStatus:(OpenVPNReachabilityStatus)status { - _reachabilityStatus = status; - if (self.reachabilityStatusChangedBlock) { - self.reachabilityStatusChangedBlock(status); - } + if (self.reachabilityStatusChangedBlock) { self.reachabilityStatusChangedBlock(status); } } @end @@ -37,16 +37,21 @@ } - (OpenVPNReachabilityStatus)reachabilityStatus { - return _reachabilityStatus; + ReachabilityInterface::Status status = self.reachability->reachable(); + switch (status) { + case ReachabilityInterface::NotReachable: return OpenVPNReachabilityStatusNotReachable; + case ReachabilityInterface::ReachableViaWiFi: return OpenVPNReachabilityStatusReachableViaWiFi; + case ReachabilityInterface::ReachableViaWWAN: return OpenVPNReachabilityStatusReachableViaWWAN; + } } - (nonnull instancetype)init { self = [super init]; if (self) { _isTracking = NO; - _reachabilityStatus = OpenVPNReachabilityStatusNotReachable; - - self.reachabilityTracker = new OpenVPNReachabilityTracker(true, false, (__bridge void *)self); + + self.tracker = new OpenVPNReachabilityTracker(true, false, (__bridge void *)self); + self.reachability = new Reachability(true, true); } return self; } @@ -56,21 +61,24 @@ dispatch_queue_t main = dispatch_get_main_queue(); dispatch_async(main, ^{ - self.reachabilityTracker->reachability_tracker_schedule(); + self.tracker->reachability_tracker_schedule(); }); + _isTracking = YES; } - (void)stopTracking { dispatch_queue_t main = dispatch_get_main_queue(); dispatch_async(main, ^{ - self.reachabilityTracker->reachability_tracker_cancel(); + self.tracker->reachability_tracker_cancel(); }); + _isTracking = NO; } - (void)dealloc { - delete self.reachabilityTracker; + delete self.tracker; + delete self.reachability; } @end