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
/**
Enum representing the reachability states to the `baseURL` of the `AFHTTPClient.`
Specifies network reachability of the client to its `baseURL` domain.
*/
#ifdef _SYSTEMCONFIGURATION_H
typedef enum{
AFReachabilityStatusUnknown = 0,
AFReachabilityStatusNotReachable,
AFReachabilityStatusReachableViaWWAN,
AFReachabilityStatusReachableViaWiFi,
}AFReachabilityStatus;
typedef enum {
AFNetworkReachabilityStatusUnknown = -1,
AFNetworkReachabilityStatusNotReachable = 0,
AFNetworkReachabilityStatusReachableViaWWAN = 1 << 0,
AFNetworkReachabilityStatusReachableViaWiFi = 1 << 1,
} AFNetworkReachabilityStatus;
#endif
/**
Method used to encode parameters into request body.
Specifies the method used to encode parameters into request body.
*/
typedef enum {
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).
*/
#ifdef _SYSTEMCONFIGURATION_H
@property (readonly, nonatomic) AFReachabilityStatus reachabilityStatus;
@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;
#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).
*/
#ifdef _SYSTEMCONFIGURATION_H
- (void)setReachabilityStatusChangeBlock:(void (^)(AFReachabilityStatus reachabilityStatus))block;
- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block;
#endif
///-------------------------------

View file

@ -34,6 +34,11 @@
#ifdef _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
NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change";
@ -57,7 +62,7 @@ static NSString * const kAFMultipartFormBoundary = @"Boundary+0xAbCdEfGbOuNdArY"
#ifdef _SYSTEMCONFIGURATION_H
typedef SCNetworkReachabilityRef AFNetworkReachabilityRef;
typedef void (^AFNetworkReachabilityStatusBlock)(AFReachabilityStatus reachabilityStatus);
typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status);
#else
typedef id AFNetworkReachabilityRef;
#endif
@ -196,6 +201,7 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
@property (readwrite, nonatomic, retain) NSOperationQueue *operationQueue;
#ifdef _SYSTEMCONFIGURATION_H
@property (readwrite, nonatomic, assign) AFNetworkReachabilityRef networkReachability;
@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;
@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock;
#endif
@ -214,8 +220,8 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
@synthesize operationQueue = _operationQueue;
#ifdef _SYSTEMCONFIGURATION_H
@synthesize networkReachability = _networkReachability;
@synthesize networkReachabilityStatus = _networkReachabilityStatus;
@synthesize networkReachabilityStatusBlock = _networkReachabilityStatusBlock;
@synthesize reachabilityStatus = _reachabilityStatus;
#endif
+ (AFHTTPClient *)clientWithBaseURL:(NSURL *)url {
@ -252,6 +258,7 @@ static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
#endif
#ifdef _SYSTEMCONFIGURATION_H
self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown;
[self startMonitoringNetworkReachability];
#endif
@ -287,22 +294,28 @@ static void AFReachabilityCallback(SCNetworkReachabilityRef __unused target, SCN
BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0);
BOOL isNetworkReachable = (isReachable && !needsConnection);
AFReachabilityStatus status = AFReachabilityStatusUnknown;
if(isNetworkReachable == NO){
status = AFReachabilityStatusNotReachable;
AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusNotReachable;
if(isNetworkReachable == NO) {
status = AFNetworkReachabilityStatusNotReachable;
} else {
#if TARGET_OS_IPHONE
if((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0){
status |= AFNetworkReachabilityStatusReachableViaWWAN;
}
#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;
}
}
#if TARGET_OS_IPHONE
else if((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0){
status = AFReachabilityStatusReachableViaWWAN;
}
else{
status = AFReachabilityStatusReachableViaWiFi;
}
#else
else {
status = AFReachabilityStatusReachableViaWiFi;
}
#endif
AFNetworkReachabilityStatusBlock block = (AFNetworkReachabilityStatusBlock)info;
if (block) {
block(status);
@ -326,13 +339,15 @@ static void AFReachabilityCallback(SCNetworkReachabilityRef __unused target, SCN
}
}
- (void)setReachabilityStatusChangeBlock:(void (^)(AFReachabilityStatus reachabilityStatus))block {
void (^reachabilityCallback)(AFReachabilityStatus reachabilityStatus) = ^(AFReachabilityStatus reachabilityStatus){
_reachabilityStatus = reachabilityStatus;
if(block)
block(reachabilityStatus);
- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block {
AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status){
self.networkReachabilityStatus = status;
if (block) {
block(status);
}
};
self.networkReachabilityStatusBlock = reachabilityCallback;
self.networkReachabilityStatusBlock = callback;
[self startMonitoringNetworkReachability];
}
#endif