Skip to content

Commit a2ef8e6

Browse files
committed
get ip by safe dns source when hijacked
1 parent 00b5024 commit a2ef8e6

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

QiniuSDK/Http/Dns/QNDnsPrefetch.m

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,15 @@ - (void)checkWhetherCachedDnsValid{
355355
}
356356
}
357357

358+
- (void)invalidNetworkAddressOfHost:(NSString *)host {
359+
if (host == nil || host.length == 0) {
360+
return;
361+
}
362+
@synchronized (self) {
363+
[self.addressDictionary removeObjectForKey:host];
364+
}
365+
}
366+
358367
- (void)clearDnsCache:(NSError *__autoreleasing _Nullable *)error {
359368
[self clearDnsMemoryCache];
360369
[self clearDnsDiskCache:error];
@@ -366,6 +375,9 @@ - (NSString *)prefetchHostBySafeDns:(NSString *)host error:(NSError * __autorele
366375
if (host == nil) {
367376
return nil;
368377
}
378+
379+
[self invalidNetworkAddressOfHost:host];
380+
369381
NSError *err = nil;
370382
NSArray *nextFetchHosts = @[host];
371383
nextFetchHosts = [self preFetchHosts:nextFetchHosts dns:self.customDns error:&err];

QiniuSDK/Http/Request/QNHttpRegionRequest.m

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#import "QNDefine.h"
1010
#import "QNLogUtil.h"
1111
#import "QNAsyncRun.h"
12+
#import "QNDnsPrefetch.h"
1213
#import "QNUploadRequestState.h"
1314
#import "QNHttpRegionRequest.h"
1415
#import "QNConfiguration.h"
@@ -160,13 +161,15 @@ - (void)performRequest:(id <QNUploadServer>)server
160161
[self.requestMetrics addMetricsList:metrics];
161162

162163
BOOL hijacked = metrics.lastObject.isMaybeHijacked || metrics.lastObject.isForsureHijacked;
163-
if (hijacked) {
164+
BOOL isSafeDnsSource = kQNIsDnsSourceCustom(metrics.lastObject.syncDnsSource) || kQNIsDnsSourceDoh(metrics.lastObject.syncDnsSource) || kQNIsDnsSourceDnsPod(metrics.lastObject.syncDnsSource);
165+
BOOL hijackedAndNeedRetry = hijacked && isSafeDnsSource;
166+
if (hijackedAndNeedRetry) {
164167
[self.region updateIpListFormHost:server.host];
165168
}
166169

167170
if ((shouldRetry(responseInfo, response)
168171
&& self.config.allowBackupHost
169-
&& responseInfo.couldRegionRetry) || hijacked) {
172+
&& responseInfo.couldRegionRetry) || hijackedAndNeedRetry) {
170173

171174
id <QNUploadServer> newServer = [self getNextServer:responseInfo];
172175
if (newServer) {

0 commit comments

Comments
 (0)