Skip to content

Commit cd98ddc

Browse files
authored
Merge pull request #30 from HuYuee/feature/v1.9.0
Feature/v1.9.0
2 parents 5e0ff61 + 12001e7 commit cd98ddc

File tree

6 files changed

+246
-109
lines changed

6 files changed

+246
-109
lines changed

MSDKDns.xcodeproj/project.pbxproj

+18-18
Original file line numberDiff line numberDiff line change
@@ -959,7 +959,7 @@
959959
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
960960
GCC_WARN_UNUSED_FUNCTION = YES;
961961
GCC_WARN_UNUSED_VARIABLE = YES;
962-
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
962+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
963963
MACOSX_DEPLOYMENT_TARGET = "";
964964
MTL_ENABLE_DEBUG_INFO = YES;
965965
ONLY_ACTIVE_ARCH = NO;
@@ -1010,7 +1010,7 @@
10101010
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
10111011
GCC_WARN_UNUSED_FUNCTION = YES;
10121012
GCC_WARN_UNUSED_VARIABLE = YES;
1013-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1013+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
10141014
MACOSX_DEPLOYMENT_TARGET = "";
10151015
MTL_ENABLE_DEBUG_INFO = NO;
10161016
SDKROOT = iphoneos;
@@ -1039,15 +1039,15 @@
10391039
GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp;
10401040
INFOPLIST_FILE = MSDKDns/Info.plist;
10411041
INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)";
1042-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1042+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
10431043
LIBRARY_SEARCH_PATHS = (
10441044
"$(inherited)",
10451045
"$(SYSTEM_LIBRARY_DIR)/Tcl/sqlite3",
10461046
);
10471047
LINK_WITH_STANDARD_LIBRARIES = NO;
10481048
MACH_O_TYPE = mh_object;
10491049
MACOSX_DEPLOYMENT_TARGET = "";
1050-
MARKETING_VERSION = 1.8.1;
1050+
MARKETING_VERSION = 1.9.0;
10511051
ONLY_ACTIVE_ARCH = NO;
10521052
OTHER_CFLAGS = "-fembed-bitcode";
10531053
OTHER_LDFLAGS = (
@@ -1086,15 +1086,15 @@
10861086
GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp;
10871087
INFOPLIST_FILE = MSDKDns/Info.plist;
10881088
INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)";
1089-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1089+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
10901090
LIBRARY_SEARCH_PATHS = (
10911091
"$(inherited)",
10921092
"$(SYSTEM_LIBRARY_DIR)/Tcl/sqlite3",
10931093
);
10941094
LINK_WITH_STANDARD_LIBRARIES = NO;
10951095
MACH_O_TYPE = mh_object;
10961096
MACOSX_DEPLOYMENT_TARGET = "";
1097-
MARKETING_VERSION = 1.8.1;
1097+
MARKETING_VERSION = 1.9.0;
10981098
OTHER_CFLAGS = "-fembed-bitcode";
10991099
OTHER_LDFLAGS = (
11001100
"-ObjC",
@@ -1133,11 +1133,11 @@
11331133
);
11341134
INFOPLIST_FILE = MSDKDns/Info.plist;
11351135
INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)";
1136-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1136+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
11371137
LINK_WITH_STANDARD_LIBRARIES = NO;
11381138
MACH_O_TYPE = mh_object;
11391139
MACOSX_DEPLOYMENT_TARGET = "";
1140-
MARKETING_VERSION = 1.8.1;
1140+
MARKETING_VERSION = 1.9.0;
11411141
ONLY_ACTIVE_ARCH = NO;
11421142
OTHER_CFLAGS = "-fembed-bitcode";
11431143
OTHER_LDFLAGS = (
@@ -1175,11 +1175,11 @@
11751175
GCC_PREPROCESSOR_DEFINITIONS = "IS_INTL=1";
11761176
INFOPLIST_FILE = MSDKDns/Info.plist;
11771177
INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)";
1178-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1178+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
11791179
LINK_WITH_STANDARD_LIBRARIES = NO;
11801180
MACH_O_TYPE = mh_object;
11811181
MACOSX_DEPLOYMENT_TARGET = "";
1182-
MARKETING_VERSION = 1.8.1;
1182+
MARKETING_VERSION = 1.9.0;
11831183
OTHER_CFLAGS = "-fembed-bitcode";
11841184
OTHER_LDFLAGS = (
11851185
"-ObjC",
@@ -1220,15 +1220,15 @@
12201220
);
12211221
INFOPLIST_FILE = MSDKDns/Info.plist;
12221222
INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)";
1223-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1223+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
12241224
LIBRARY_SEARCH_PATHS = (
12251225
"$(inherited)",
12261226
"$(SYSTEM_LIBRARY_DIR)/Tcl/sqlite3",
12271227
);
12281228
LINK_WITH_STANDARD_LIBRARIES = NO;
12291229
MACH_O_TYPE = mh_object;
12301230
MACOSX_DEPLOYMENT_TARGET = "";
1231-
MARKETING_VERSION = 1.8.1;
1231+
MARKETING_VERSION = 1.9.0;
12321232
ONLY_ACTIVE_ARCH = NO;
12331233
OTHER_CFLAGS = "-fembed-bitcode";
12341234
OTHER_LDFLAGS = (
@@ -1268,15 +1268,15 @@
12681268
GCC_PREPROCESSOR_DEFINITIONS = "IS_INTL=1";
12691269
INFOPLIST_FILE = MSDKDns/Info.plist;
12701270
INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)";
1271-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1271+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
12721272
LIBRARY_SEARCH_PATHS = (
12731273
"$(inherited)",
12741274
"$(SYSTEM_LIBRARY_DIR)/Tcl/sqlite3",
12751275
);
12761276
LINK_WITH_STANDARD_LIBRARIES = NO;
12771277
MACH_O_TYPE = mh_object;
12781278
MACOSX_DEPLOYMENT_TARGET = "";
1279-
MARKETING_VERSION = 1.8.1;
1279+
MARKETING_VERSION = 1.9.0;
12801280
OTHER_CFLAGS = "-fembed-bitcode";
12811281
OTHER_LDFLAGS = (
12821282
"-ObjC",
@@ -1310,11 +1310,11 @@
13101310
GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp;
13111311
INFOPLIST_FILE = MSDKDns/Info.plist;
13121312
INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)";
1313-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1313+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
13141314
LINK_WITH_STANDARD_LIBRARIES = NO;
13151315
MACH_O_TYPE = mh_object;
13161316
MACOSX_DEPLOYMENT_TARGET = "";
1317-
MARKETING_VERSION = 1.8.1;
1317+
MARKETING_VERSION = 1.9.0;
13181318
ONLY_ACTIVE_ARCH = NO;
13191319
OTHER_CFLAGS = "-fembed-bitcode";
13201320
OTHER_LDFLAGS = (
@@ -1350,11 +1350,11 @@
13501350
GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp;
13511351
INFOPLIST_FILE = MSDKDns/Info.plist;
13521352
INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)";
1353-
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1353+
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
13541354
LINK_WITH_STANDARD_LIBRARIES = NO;
13551355
MACH_O_TYPE = mh_object;
13561356
MACOSX_DEPLOYMENT_TARGET = "";
1357-
MARKETING_VERSION = 1.8.1;
1357+
MARKETING_VERSION = 1.9.0;
13581358
OTHER_CFLAGS = "-fembed-bitcode";
13591359
OTHER_LDFLAGS = (
13601360
"-ObjC",

MSDKDns/CacheManager/MSDKDnsManager.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ typedef enum {
3030
- (void)dnsHasDone:(MSDKDnsService *)service;
3131
- (void)cacheDomainInfo:(NSDictionary *)domainInfo Domain:(NSString *)domain;
3232
- (void)clearCacheForDomain:(NSString *)domain;
33-
- (void)clearCacheForDomains:(NSArray *)domains;
33+
- (void)clearCacheForDomains:(NSArray<NSString *> *)domains;
3434
- (void)clearAllCache;
3535
- (NSDictionary *)getDnsDetail:(NSString *)domain;
3636

MSDKDns/CacheManager/MSDKDnsManager.m

+98-24
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ @interface MSDKDnsManager ()
2929
@property (nonatomic, assign, readwrite) HttpDnsSdkStatus sdkStatus;
3030
@property (nonatomic, strong, readwrite) NSArray * dnsServers;
3131
@property (strong, nonatomic) NSMutableURLRequest *request;
32+
@property (strong, nonatomic, readwrite) NSMutableDictionary * cacheDomainCountDict;
3233

3334
@end
3435

@@ -43,6 +44,10 @@ - (void)dealloc {
4344
[self.serviceArray removeAllObjects];
4445
[self setServiceArray:nil];
4546
}
47+
if (_cacheDomainCountDict) {
48+
[self.cacheDomainCountDict removeAllObjects];
49+
[self setCacheDomainCountDict:nil];
50+
}
4651
}
4752

4853
#pragma mark - init
@@ -64,6 +69,7 @@ - (instancetype) init {
6469
_serviceArray = [[NSMutableArray alloc] init];
6570
_sdkStatus = net_undetected;
6671
_dnsServers = [self defaultServers];
72+
_cacheDomainCountDict = [[NSMutableDictionary alloc] init];
6773
}
6874
return self;
6975
}
@@ -200,6 +206,55 @@ - (NSDictionary *)getHostsByNamesEnableExpired:(NSArray *)domains verbose:(BOOL)
200206
NSDictionary * result = verbose?
201207
[self fullResultDictionaryEnableExpired:domains fromCache:cacheDomainDict toEmpty:toEmptyDomains] :
202208
[self resultDictionaryEnableExpired:domains fromCache:cacheDomainDict toEmpty:toEmptyDomains];
209+
// 当开启乐观DNS之后,如果结果为0则上报errorCode=3,要所有结果都为0
210+
BOOL needReport = NO;
211+
if (verbose) {
212+
for (int i = 0; i < [domains count]; i++) {
213+
NSString *domain = [domains objectAtIndex:i];
214+
NSDictionary *domainData = result[domain];
215+
if (domainData && domainData.count > 0) {
216+
needReport = NO;
217+
break;
218+
} else {
219+
needReport = YES;
220+
}
221+
}
222+
} else {
223+
for (int i = 0; i < [domains count]; i++) {
224+
NSString *domain = [domains objectAtIndex:i];
225+
NSArray *domainResArray = result[domain];
226+
if (domainResArray && domainResArray.count > 0) {
227+
if ([domainResArray[0] isEqualToString:@"0"] && [domainResArray[1] isEqualToString:@"0"]) {
228+
needReport = YES;
229+
} else {
230+
needReport = NO;
231+
break;
232+
}
233+
} else {
234+
needReport = YES;
235+
}
236+
}
237+
}
238+
if (needReport && domains) {
239+
for (int i = 0; i < [domains count]; i++) {
240+
NSString *domain = [domains objectAtIndex:i];
241+
[[AttaReport sharedInstance] reportEvent:@{
242+
MSDKDns_ErrorCode: MSDKDns_NoData,
243+
@"eventName": MSDKDnsEventHttpDnsCached,
244+
@"dnsIp": [[MSDKDnsManager shareInstance] currentDnsServer],
245+
@"req_dn": domain,
246+
@"req_type": @"a",
247+
@"req_timeout": @0,
248+
@"req_ttl": @0,
249+
@"req_query": @0,
250+
@"req_ip": @"",
251+
@"spend": @0,
252+
@"statusCode": @0,
253+
@"count": @1,
254+
@"isCache": @1,
255+
}];
256+
}
257+
}
203258
return result;
204259
}
205260

@@ -566,14 +621,16 @@ - (void)clearCacheForDomain:(NSString *)domain {
566621

567622
- (void)clearCacheForDomains:(NSArray *)domains {
568623
for(int i = 0; i < [domains count]; i++) {
569-
NSString* domain = [domains objectAtIndex:i];
570-
[self clearCacheForDomain:domain];
624+
if ([[domains objectAtIndex:i] isKindOfClass:[NSString class]]) {
625+
NSString* domain = [domains objectAtIndex:i];
626+
[self clearCacheForDomain:domain];
627+
}
571628
}
572629
}
573630

574631
- (void)clearAllCache {
575632
dispatch_async([MSDKDnsInfoTool msdkdns_queue], ^{
576-
MSDKDNSLOG(@"MSDKDns clearCache");
633+
MSDKDNSLOG(@"MSDKDns cleared all caches!");
577634
if (self.domainDict) {
578635
[self.domainDict removeAllObjects];
579636
self.domainDict = nil;
@@ -583,26 +640,43 @@ - (void)clearAllCache {
583640

584641
#pragma mark - uploadReport
585642
- (void)hitCacheAttaUploadReport:(NSString *)domain {
586-
static int count = 0;
587-
count ++;
588-
if ([[MSDKDnsParamsManager shareInstance] msdkDnsGetEnableReport] && [[AttaReport sharedInstance] shoulReportDnsSpend]) {
589-
[[AttaReport sharedInstance] reportEvent:@{
590-
MSDKDns_ErrorCode: MSDKDns_Success,
591-
@"eventName": MSDKDnsEventHttpDnsCached,
592-
@"dnsIp": [[MSDKDnsManager shareInstance] currentDnsServer],
593-
@"req_dn": domain,
594-
@"req_type": @"a",
595-
@"req_timeout": @0,
596-
@"req_ttl": @0,
597-
@"req_query": @0,
598-
@"req_ip": @"",
599-
@"spend": @0,
600-
@"statusCode": @0,
601-
@"count":[NSString stringWithFormat:@"%d", count],
602-
@"isCache": @1,
603-
}];
604-
count = 0;
605-
}
643+
// 检查控制台解析监控上报开关是否开启
644+
if ([[MSDKDnsParamsManager shareInstance] msdkDnsGetEnableReport]) {
645+
if (self.cacheDomainCountDict) {
646+
NSNumber *num = self.cacheDomainCountDict[domain];
647+
if (num) {
648+
int numInt = num.intValue + 1;
649+
[self.cacheDomainCountDict setValue:[NSNumber numberWithInt:numInt] forKey:domain];
650+
} else {
651+
[self.cacheDomainCountDict setValue:[NSNumber numberWithInt:1] forKey:domain];
652+
}
653+
654+
if ([[AttaReport sharedInstance] shoulReportDnsSpend]) {
655+
NSArray *dictKey = [self.cacheDomainCountDict allKeys];
656+
NSInteger length = [dictKey count];
657+
for (int i = 0; i < length; i++) {
658+
id domainKey = [dictKey objectAtIndex:i];
659+
NSNumber *cacheCount = [self.cacheDomainCountDict objectForKey:domainKey];
660+
[[AttaReport sharedInstance] reportEvent:@{
661+
MSDKDns_ErrorCode: MSDKDns_Success,
662+
@"eventName": MSDKDnsEventHttpDnsCached,
663+
@"dnsIp": [[MSDKDnsManager shareInstance] currentDnsServer],
664+
@"req_dn": domainKey,
665+
@"req_type": @"a",
666+
@"req_timeout": @0,
667+
@"req_ttl": @0,
668+
@"req_query": @0,
669+
@"req_ip": @"",
670+
@"spend": @0,
671+
@"statusCode": @0,
672+
@"count": cacheCount,
673+
@"isCache": @1,
674+
}];
675+
}
676+
[self.cacheDomainCountDict removeAllObjects];
677+
}
678+
}
679+
}
606680
}
607681

608682
- (void)uploadReport:(BOOL)isFromCache Domain:(NSString *)domain NetStack:(msdkdns::MSDKDNS_TLocalIPStack)netStack {
@@ -1205,7 +1279,7 @@ - (void)switchToMainServer {
12051279

12061280
- (void)resetDnsServers:(NSArray *)servers {
12071281
self.waitToSwitch = YES;
1208-
dispatch_async([MSDKDnsInfoTool msdkdns_queue], ^{
1282+
dispatch_barrier_async([MSDKDnsInfoTool msdkdns_resolver_queue], ^{
12091283
NSMutableArray *array = [[NSMutableArray alloc] init];
12101284
if (servers && [servers count] > 0) {
12111285
[array addObjectsFromArray: servers];

MSDKDns/MSDKDns.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#ifndef __MSDKDns_H__
66
#define __MSDKDns_H__
77

8-
#define MSDKDns_Version @"1.8.1"
8+
#define MSDKDns_Version @"1.9.0"
99

1010
#import <Foundation/Foundation.h>
1111

@@ -192,6 +192,11 @@ typedef struct DnsConfigStruct {
192192
*/
193193
- (void)clearCache;
194194

195+
/**
196+
需要清除的host域名数组。如果需要清空全部数据,传nil或者空数组即可
197+
*/
198+
- (void)clearHostCache:(NSArray *)hostArray;
199+
195200
#pragma mark-查询网络栈支持情况
196201
/**
197202
查询网络栈支持情况

MSDKDns/MSDKDns.m

+9-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ - (BOOL) initConfigWithDictionary:(NSDictionary *)config {
8585
conf->minutesBeforeSwitchToMain = [[config objectForKey:@"minutesBeforeSwitchToMain"] intValue];
8686
conf->enableReport = [[config objectForKey:@"enableReport"] boolValue];
8787
conf->addressType = (HttpDnsAddressType)[[config objectForKey:@"addressType"] intValue];
88-
return [self initConfig:conf];
88+
return [self initConfig:conf];
8989
}
9090

9191
#pragma mark - setting
@@ -408,4 +408,12 @@ - (void)clearCache {
408408
[[MSDKDnsManager shareInstance] clearAllCache];
409409
}
410410

411+
- (void)clearHostCache:(NSArray *)hostArray {
412+
if (hostArray == nil || ([hostArray isKindOfClass:[NSArray class]] && hostArray.count == 0)) {
413+
[[MSDKDnsManager shareInstance] clearAllCache];
414+
}else if ([hostArray isKindOfClass:[NSArray class]] && hostArray.count > 0){
415+
[[MSDKDnsManager shareInstance] clearCacheForDomains:hostArray];
416+
}
417+
}
418+
411419
@end

0 commit comments

Comments
 (0)