Skip to content

Commit 74eab1e

Browse files
committed
Merge pull request #46 from longbai/use_ip_when_dns_hijacking
dns hijacking
2 parents 3545425 + 558376d commit 74eab1e

14 files changed

+135
-42
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
### 增加
66
* 上传前 检查token
77
* 支持指定服务器端口
8+
* 当发现服务器不是七牛时切换到指定IP
89

910
## 7.0.10 (2015-05-23)
1011

QiniuSDK/Http/QNHttpManager.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,16 @@
2424
withMimeType:(NSString *)mime
2525
withCompleteBlock:(QNCompleteBlock)completeBlock
2626
withProgressBlock:(QNInternalProgressBlock)progressBlock
27-
withCancelBlock:(QNCancelBlock)cancelBlock;
27+
withCancelBlock:(QNCancelBlock)cancelBlock
28+
forceIp:(BOOL)forceIp;
2829

2930
- (void) post:(NSString *)url
3031
withData:(NSData *)data
3132
withParams:(NSDictionary *)params
3233
withHeaders:(NSDictionary *)headers
3334
withCompleteBlock:(QNCompleteBlock)completeBlock
3435
withProgressBlock:(QNInternalProgressBlock)progressBlock
35-
withCancelBlock:(QNCancelBlock)cancelBlock;
36+
withCancelBlock:(QNCancelBlock)cancelBlock
37+
forceIp:(BOOL)forceIp;
3638

3739
@end

QiniuSDK/Http/QNHttpManager.m

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ + (QNResponseInfo *)buildResponseInfo:(AFHTTPRequestOperation *)operation
7575
- (void) sendRequest:(NSMutableURLRequest *)request
7676
withCompleteBlock:(QNCompleteBlock)completeBlock
7777
withProgressBlock:(QNInternalProgressBlock)progressBlock
78-
withCancelBlock:(QNCancelBlock)cancelBlock{
78+
withCancelBlock:(QNCancelBlock)cancelBlock
79+
forceIp:(BOOL) forceIp{
7980
NSString *u = request.URL.absoluteString;
8081
NSURL *url = request.URL;
8182
__block NSString *ip = nil;
@@ -85,7 +86,7 @@ - (void) sendRequest:(NSMutableURLRequest *)request
8586
if (_backupIp != nil && ![_backupIp isEqualToString:@""]) {
8687
NSString *host = url.host;
8788
ip = [QNDns getAddress:host];
88-
if ([ip isEqualToString:@""]) {
89+
if ([ip isEqualToString:@""] || forceIp) {
8990
ip = _backupIp;
9091
}
9192
NSString *path = url.path;
@@ -149,7 +150,8 @@ - (void)multipartPost:(NSString *)url
149150
withMimeType:(NSString *)mime
150151
withCompleteBlock:(QNCompleteBlock)completeBlock
151152
withProgressBlock:(QNInternalProgressBlock)progressBlock
152-
withCancelBlock:(QNCancelBlock)cancelBlock {
153+
withCancelBlock:(QNCancelBlock)cancelBlock
154+
forceIp:(BOOL) forceIp{
153155
NSMutableURLRequest *request = [_httpManager.requestSerializer
154156
multipartFormRequestWithMethod:@"POST"
155157
URLString:url
@@ -162,7 +164,8 @@ - (void)multipartPost:(NSString *)url
162164
[self sendRequest:request
163165
withCompleteBlock:completeBlock
164166
withProgressBlock:progressBlock
165-
withCancelBlock:cancelBlock];
167+
withCancelBlock:cancelBlock
168+
forceIp:forceIp];
166169
}
167170

168171
- (void) post:(NSString *)url
@@ -171,7 +174,8 @@ - (void) post:(NSString *)url
171174
withHeaders:(NSDictionary *)headers
172175
withCompleteBlock:(QNCompleteBlock)completeBlock
173176
withProgressBlock:(QNInternalProgressBlock)progressBlock
174-
withCancelBlock:(QNCancelBlock)cancelBlock {
177+
withCancelBlock:(QNCancelBlock)cancelBlock
178+
forceIp:(BOOL) forceIp{
175179
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:url]];
176180
if (headers) {
177181
[request setAllHTTPHeaderFields:headers];
@@ -186,7 +190,8 @@ - (void) post:(NSString *)url
186190
[self sendRequest:request
187191
withCompleteBlock:completeBlock
188192
withProgressBlock:progressBlock
189-
withCancelBlock:cancelBlock];
193+
withCancelBlock:cancelBlock
194+
forceIp:forceIp];
190195
}
191196

192197
@end

QiniuSDK/Http/QNResponseInfo.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ extern const int kQNFileError;
108108
*/
109109
@property (nonatomic, readonly) BOOL needSwitchServer;
110110

111+
/**
112+
* 是否为 七牛响应
113+
*/
114+
@property (nonatomic, readonly, getter = isNotQiniu) BOOL notQiniu;
111115

112116
/**
113117
* 工厂函数,内部使用

QiniuSDK/Http/QNResponseInfo.m

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,25 @@ - (BOOL)isCancelled {
172172
return _statusCode == kQNRequestCancelled || _statusCode == -999;
173173
}
174174

175+
- (BOOL)isNotQiniu {
176+
return (_statusCode >= 200 && _statusCode < 500) && _reqId == nil;
177+
}
178+
175179
- (BOOL)isOK {
176180
return _statusCode == 200 && _error == nil && _reqId != nil;
177181
}
178182

179183
- (BOOL)isConnectionBroken {
180184
// reqId is nill means the server is not qiniu
181-
return _statusCode == kQNNetworkError;
185+
return _statusCode == kQNNetworkError || (_statusCode < -1000 && _statusCode != -1003);
182186
}
183187

184188
- (BOOL)needSwitchServer {
185189
return _statusCode == kQNNetworkError || (_statusCode < -1000 && _statusCode != -1003) || (_statusCode / 100 == 5 && _statusCode != 579);
186190
}
187191

188192
- (BOOL)couldRetry {
189-
return (_statusCode >= 500 && _statusCode < 600 && _statusCode != 579) || _statusCode == kQNNetworkError || _statusCode == 996 || _statusCode == 406 || (_statusCode == 200 && _error != nil) || _statusCode < -1000;
193+
return (_statusCode >= 500 && _statusCode < 600 && _statusCode != 579) || _statusCode == kQNNetworkError || _statusCode == 996 || _statusCode == 406 || (_statusCode == 200 && _error != nil) || _statusCode < -1000 || self.isNotQiniu;
190194
}
191195

192196
@end

QiniuSDK/Http/QNSessionManager.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@
1919
withMimeType:(NSString *)mime
2020
withCompleteBlock:(QNCompleteBlock)completeBlock
2121
withProgressBlock:(QNInternalProgressBlock)progressBlock
22-
withCancelBlock:(QNCancelBlock)cancelBlock;
22+
withCancelBlock:(QNCancelBlock)cancelBlock
23+
forceIp:(BOOL)forceIp;
2324

2425
- (void) post:(NSString *)url
2526
withData:(NSData *)data
2627
withParams:(NSDictionary *)params
2728
withHeaders:(NSDictionary *)headers
2829
withCompleteBlock:(QNCompleteBlock)completeBlock
2930
withProgressBlock:(QNInternalProgressBlock)progressBlock
30-
withCancelBlock:(QNCancelBlock)cancelBlock;
31+
withCancelBlock:(QNCancelBlock)cancelBlock
32+
forceIp:(BOOL)forceIp;
3133

3234
@end
3335

QiniuSDK/Http/QNSessionManager.m

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ + (QNResponseInfo *)buildResponseInfo:(NSHTTPURLResponse *)response
132132
- (void) sendRequest:(NSMutableURLRequest *)request
133133
withCompleteBlock:(QNCompleteBlock)completeBlock
134134
withProgressBlock:(QNInternalProgressBlock)progressBlock
135-
withCancelBlock:(QNCancelBlock)cancelBlock{
135+
withCancelBlock:(QNCancelBlock)cancelBlock
136+
forceIp:(BOOL) forceIp{
136137
__block NSDate *startTime = [NSDate date];
137138
NSProgress *progress = nil;
138139
__block NSString *host = request.URL.host;
@@ -147,7 +148,7 @@ - (void) sendRequest:(NSMutableURLRequest *)request
147148
if (_noProxy && _backupIp != nil && ![_backupIp isEqualToString:@""]) {
148149
NSString *host = url.host;
149150
ip = [QNDns getAddress:host];
150-
if ([ip isEqualToString:@""]) {
151+
if ([ip isEqualToString:@""] || forceIp) {
151152
ip = _backupIp;
152153
}
153154
NSString *path = url.path;
@@ -212,7 +213,8 @@ - (void)multipartPost:(NSString *)url
212213
withMimeType:(NSString *)mime
213214
withCompleteBlock:(QNCompleteBlock)completeBlock
214215
withProgressBlock:(QNInternalProgressBlock)progressBlock
215-
withCancelBlock:(QNCancelBlock)cancelBlock {
216+
withCancelBlock:(QNCancelBlock)cancelBlock
217+
forceIp:(BOOL) forceIp{
216218
NSMutableURLRequest *request = [_httpManager.requestSerializer
217219
multipartFormRequestWithMethod:@"POST"
218220
URLString:url
@@ -225,7 +227,8 @@ - (void)multipartPost:(NSString *)url
225227
[self sendRequest:request
226228
withCompleteBlock:completeBlock
227229
withProgressBlock:progressBlock
228-
withCancelBlock:cancelBlock];
230+
withCancelBlock:cancelBlock
231+
forceIp:forceIp];
229232
}
230233

231234
- (void) post:(NSString *)url
@@ -234,7 +237,8 @@ - (void) post:(NSString *)url
234237
withHeaders:(NSDictionary *)headers
235238
withCompleteBlock:(QNCompleteBlock)completeBlock
236239
withProgressBlock:(QNInternalProgressBlock)progressBlock
237-
withCancelBlock:(QNCancelBlock)cancelBlock {
240+
withCancelBlock:(QNCancelBlock)cancelBlock
241+
forceIp:(BOOL) forceIp{
238242
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:url]];
239243
if (headers) {
240244
[request setAllHTTPHeaderFields:headers];
@@ -250,7 +254,8 @@ - (void) post:(NSString *)url
250254
[self sendRequest:request
251255
withCompleteBlock:completeBlock
252256
withProgressBlock:progressBlock
253-
withCancelBlock:cancelBlock];
257+
withCancelBlock:cancelBlock
258+
forceIp: forceIp];
254259
});
255260
}
256261

QiniuSDK/Http/QNhttpDelegate.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,16 @@ typedef BOOL (^QNCancelBlock)(void);
1818
withMimeType:(NSString *)mime
1919
withCompleteBlock:(QNCompleteBlock)completeBlock
2020
withProgressBlock:(QNInternalProgressBlock)progressBlock
21-
withCancelBlock:(QNCancelBlock)cancelBlock;
21+
withCancelBlock:(QNCancelBlock)cancelBlock
22+
forceIp:(BOOL)forceIp;
2223

2324
- (void) post:(NSString *)url
2425
withData:(NSData *)data
2526
withParams:(NSDictionary *)params
2627
withHeaders:(NSDictionary *)headers
2728
withCompleteBlock:(QNCompleteBlock)completeBlock
2829
withProgressBlock:(QNInternalProgressBlock)progressBlock
29-
withCancelBlock:(QNCancelBlock)cancelBlock;
30+
withCancelBlock:(QNCancelBlock)cancelBlock
31+
forceIp:(BOOL)forceIp;
3032

3133
@end

QiniuSDK/Storage/QNFormUpload.m

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ - (void)put {
9595
nextHost = _config.upHostBackup;
9696
}
9797

98+
BOOL forceIp = NO;
99+
if (info.isNotQiniu) {
100+
forceIp = YES;
101+
}
102+
98103
QNCompleteBlock retriedComplete = ^(QNResponseInfo *info, NSDictionary *resp) {
99104
if (info.isOK) {
100105
_option.progressHandler(_key, 1.0);
@@ -109,7 +114,8 @@ - (void)put {
109114
withMimeType:_option.mimeType
110115
withCompleteBlock:retriedComplete
111116
withProgressBlock:p
112-
withCancelBlock:_option.cancellationSignal];
117+
withCancelBlock:_option.cancellationSignal
118+
forceIp:forceIp];
113119
};
114120

115121
[_httpManager multipartPost:[NSString stringWithFormat:@"http://%@:%u/", _config.upHost, (unsigned int)_config.upPort]
@@ -119,7 +125,8 @@ - (void)put {
119125
withMimeType:_option.mimeType
120126
withCompleteBlock:complete
121127
withProgressBlock:p
122-
withCancelBlock:_option.cancellationSignal];
128+
withCancelBlock:_option.cancellationSignal
129+
forceIp:NO];
123130
}
124131

125132
@end

QiniuSDK/Storage/QNResumeUpload.m

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ @interface QNResumeUpload ()
3939

4040
@property UInt32 chunkCrc;
4141

42+
@property BOOL forceIp;
43+
4244
- (void)makeBlock:(NSString *)uphost
4345
offset:(UInt32)offset
4446
blockSize:(UInt32)blockSize
@@ -89,6 +91,7 @@ - (instancetype)initWithData:(NSData *)data
8991
_config = config;
9092

9193
_token = token;
94+
_forceIp = NO;
9295
}
9396
return self;
9497
}
@@ -217,6 +220,10 @@ - (void)nextTask:(UInt32)offset retriedTimes:(int)retried host:(NSString *)host
217220
nextHost = _config.upHostBackup;
218221
}
219222

223+
if (info.isNotQiniu) {
224+
_forceIp = YES;
225+
}
226+
220227
[self nextTask:offset retriedTimes:retried + 1 host:nextHost];
221228
return;
222229
}
@@ -306,7 +313,8 @@ - (void) post:(NSString *)url
306313
withData:(NSData *)data
307314
withCompleteBlock:(QNCompleteBlock)completeBlock
308315
withProgressBlock:(QNInternalProgressBlock)progressBlock {
309-
[_httpManager post:url withData:data withParams:nil withHeaders:_headers withCompleteBlock:completeBlock withProgressBlock:progressBlock withCancelBlock:_option.cancellationSignal];
316+
[_httpManager post:url withData:data withParams:nil withHeaders:_headers withCompleteBlock:completeBlock withProgressBlock:progressBlock withCancelBlock:_option.cancellationSignal
317+
forceIp:_forceIp];
310318
}
311319

312320
- (void)run {

0 commit comments

Comments
 (0)