Skip to content

Commit

Permalink
Merge pull request #68 from YangSen-qn/dns_adaptive_upload
Browse files Browse the repository at this point in the history
Dns adaptive upload
  • Loading branch information
bachue authored May 6, 2020
2 parents 2547348 + b109c0f commit 1800f95
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 11 deletions.
17 changes: 15 additions & 2 deletions HappyDNS/Common/QNDnsManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

@class QNNetworkInfo;
@class QNDomain;
@class QNRecord;

/**
* getaddrinfo 回调上层的函数
Expand Down Expand Up @@ -48,14 +49,26 @@ typedef void (^QNIpStatusCallback)(NSString *ip, int code, int ms);
*/
@interface QNDnsManager : NSObject

/// 默认ttl值 单位:秒
@property(nonatomic, assign)int defalutTtl;

/**
* 解析域名
*
* @param domain 域名
*
* @return IP列表
*/
- (NSArray *)query:(NSString *)domain;
- (NSArray <NSString *> *)query:(NSString *)domain;

/**
* 解析域名
*
* @param domain 域名
*
* @return QNRecord列表 QNRecord.value即为host
*/
- (NSArray <QNRecord *> *)queryRecords:(NSString *)domain;

/**
* 解析域名,使用Domain对象进行详细约定
Expand All @@ -64,7 +77,7 @@ typedef void (^QNIpStatusCallback)(NSString *ip, int code, int ms);
*
* @return IP 列表
*/
- (NSArray *)queryWithDomain:(QNDomain *)domain;
- (NSArray <NSString *> *)queryWithDomain:(QNDomain *)domain;

/**
* 通知网络发生变化
Expand Down
55 changes: 47 additions & 8 deletions HappyDNS/Common/QNDnsManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -101,26 +101,47 @@ - (NSArray *)sort:(NSArray *)ips {
@end

@implementation QNDnsManager
- (NSArray *)query:(NSString *)domain {
- (NSArray <NSString *> *)query:(NSString *)domain {
return [self queryWithDomain:[[QNDomain alloc] init:domain]];
}

- (NSArray *)queryWithDomain:(QNDomain *)domain {
- (NSArray <QNRecord *> *)queryRecords:(NSString *)domain{

if (domain == nil) {
return nil;
}
if ([QNIP mayBeIpV4:domain]) {
return [NSArray arrayWithObject:domain];
}
NSArray *ips = [self queryInternalWithDomain:[[QNDomain alloc] init:domain] needRecordInfo:YES];
return [_sorter sort:ips];
}

- (NSArray <NSString *> *)queryWithDomain:(QNDomain *)domain {
if (domain.domain == nil) {
return nil;
}
if ([QNIP mayBeIpV4:domain.domain]) {
return [NSArray arrayWithObject:domain.domain];
}
NSArray *ips = [self queryInternalWithDomain:domain];
NSArray *ips = [self queryInternalWithDomain:domain needRecordInfo:NO];
return [_sorter sort:ips];
}

- (NSArray *)queryInternalWithDomain:(QNDomain *)domain {
- (NSArray *)queryInternalWithDomain:(QNDomain *)domain needRecordInfo:(BOOL)needRecordInfo {
if (domain.hostsFirst) {
NSArray *ret = [_hosts query:domain networkInfo:_curNetwork];
if (ret != nil && ret.count != 0) {
return ret;
if (needRecordInfo) {
NSMutableArray *retP = [NSMutableArray array];
for (NSString *host in ret) {
QNRecord *record = [[QNRecord alloc] init:host ttl:self.defalutTtl type:kQNTypeA];
[retP addObject:record];
}
return [retP copy];
} else {
return ret;
}
}
}
NSMutableArray *result;
Expand All @@ -144,7 +165,11 @@ - (NSArray *)queryInternalWithDomain:(QNDomain *)domain {
if (result != nil && result.count > 0) {
QNRecord *record = [result objectAtIndex:0];
if (![record expired:[[NSDate date] timeIntervalSince1970]]) {
return records2Ips(result);
if (needRecordInfo) {
return result;
} else {
return records2Ips(result);
}
}
}
}
Expand Down Expand Up @@ -177,12 +202,26 @@ - (NSArray *)queryInternalWithDomain:(QNDomain *)domain {
[_cache setObject:ret forKey:domain.domain];
}
}
return records2Ips(ret);
if (needRecordInfo) {
return ret;
} else {
return records2Ips(ret);
}
}
}

if (!domain.hostsFirst) {
return [_hosts query:domain networkInfo:_curNetwork];
NSArray *ret = [_hosts query:domain networkInfo:_curNetwork];
if (needRecordInfo) {
NSMutableArray *retP = [NSMutableArray array];
for (NSString *host in ret) {
QNRecord *record = [[QNRecord alloc] init:host ttl:self.defalutTtl type:kQNTypeA];
[retP addObject:record];
}
return [retP copy];
} else {
return ret;
}
}
return nil;
}
Expand Down
2 changes: 1 addition & 1 deletion HappyDNSTests/DnsTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ - (void)testDns {
[array addObject:[QNResolver systemResolver]];
[array addObject:[[QNResolver alloc] initWithAddress:@"119.29.29.29"]];
QNDnsManager *dns = [[QNDnsManager alloc] init:array networkInfo:[QNNetworkInfo normal]];
NSArray *ips = [dns query:@"www.qiniu.com"];
NSArray *ips = [dns query:@"www.baidu.com"];
XCTAssertNotNil(ips, @"PASS");
XCTAssertTrue(ips.count > 0, @"PASS");
}
Expand Down

0 comments on commit 1800f95

Please sign in to comment.