81 lines
2.2 KiB
Objective-C
81 lines
2.2 KiB
Objective-C
//
|
|
// DDReachability.h
|
|
// DingDangApp
|
|
//
|
|
// Created by 触海 on 2023/12/11.
|
|
//
|
|
|
|
#import <Foundation/Foundation.h>
|
|
#import <SystemConfiguration/SystemConfiguration.h>
|
|
|
|
#import <sys/socket.h>
|
|
#import <netinet/in.h>
|
|
#import <netinet6/in6.h>
|
|
#import <arpa/inet.h>
|
|
#import <ifaddrs.h>
|
|
#import <netdb.h>
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
#if OS_OBJECT_USE_OBJC
|
|
#define NEEDS_DISPATCH_RETAIN_RELEASE 0
|
|
#else
|
|
#define NEEDS_DISPATCH_RETAIN_RELEASE 1
|
|
#endif
|
|
|
|
#ifndef NS_ENUM
|
|
#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
|
|
#endif
|
|
|
|
extern NSString *const kDDReachabilityChangedNotification;
|
|
|
|
typedef NS_ENUM(NSInteger, DDNetworkStatus) {
|
|
// Apple NetworkStatus Compatible Names.
|
|
DDNotReachable = 0,
|
|
DDReachableViaWiFi = 2,
|
|
DDReachableViaWWAN = 1
|
|
};
|
|
|
|
@class DDReachability;
|
|
|
|
typedef void (^DDNetworkReachable)(DDReachability * reachability);
|
|
typedef void (^DDNetworkUnreachable)(DDReachability * reachability);
|
|
|
|
@interface DDReachability : NSObject
|
|
|
|
@property (nonatomic, copy) DDNetworkReachable reachableBlock;
|
|
@property (nonatomic, copy) DDNetworkUnreachable unreachableBlock;
|
|
@property (nonatomic, assign) BOOL reachableOnWWAN;
|
|
|
|
|
|
+ (DDReachability*)DD_ReachabilityWithHostname:(NSString*)hostname;
|
|
+ (DDReachability*)DD_ReachabilityForInternetConnection;
|
|
+ (DDReachability*)DD_ReachabilityWithAddress:(const struct sockaddr_in*)hostAddress;
|
|
+ (DDReachability*)DD_ReachabilityForLocalWiFi;
|
|
|
|
- (DDReachability *)initWithReachabilityRef:(SCNetworkReachabilityRef)ref;
|
|
|
|
- (BOOL)dd_startNotifier;
|
|
- (void)dd_stopNotifier;
|
|
|
|
- (BOOL)dd_isReachable;
|
|
- (BOOL)dd_isReachableViaWWAN;
|
|
- (BOOL)dd_isReachableViaWiFi;
|
|
|
|
// WWAN may be available, but not active until a connection has been established.
|
|
// WiFi may require a connection for VPN on Demand.
|
|
- (BOOL)dd_isConnectionRequired; // Identical DDG variant.
|
|
- (BOOL)dd_connectionRequired; // Apple's routine.
|
|
// Dynamic, on demand connection?
|
|
- (BOOL)dd_isConnectionOnDemand;
|
|
// Is user intervention required?
|
|
- (BOOL)dd_isInterventionRequired;
|
|
|
|
- (NetworkStatus)dd_currentReachabilityStatus;
|
|
- (SCNetworkReachabilityFlags)dd_reachabilityFlags;
|
|
- (NSString*)dd_currentReachabilityString;
|
|
- (NSString*)dd_currentReachabilityFlags;
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|