From 8076a1e37f037b06f0938ffc3ebc768711d142dc Mon Sep 17 00:00:00 2001 From: longbai Date: Tue, 9 Jun 2015 13:59:20 +0800 Subject: [PATCH 1/2] dns hijacking --- QiniuSDK/Http/QNHttpManager.h | 6 ++++-- QiniuSDK/Http/QNHttpManager.m | 17 ++++++++++------ QiniuSDK/Http/QNResponseInfo.h | 4 ++++ QiniuSDK/Http/QNResponseInfo.m | 8 ++++++-- QiniuSDK/Http/QNSessionManager.h | 6 ++++-- QiniuSDK/Http/QNSessionManager.m | 17 ++++++++++------ QiniuSDK/Http/QNhttpDelegate.h | 6 ++++-- QiniuSDK/Storage/QNFormUpload.m | 11 ++++++++-- QiniuSDK/Storage/QNResumeUpload.m | 10 +++++++++- QiniuSDKTests/QNFormUploadTest.m | 32 ++++++++++++++++++++++++++++-- QiniuSDKTests/QNHttpTest.m | 16 +++++++-------- QiniuSDKTests/QNResumeUploadTest.m | 25 +++++++++++++++++++++++ QiniuSDKTests/QNSessionTest.m | 18 ++++++++--------- 13 files changed, 134 insertions(+), 42 deletions(-) diff --git a/QiniuSDK/Http/QNHttpManager.h b/QiniuSDK/Http/QNHttpManager.h index 7a169369..2775ffcc 100644 --- a/QiniuSDK/Http/QNHttpManager.h +++ b/QiniuSDK/Http/QNHttpManager.h @@ -24,7 +24,8 @@ withMimeType:(NSString *)mime withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock; + withCancelBlock:(QNCancelBlock)cancelBlock + forceIp:(BOOL)forceIp; - (void) post:(NSString *)url withData:(NSData *)data @@ -32,6 +33,7 @@ withHeaders:(NSDictionary *)headers withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock; + withCancelBlock:(QNCancelBlock)cancelBlock + forceIp:(BOOL)forceIp; @end diff --git a/QiniuSDK/Http/QNHttpManager.m b/QiniuSDK/Http/QNHttpManager.m index 28b722da..11597247 100644 --- a/QiniuSDK/Http/QNHttpManager.m +++ b/QiniuSDK/Http/QNHttpManager.m @@ -75,7 +75,8 @@ + (QNResponseInfo *)buildResponseInfo:(AFHTTPRequestOperation *)operation - (void) sendRequest:(NSMutableURLRequest *)request withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock{ + withCancelBlock:(QNCancelBlock)cancelBlock +forceIp:(BOOL) forceIp{ NSString *u = request.URL.absoluteString; NSURL *url = request.URL; __block NSString *ip = nil; @@ -85,7 +86,7 @@ - (void) sendRequest:(NSMutableURLRequest *)request if (_backupIp != nil && ![_backupIp isEqualToString:@""]) { NSString *host = url.host; ip = [QNDns getAddress:host]; - if ([ip isEqualToString:@""]) { + if ([ip isEqualToString:@""] || forceIp) { ip = _backupIp; } NSString *path = url.path; @@ -149,7 +150,8 @@ - (void)multipartPost:(NSString *)url withMimeType:(NSString *)mime withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock { + withCancelBlock:(QNCancelBlock)cancelBlock +forceIp:(BOOL) forceIp{ NSMutableURLRequest *request = [_httpManager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:url @@ -162,7 +164,8 @@ - (void)multipartPost:(NSString *)url [self sendRequest:request withCompleteBlock:completeBlock withProgressBlock:progressBlock - withCancelBlock:cancelBlock]; + withCancelBlock:cancelBlock + forceIp:forceIp]; } - (void) post:(NSString *)url @@ -171,7 +174,8 @@ - (void) post:(NSString *)url withHeaders:(NSDictionary *)headers withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock { + withCancelBlock:(QNCancelBlock)cancelBlock + forceIp:(BOOL) forceIp{ NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:url]]; if (headers) { [request setAllHTTPHeaderFields:headers]; @@ -186,7 +190,8 @@ - (void) post:(NSString *)url [self sendRequest:request withCompleteBlock:completeBlock withProgressBlock:progressBlock - withCancelBlock:cancelBlock]; + withCancelBlock:cancelBlock + forceIp:forceIp]; } @end diff --git a/QiniuSDK/Http/QNResponseInfo.h b/QiniuSDK/Http/QNResponseInfo.h index 8e284871..cdc67f2a 100644 --- a/QiniuSDK/Http/QNResponseInfo.h +++ b/QiniuSDK/Http/QNResponseInfo.h @@ -108,6 +108,10 @@ extern const int kQNFileError; */ @property (nonatomic, readonly) BOOL needSwitchServer; +/** + * 是否为 七牛响应 + */ +@property (nonatomic, readonly, getter = isNotQiniu) BOOL notQiniu; /** * 工厂函数,内部使用 diff --git a/QiniuSDK/Http/QNResponseInfo.m b/QiniuSDK/Http/QNResponseInfo.m index b3c2ca1b..9a6b1d7b 100644 --- a/QiniuSDK/Http/QNResponseInfo.m +++ b/QiniuSDK/Http/QNResponseInfo.m @@ -172,13 +172,17 @@ - (BOOL)isCancelled { return _statusCode == kQNRequestCancelled || _statusCode == -999; } +- (BOOL)isNotQiniu { + return (_statusCode >= 200 && _statusCode < 500) && _reqId == nil; +} + - (BOOL)isOK { return _statusCode == 200 && _error == nil && _reqId != nil; } - (BOOL)isConnectionBroken { // reqId is nill means the server is not qiniu - return _statusCode == kQNNetworkError; + return _statusCode == kQNNetworkError || (_statusCode < -1000 && _statusCode != -1003); } - (BOOL)needSwitchServer { @@ -186,7 +190,7 @@ - (BOOL)needSwitchServer { } - (BOOL)couldRetry { - return (_statusCode >= 500 && _statusCode < 600 && _statusCode != 579) || _statusCode == kQNNetworkError || _statusCode == 996 || _statusCode == 406 || (_statusCode == 200 && _error != nil) || _statusCode < -1000; + return (_statusCode >= 500 && _statusCode < 600 && _statusCode != 579) || _statusCode == kQNNetworkError || _statusCode == 996 || _statusCode == 406 || (_statusCode == 200 && _error != nil) || _statusCode < -1000 || self.isNotQiniu; } @end diff --git a/QiniuSDK/Http/QNSessionManager.h b/QiniuSDK/Http/QNSessionManager.h index 8d746eb1..8162e0d5 100644 --- a/QiniuSDK/Http/QNSessionManager.h +++ b/QiniuSDK/Http/QNSessionManager.h @@ -19,7 +19,8 @@ withMimeType:(NSString *)mime withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock; + withCancelBlock:(QNCancelBlock)cancelBlock + forceIp:(BOOL)forceIp; - (void) post:(NSString *)url withData:(NSData *)data @@ -27,7 +28,8 @@ withHeaders:(NSDictionary *)headers withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock; + withCancelBlock:(QNCancelBlock)cancelBlock + forceIp:(BOOL)forceIp; @end diff --git a/QiniuSDK/Http/QNSessionManager.m b/QiniuSDK/Http/QNSessionManager.m index 25c08c43..b32930db 100644 --- a/QiniuSDK/Http/QNSessionManager.m +++ b/QiniuSDK/Http/QNSessionManager.m @@ -132,7 +132,8 @@ + (QNResponseInfo *)buildResponseInfo:(NSHTTPURLResponse *)response - (void) sendRequest:(NSMutableURLRequest *)request withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock{ + withCancelBlock:(QNCancelBlock)cancelBlock +forceIp:(BOOL) forceIp{ __block NSDate *startTime = [NSDate date]; NSProgress *progress = nil; __block NSString *host = request.URL.host; @@ -147,7 +148,7 @@ - (void) sendRequest:(NSMutableURLRequest *)request if (_noProxy && _backupIp != nil && ![_backupIp isEqualToString:@""]) { NSString *host = url.host; ip = [QNDns getAddress:host]; - if ([ip isEqualToString:@""]) { + if ([ip isEqualToString:@""] || forceIp) { ip = _backupIp; } NSString *path = url.path; @@ -212,7 +213,8 @@ - (void)multipartPost:(NSString *)url withMimeType:(NSString *)mime withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock { + withCancelBlock:(QNCancelBlock)cancelBlock +forceIp:(BOOL) forceIp{ NSMutableURLRequest *request = [_httpManager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:url @@ -225,7 +227,8 @@ - (void)multipartPost:(NSString *)url [self sendRequest:request withCompleteBlock:completeBlock withProgressBlock:progressBlock - withCancelBlock:cancelBlock]; + withCancelBlock:cancelBlock + forceIp:forceIp]; } - (void) post:(NSString *)url @@ -234,7 +237,8 @@ - (void) post:(NSString *)url withHeaders:(NSDictionary *)headers withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock { + withCancelBlock:(QNCancelBlock)cancelBlock +forceIp:(BOOL) forceIp{ NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:url]]; if (headers) { [request setAllHTTPHeaderFields:headers]; @@ -250,7 +254,8 @@ - (void) post:(NSString *)url [self sendRequest:request withCompleteBlock:completeBlock withProgressBlock:progressBlock - withCancelBlock:cancelBlock]; + withCancelBlock:cancelBlock + forceIp: forceIp]; }); } diff --git a/QiniuSDK/Http/QNhttpDelegate.h b/QiniuSDK/Http/QNhttpDelegate.h index 6f9ced09..d4902431 100644 --- a/QiniuSDK/Http/QNhttpDelegate.h +++ b/QiniuSDK/Http/QNhttpDelegate.h @@ -18,7 +18,8 @@ typedef BOOL (^QNCancelBlock)(void); withMimeType:(NSString *)mime withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock; + withCancelBlock:(QNCancelBlock)cancelBlock + forceIp:(BOOL)forceIp; - (void) post:(NSString *)url withData:(NSData *)data @@ -26,6 +27,7 @@ typedef BOOL (^QNCancelBlock)(void); withHeaders:(NSDictionary *)headers withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock - withCancelBlock:(QNCancelBlock)cancelBlock; + withCancelBlock:(QNCancelBlock)cancelBlock + forceIp:(BOOL)forceIp; @end diff --git a/QiniuSDK/Storage/QNFormUpload.m b/QiniuSDK/Storage/QNFormUpload.m index ca5d0c15..19c81886 100644 --- a/QiniuSDK/Storage/QNFormUpload.m +++ b/QiniuSDK/Storage/QNFormUpload.m @@ -95,6 +95,11 @@ - (void)put { nextHost = _config.upHostBackup; } + BOOL forceIp = NO; + if (info.isNotQiniu) { + forceIp = YES; + } + QNCompleteBlock retriedComplete = ^(QNResponseInfo *info, NSDictionary *resp) { if (info.isOK) { _option.progressHandler(_key, 1.0); @@ -109,7 +114,8 @@ - (void)put { withMimeType:_option.mimeType withCompleteBlock:retriedComplete withProgressBlock:p - withCancelBlock:_option.cancellationSignal]; + withCancelBlock:_option.cancellationSignal + forceIp:forceIp]; }; [_httpManager multipartPost:[NSString stringWithFormat:@"http://%@:%u/", _config.upHost, (unsigned int)_config.upPort] @@ -119,7 +125,8 @@ - (void)put { withMimeType:_option.mimeType withCompleteBlock:complete withProgressBlock:p - withCancelBlock:_option.cancellationSignal]; + withCancelBlock:_option.cancellationSignal + forceIp:NO]; } @end diff --git a/QiniuSDK/Storage/QNResumeUpload.m b/QiniuSDK/Storage/QNResumeUpload.m index c7d91bf1..7b12eab6 100644 --- a/QiniuSDK/Storage/QNResumeUpload.m +++ b/QiniuSDK/Storage/QNResumeUpload.m @@ -39,6 +39,8 @@ @interface QNResumeUpload () @property UInt32 chunkCrc; +@property BOOL forceIp; + - (void)makeBlock:(NSString *)uphost offset:(UInt32)offset blockSize:(UInt32)blockSize @@ -89,6 +91,7 @@ - (instancetype)initWithData:(NSData *)data _config = config; _token = token; + _forceIp = NO; } return self; } @@ -217,6 +220,10 @@ - (void)nextTask:(UInt32)offset retriedTimes:(int)retried host:(NSString *)host nextHost = _config.upHostBackup; } + if (info.isNotQiniu) { + _forceIp = YES; + } + [self nextTask:offset retriedTimes:retried + 1 host:nextHost]; return; } @@ -306,7 +313,8 @@ - (void) post:(NSString *)url withData:(NSData *)data withCompleteBlock:(QNCompleteBlock)completeBlock withProgressBlock:(QNInternalProgressBlock)progressBlock { - [_httpManager post:url withData:data withParams:nil withHeaders:_headers withCompleteBlock:completeBlock withProgressBlock:progressBlock withCancelBlock:_option.cancellationSignal]; + [_httpManager post:url withData:data withParams:nil withHeaders:_headers withCompleteBlock:completeBlock withProgressBlock:progressBlock withCancelBlock:_option.cancellationSignal + forceIp:_forceIp]; } - (void)run { diff --git a/QiniuSDKTests/QNFormUploadTest.m b/QiniuSDKTests/QNFormUploadTest.m index 328b300f..dcd6bd38 100644 --- a/QiniuSDKTests/QNFormUploadTest.m +++ b/QiniuSDKTests/QNFormUploadTest.m @@ -14,13 +14,13 @@ #import "QNTestConfig.h" -@interface QNFormUploadTesT : XCTestCase +@interface QNFormUploadTest : XCTestCase @property QNUploadManager *upManager; @end -@implementation QNFormUploadTesT +@implementation QNFormUploadTest - (void)setUp { [super setUp]; @@ -229,4 +229,32 @@ - (void)testUrlConvert { XCTAssert([@"FgoKnypncpQlV6tTVddq9EL49l4B" isEqualToString:testResp[@"key"]], @"Pass"); } +- (void)testDnsHijacking { + __block QNResponseInfo *testInfo = nil; + __block NSDictionary *testResp = nil; + __block NSString *key = nil; + + QNConfiguration *config = [QNConfiguration build: ^(QNConfigurationBuilder *builder) { + builder.zone = [[QNZone alloc] initWithUpHost:@"uphijacktest.qiniu.com" upHostBackup:@"uphijacktest.qiniu.com" upIp:[QNZone zone0].upIp]; + }]; + + QNUploadManager *upManager = [[QNUploadManager alloc] initWithConfiguration:config]; + + NSData *data = [@"Hello, World!" dataUsingEncoding:NSUTF8StringEncoding]; + [upManager putData:data key:nil token:g_token complete: ^(QNResponseInfo *info, NSString *k, NSDictionary *resp) { + key = k; + testInfo = info; + testResp = resp; + } option:nil]; + + AGWW_WAIT_WHILE(testInfo == nil, 100.0); + NSLog(@"%@", testInfo); + NSLog(@"%@", testResp); + XCTAssert(key == nil, @"Pass"); + XCTAssert(testInfo.isOK, @"Pass"); + XCTAssert(testInfo.reqId, @"Pass"); + XCTAssert([testInfo.host isEqual:@"uphijacktest.qiniu.com"], @"Pass"); + XCTAssert([@"FgoKnypncpQlV6tTVddq9EL49l4B" isEqualToString:testResp[@"key"]], @"Pass"); +} + @end diff --git a/QiniuSDKTests/QNHttpTest.m b/QiniuSDKTests/QNHttpTest.m index bb4a23be..1b96c4cc 100644 --- a/QiniuSDKTests/QNHttpTest.m +++ b/QiniuSDKTests/QNHttpTest.m @@ -35,7 +35,7 @@ - (void)testPost { NSData *data = [@"Hello, World!" dataUsingEncoding:NSUTF8StringEncoding]; [_httpManager post:@"http://www.baidu.com" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -45,7 +45,7 @@ - (void)testPost { [_httpManager post:@"http://up.qiniu.com" withData:nil withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -54,7 +54,7 @@ - (void)testPost { testInfo = nil; [_httpManager post:@"http://httpbin.org/status/500" withData:nil withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -64,7 +64,7 @@ - (void)testPost { testInfo = nil; [_httpManager post:@"http://httpbin.org/status/418" withData:nil withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -74,7 +74,7 @@ - (void)testPost { testInfo = nil; [_httpManager post:@"http://httpbin.org/status/200" withData:nil withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -93,7 +93,7 @@ - (void)testUrlConvert { __block QNResponseInfo *testInfo = nil; [httpManager post:@"http://upnono.qiniu.com" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -106,7 +106,7 @@ - (void)testPostIp { QNHttpManager *httpManager = [[QNHttpManager alloc] initWithTimeout:60 urlConverter:nil backupIp:[QNZone zone0].upIp]; [httpManager post:@"http://upnonono.qiniu.com" withData:nil withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -118,7 +118,7 @@ - (void)testPostNoPort { QNHttpManager *httpManager = [[QNHttpManager alloc] initWithTimeout:60 urlConverter:nil backupIp:nil]; [httpManager post:@"http://up.qiniu.com:12345/" withData:nil withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); diff --git a/QiniuSDKTests/QNResumeUploadTest.m b/QiniuSDKTests/QNResumeUploadTest.m index db1a44c2..0ad47629 100644 --- a/QiniuSDKTests/QNResumeUploadTest.m +++ b/QiniuSDKTests/QNResumeUploadTest.m @@ -193,5 +193,30 @@ - (void)testUrlConvert { [QNTempFile removeTempfile:tempFile]; } +- (void)testDnsHijacking { + QNConfiguration *config = [QNConfiguration build: ^(QNConfigurationBuilder *builder) { + builder.zone = [[QNZone alloc] initWithUpHost:@"uphijacktest.qiniu.com" upHostBackup:@"uphijacktest.qiniu.com" upIp:[QNZone zone0].upIp]; + }]; + + QNUploadManager *upManager = [[QNUploadManager alloc] initWithConfiguration:config]; + + int size = 600; + NSURL *tempFile = [QNTempFile createTempfileWithSize:size * 1024]; + NSString *keyUp = [NSString stringWithFormat:@"%dkconvert", size]; + __block QNResponseInfo *info = nil; + __block NSString *key = nil; + [upManager putFile:tempFile.path key:keyUp token:g_token complete: ^(QNResponseInfo *i, NSString *k, NSDictionary *resp) { + key = k; + info = i; + } option:nil]; + + AGWW_WAIT_WHILE(key == nil, 60 * 30); + NSLog(@"info %@", info); + XCTAssert(info.isOK, @"Pass"); + XCTAssert([keyUp isEqualToString:key], @"Pass"); + XCTAssert([info.host isEqual:@"uphijacktest.qiniu.com"], @"Pass"); + [QNTempFile removeTempfile:tempFile]; +} + #endif @end diff --git a/QiniuSDKTests/QNSessionTest.m b/QiniuSDKTests/QNSessionTest.m index c1f403ea..601712b8 100644 --- a/QiniuSDKTests/QNSessionTest.m +++ b/QiniuSDKTests/QNSessionTest.m @@ -37,7 +37,7 @@ - (void)testPost { NSData *data = [@"Hello, World!" dataUsingEncoding:NSUTF8StringEncoding]; [_httpManager post:@"http://www.baidu.com" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -47,7 +47,7 @@ - (void)testPost { [_httpManager post:@"http://up.qiniu.com" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -56,7 +56,7 @@ - (void)testPost { testInfo = nil; [_httpManager post:@"http://httpbin.org/status/500" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -66,7 +66,7 @@ - (void)testPost { testInfo = nil; [_httpManager post:@"http://httpbin.org/status/418" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -76,7 +76,7 @@ - (void)testPost { testInfo = nil; [_httpManager post:@"http://httpbin.org/status/200" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -97,7 +97,7 @@ - (void)testProxy { __block QNResponseInfo *testInfo = nil; [httpManager post:@"http://up123.qiniu.com" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -114,7 +114,7 @@ - (void)testUrlConvert { __block QNResponseInfo *testInfo = nil; [httpManager post:@"http://upnono.qiniu.com" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -128,7 +128,7 @@ - (void)testPostIp { QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:nil backupIp:[QNZone zone0].upIp]; [httpManager post:@"http://upnonono.qiniu.com" withData:data withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); @@ -140,7 +140,7 @@ - (void)testPostNoPort { QNSessionManager *httpManager = [[QNSessionManager alloc] initWithProxy:nil timeout:60 urlConverter:nil backupIp:nil]; [httpManager post:@"http://up.qiniu.com:12345/" withData:nil withParams:nil withHeaders:nil withCompleteBlock: ^(QNResponseInfo *info, NSDictionary *resp) { testInfo = info; - } withProgressBlock:nil withCancelBlock:nil]; + } withProgressBlock:nil withCancelBlock:nil forceIp:NO]; AGWW_WAIT_WHILE(testInfo == nil, 100.0); NSLog(@"%@", testInfo); From 558376de9c1e1cfc3ec1203c89501c5b00c7ebae Mon Sep 17 00:00:00 2001 From: longbai Date: Tue, 9 Jun 2015 14:01:00 +0800 Subject: [PATCH 2/2] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58441c29..5895830c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### 增加 * 上传前 检查token * 支持指定服务器端口 +* 当发现服务器不是七牛时切换到指定IP ## 7.0.10 (2015-05-23)