| /* |
| Copyright (c) 2011, Tony Million. |
| All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions are met: |
| |
| 1. Redistributions of source code must retain the above copyright notice, this |
| list of conditions and the following disclaimer. |
| |
| 2. Redistributions in binary form must reproduce the above copyright notice, |
| this list of conditions and the following disclaimer in the documentation |
| and/or other materials provided with the distribution. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #import <Foundation/Foundation.h> |
| #import <SystemConfiguration/SystemConfiguration.h> |
| |
| |
| /** |
| * Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X. |
| * |
| * @see http://nshipster.com/ns_enum-ns_options/ |
| **/ |
| #ifndef NS_ENUM |
| #define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type |
| #endif |
| |
| extern NSString *const kReachabilityChangedNotification; |
| |
| typedef NS_ENUM(NSInteger, NetworkStatus) { |
| // Apple NetworkStatus Compatible Names. |
| NotReachable = 0, |
| ReachableViaWiFi = 2, |
| ReachableViaWWAN = 1 |
| }; |
| |
| @class Reachability; |
| |
| typedef void (^NetworkReachable)(Reachability * reachability); |
| typedef void (^NetworkUnreachable)(Reachability * reachability); |
| |
| |
| @interface Reachability : NSObject |
| |
| @property (nonatomic, copy) NetworkReachable reachableBlock; |
| @property (nonatomic, copy) NetworkUnreachable unreachableBlock; |
| |
| @property (nonatomic, assign) BOOL reachableOnWWAN; |
| |
| |
| +(Reachability*)reachabilityWithHostname:(NSString*)hostname; |
| // This is identical to the function above, but is here to maintain |
| //compatibility with Apples original code. (see .m) |
| +(Reachability*)reachabilityWithHostName:(NSString*)hostname; |
| +(Reachability*)reachabilityForInternetConnection; |
| +(Reachability*)reachabilityWithAddress:(void *)hostAddress; |
| +(Reachability*)reachabilityForLocalWiFi; |
| |
| -(Reachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref; |
| |
| -(BOOL)startNotifier; |
| -(void)stopNotifier; |
| |
| -(BOOL)isReachable; |
| -(BOOL)isReachableViaWWAN; |
| -(BOOL)isReachableViaWiFi; |
| |
| // WWAN may be available, but not active until a connection has been established. |
| // WiFi may require a connection for VPN on Demand. |
| -(BOOL)isConnectionRequired; // Identical DDG variant. |
| -(BOOL)connectionRequired; // Apple's routine. |
| // Dynamic, on demand connection? |
| -(BOOL)isConnectionOnDemand; |
| // Is user intervention required? |
| -(BOOL)isInterventionRequired; |
| |
| -(NetworkStatus)currentReachabilityStatus; |
| -(SCNetworkReachabilityFlags)reachabilityFlags; |
| -(NSString*)currentReachabilityString; |
| -(NSString*)currentReachabilityFlags; |
| |
| @end |