diff -r c047e70c53f4 -r fc755bb8096d project_files/HedgewarsMobile/Classes/CommodityFunctions.m --- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Sat Jul 30 17:23:47 2011 -0400 +++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Sun Jul 31 16:03:24 2011 +0200 @@ -27,6 +27,8 @@ #import #import #import +#import +#import #import "PascalImports.h" #import "hwconsts.h" @@ -128,6 +130,40 @@ return theLabel; } +BOOL isNetworkReachable (void) { + // Create zero addy + struct sockaddr_in zeroAddress; + bzero(&zeroAddress, sizeof(zeroAddress)); + zeroAddress.sin_len = sizeof(zeroAddress); + zeroAddress.sin_family = AF_INET; + + // Recover reachability flags + SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); + SCNetworkReachabilityFlags flags; + + BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); + CFRelease(defaultRouteReachability); + + if (!didRetrieveFlags) { + NSLog(@"Error. Could not recover network reachability flags"); + return NO; + } + + BOOL isReachable = flags & kSCNetworkFlagsReachable; + BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; + BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection; + + NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"]; + NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL + cachePolicy:NSURLRequestReloadIgnoringLocalCacheData + timeoutInterval:20.0]; + NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:nil]; + BOOL testResult = testConnection ? YES : NO; + [testConnection release]; + + return ((isReachable && !needsConnection) || nonWiFi) ? testResult : NO; +} + // this routine checks for the PNG size without loading it in memory // https://github.com/steipete/PSFramework/blob/master/PSFramework%20Version%200.3/PhotoshopFramework/PSMetaDataFunctions.m CGSize PSPNGSizeFromMetaData (NSString *aFileName) {