Renaming AFNetworkReachabilityStatus and changing to bitmask

Fixing AFReachabilityCallback to give correct WiFi reachability value

Minor formatting and refactoring
This commit is contained in:
Mattt Thompson 2012-03-09 15:48:59 -08:00
parent be19b45c13
commit 71d6af9e5c
2 changed files with 48 additions and 33 deletions

View file

@ -38,19 +38,19 @@ extern NSString * const AFNetworkingReachabilityDidChangeNotification;
#endif #endif
/** /**
Enum representing the reachability states to the `baseURL` of the `AFHTTPClient.` Specifies network reachability of the client to its `baseURL` domain.
*/ */
#ifdef _SYSTEMCONFIGURATION_H #ifdef _SYSTEMCONFIGURATION_H
typedef enum { typedef enum {
AFReachabilityStatusUnknown = 0, AFNetworkReachabilityStatusUnknown = -1,
AFReachabilityStatusNotReachable, AFNetworkReachabilityStatusNotReachable = 0,
AFReachabilityStatusReachableViaWWAN, AFNetworkReachabilityStatusReachableViaWWAN = 1 << 0,
AFReachabilityStatusReachableViaWiFi, AFNetworkReachabilityStatusReachableViaWiFi = 1 << 1,
}AFReachabilityStatus; } AFNetworkReachabilityStatus;
#endif #endif
/** /**
Method used to encode parameters into request body. Specifies the method used to encode parameters into request body.
*/ */
typedef enum { typedef enum {
AFFormURLParameterEncoding, AFFormURLParameterEncoding,
@ -165,7 +165,7 @@ extern NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *paramete
@warning This property requires the `SystemConfiguration` framework. Add it in the active target's "Link Binary With Library" build phase, and add `#import <SystemConfiguration/SystemConfiguration.h>` to the header prefix of the project (Prefix.pch). @warning This property requires the `SystemConfiguration` framework. Add it in the active target's "Link Binary With Library" build phase, and add `#import <SystemConfiguration/SystemConfiguration.h>` to the header prefix of the project (Prefix.pch).
*/ */
#ifdef _SYSTEMCONFIGURATION_H #ifdef _SYSTEMCONFIGURATION_H
@property (readonly, nonatomic) AFReachabilityStatus reachabilityStatus; @property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;
#endif #endif
///--------------------------------------------- ///---------------------------------------------
@ -204,7 +204,7 @@ extern NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *paramete
@warning This method requires the `SystemConfiguration` framework. Add it in the active target's "Link Binary With Library" build phase, and add `#import <SystemConfiguration/SystemConfiguration.h>` to the header prefix of the project (Prefix.pch). @warning This method requires the `SystemConfiguration` framework. Add it in the active target's "Link Binary With Library" build phase, and add `#import <SystemConfiguration/SystemConfiguration.h>` to the header prefix of the project (Prefix.pch).
*/ */
#ifdef _SYSTEMCONFIGURATION_H #ifdef _SYSTEMCONFIGURATION_H
- (void)setReachabilityStatusChangeBlock:(void (^)(AFReachabilityStatus reachabilityStatus))block; - (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block;
#endif #endif
///------------------------------- ///-------------------------------

View file

@ -34,6 +34,11 @@
#ifdef _SYSTEMCONFIGURATION_H #ifdef _SYSTEMCONFIGURATION_H
#import <SystemConfiguration/SystemConfiguration.h> #import <SystemConfiguration/SystemConfiguration.h>
#import <netinet/in.h>
#import <netinet6/in6.h>
#import <arpa/inet.h>
#import <ifaddrs.h>
#import <netdb.h>
#endif #endif
NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change"; NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change";
@ -57,7 +62,7 @@ static NSString * const kAFMultipartFormBoundary = @"Boundary+0xAbCdEfGbOuNdArY"
#ifdef _SYSTEMCONFIGURATION_H #ifdef _SYSTEMCONFIGURATION_H
typedef SCNetworkReachabilityRef AFNetworkReachabilityRef; typedef SCNetworkReachabilityRef AFNetworkReachabilityRef;
typedef void (^AFNetworkReachabilityStatusBlock)(AFReachabilityStatus reachabilityStatus); typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status);
#else #else
typedef id AFNetworkReachabilityRef; typedef id AFNetworkReachabilityRef;
#endif #endif
@ -196,6 +201,7 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
@property (readwrite, nonatomic, retain) NSOperationQueue *operationQueue; @property (readwrite, nonatomic, retain) NSOperationQueue *operationQueue;
#ifdef _SYSTEMCONFIGURATION_H #ifdef _SYSTEMCONFIGURATION_H
@property (readwrite, nonatomic, assign) AFNetworkReachabilityRef networkReachability; @property (readwrite, nonatomic, assign) AFNetworkReachabilityRef networkReachability;
@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;
@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock; @property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock;
#endif #endif
@ -214,8 +220,8 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
@synthesize operationQueue = _operationQueue; @synthesize operationQueue = _operationQueue;
#ifdef _SYSTEMCONFIGURATION_H #ifdef _SYSTEMCONFIGURATION_H
@synthesize networkReachability = _networkReachability; @synthesize networkReachability = _networkReachability;
@synthesize networkReachabilityStatus = _networkReachabilityStatus;
@synthesize networkReachabilityStatusBlock = _networkReachabilityStatusBlock; @synthesize networkReachabilityStatusBlock = _networkReachabilityStatusBlock;
@synthesize reachabilityStatus = _reachabilityStatus;
#endif #endif
+ (AFHTTPClient *)clientWithBaseURL:(NSURL *)url { + (AFHTTPClient *)clientWithBaseURL:(NSURL *)url {
@ -252,6 +258,7 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
#endif #endif
#ifdef _SYSTEMCONFIGURATION_H #ifdef _SYSTEMCONFIGURATION_H
self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown;
[self startMonitoringNetworkReachability]; [self startMonitoringNetworkReachability];
#endif #endif
@ -287,22 +294,28 @@ static void AFReachabilityCallback(SCNetworkReachabilityRef __unused target, SCN
BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0);
BOOL isNetworkReachable = (isReachable && !needsConnection); BOOL isNetworkReachable = (isReachable && !needsConnection);
AFReachabilityStatus status = AFReachabilityStatusUnknown; AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusNotReachable;
if(isNetworkReachable == NO) { if(isNetworkReachable == NO) {
status = AFReachabilityStatusNotReachable; status = AFNetworkReachabilityStatusNotReachable;
} } else {
#if TARGET_OS_IPHONE #if TARGET_OS_IPHONE
else if((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0){ if((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0){
status = AFReachabilityStatusReachableViaWWAN; status |= AFNetworkReachabilityStatusReachableViaWWAN;
}
else{
status = AFReachabilityStatusReachableViaWiFi;
}
#else
else {
status = AFReachabilityStatusReachableViaWiFi;
} }
#endif #endif
struct sockaddr_in localWiFiAddress;
memset(&localWiFiAddress, '\0', sizeof(localWiFiAddress));
localWiFiAddress.sin_len = sizeof(localWiFiAddress);
localWiFiAddress.sin_family = AF_INET;
localWiFiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM);
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)&localWiFiAddress);
if (reachability != NULL) {
status |= AFNetworkReachabilityStatusReachableViaWiFi;
}
}
AFNetworkReachabilityStatusBlock block = (AFNetworkReachabilityStatusBlock)info; AFNetworkReachabilityStatusBlock block = (AFNetworkReachabilityStatusBlock)info;
if (block) { if (block) {
block(status); block(status);
@ -326,13 +339,15 @@ static void AFReachabilityCallback(SCNetworkReachabilityRef __unused target, SCN
} }
} }
- (void)setReachabilityStatusChangeBlock:(void (^)(AFReachabilityStatus reachabilityStatus))block { - (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block {
void (^reachabilityCallback)(AFReachabilityStatus reachabilityStatus) = ^(AFReachabilityStatus reachabilityStatus){ AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status){
_reachabilityStatus = reachabilityStatus; self.networkReachabilityStatus = status;
if(block) if (block) {
block(reachabilityStatus); block(status);
}
}; };
self.networkReachabilityStatusBlock = reachabilityCallback;
self.networkReachabilityStatusBlock = callback;
[self startMonitoringNetworkReachability]; [self startMonitoringNetworkReachability];
} }
#endif #endif