From fe8d3104157ae1727edc9a94b645a0ed9245adab Mon Sep 17 00:00:00 2001 From: erichuyuehu Date: Wed, 8 May 2024 16:09:10 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MSDKDns/MSDKDns.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MSDKDns/MSDKDns.h b/MSDKDns/MSDKDns.h index d463dc1..cc90697 100644 --- a/MSDKDns/MSDKDns.h +++ b/MSDKDns/MSDKDns.h @@ -37,7 +37,7 @@ typedef struct DnsConfigStruct { NSUInteger retryTimesBeforeSwitchServer; // 可选,切换ip之前重试次数, 默认3次 NSUInteger minutesBeforeSwitchToMain; // 可选,设置切回主ip间隔时长,默认10分钟 BOOL enableReport; // 是否开启解析异常上报,默认NO,不上报 - BOOL enableExperimentalBugly; // 实验性参数,仅提供给内部特定团队使用,请勿启用 + BOOL enableExperimentalBugly; // 实验性参数,仅提供给内部特定团队使用,请勿启用 } DnsConfig; @interface MSDKDns : NSObject From d49918cd37e2647292c3da3d52bd92f094b0b2db Mon Sep 17 00:00:00 2001 From: erichuyuehu Date: Thu, 4 Jul 2024 15:28:46 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=8C=96=E5=88=B7=E6=96=B0=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MSDKDns/MSDKDnsService.m | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/MSDKDns/MSDKDnsService.m b/MSDKDns/MSDKDnsService.m index bafd563..1e67b20 100644 --- a/MSDKDns/MSDKDnsService.m +++ b/MSDKDns/MSDKDnsService.m @@ -288,11 +288,16 @@ - (void)resolver:(MSDKDnsResolver *)resolver didGetDomainInfo:(NSDictionary *)do } // NSLog(@"4444444延时更新请求等待,预计在%f秒后开始!请求域名为%@",afterTime.floatValue,domain); if (!domainISOpenDelayDispatch[domain] && afterTime.floatValue > 0) { + // NSLog(@"获取缓存延时更新after,初始值为%f秒。", afterTime.floatValue); + afterTime = [NSMutableString stringWithFormat:@"%f", afterTime.floatValue * 0.75]; + if (afterTime.floatValue < 60) { + afterTime = [[NSMutableString alloc]initWithString:@"60"]; + } // 使用静态字典来记录该域名是否开启了一个延迟解析请求,如果已经开启则忽略,没有则立马开启一个 [[MSDKDnsManager shareInstance] msdkDnsAddDomainOpenDelayDispatch:domain]; MSDKDNSLOG(@"Start the delayed execution task, it is expected to start requesting the domain name %@ after %f seconds", domain, afterTime.floatValue); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW,afterTime.floatValue* NSEC_PER_SEC), [MSDKDnsInfoTool msdkdns_queue], ^{ - // NSLog(@"延时更新请求开始!请求域名为%@",domain); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, afterTime.floatValue * NSEC_PER_SEC), [MSDKDnsInfoTool msdkdns_queue], ^{ + // NSLog(@"缓存延时更新请求开始!请求域名为%@", domain); BOOL enableKeepDomainsAlive = [[MSDKDnsParamsManager shareInstance] msdkDnsGetEnableKeepDomainsAlive]; if (enableKeepDomainsAlive) { MSDKDNSLOG(@"The cache update request start! request domain:%@",domain); From 056b2c3b737246b00e61e15990365fd1b93b4c39 Mon Sep 17 00:00:00 2001 From: erichuyuehu Date: Mon, 29 Jul 2024 10:51:46 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=E5=B0=86=E9=9D=99=E6=80=81=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=AE=8F=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 + MSDKDns.xcodeproj/project.pbxproj | 16 ++-- MSDKDns/MSDKDns.h | 2 +- MSDKDns/MSDKDnsPrivate.h | 146 +++++++++++++++--------------- 4 files changed, 84 insertions(+), 83 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9792498 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": false +} \ No newline at end of file diff --git a/MSDKDns.xcodeproj/project.pbxproj b/MSDKDns.xcodeproj/project.pbxproj index 656ade0..c97b156 100644 --- a/MSDKDns.xcodeproj/project.pbxproj +++ b/MSDKDns.xcodeproj/project.pbxproj @@ -1057,7 +1057,7 @@ LINK_WITH_STANDARD_LIBRARIES = NO; MACH_O_TYPE = mh_object; MACOSX_DEPLOYMENT_TARGET = ""; - MARKETING_VERSION = 1.10.3; + MARKETING_VERSION = 1.10.4; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = "-fembed-bitcode"; OTHER_LDFLAGS = ( @@ -1104,7 +1104,7 @@ LINK_WITH_STANDARD_LIBRARIES = NO; MACH_O_TYPE = mh_object; MACOSX_DEPLOYMENT_TARGET = ""; - MARKETING_VERSION = 1.10.3; + MARKETING_VERSION = 1.10.4; OTHER_CFLAGS = "-fembed-bitcode"; OTHER_LDFLAGS = ( "-ObjC", @@ -1147,7 +1147,7 @@ LINK_WITH_STANDARD_LIBRARIES = NO; MACH_O_TYPE = mh_object; MACOSX_DEPLOYMENT_TARGET = ""; - MARKETING_VERSION = 1.10.3; + MARKETING_VERSION = 1.10.4; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = "-fembed-bitcode"; OTHER_LDFLAGS = ( @@ -1189,7 +1189,7 @@ LINK_WITH_STANDARD_LIBRARIES = NO; MACH_O_TYPE = mh_object; MACOSX_DEPLOYMENT_TARGET = ""; - MARKETING_VERSION = 1.10.3; + MARKETING_VERSION = 1.10.4; OTHER_CFLAGS = "-fembed-bitcode"; OTHER_LDFLAGS = ( "-ObjC", @@ -1238,7 +1238,7 @@ LINK_WITH_STANDARD_LIBRARIES = NO; MACH_O_TYPE = mh_object; MACOSX_DEPLOYMENT_TARGET = ""; - MARKETING_VERSION = 1.10.3; + MARKETING_VERSION = 1.10.4; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = "-fembed-bitcode"; OTHER_LDFLAGS = ( @@ -1286,7 +1286,7 @@ LINK_WITH_STANDARD_LIBRARIES = NO; MACH_O_TYPE = mh_object; MACOSX_DEPLOYMENT_TARGET = ""; - MARKETING_VERSION = 1.10.3; + MARKETING_VERSION = 1.10.4; OTHER_CFLAGS = "-fembed-bitcode"; OTHER_LDFLAGS = ( "-ObjC", @@ -1324,7 +1324,7 @@ LINK_WITH_STANDARD_LIBRARIES = NO; MACH_O_TYPE = mh_object; MACOSX_DEPLOYMENT_TARGET = ""; - MARKETING_VERSION = 1.10.3; + MARKETING_VERSION = 1.10.4; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = "-fembed-bitcode"; OTHER_LDFLAGS = ( @@ -1364,7 +1364,7 @@ LINK_WITH_STANDARD_LIBRARIES = NO; MACH_O_TYPE = mh_object; MACOSX_DEPLOYMENT_TARGET = ""; - MARKETING_VERSION = 1.10.3; + MARKETING_VERSION = 1.10.4; OTHER_CFLAGS = "-fembed-bitcode"; OTHER_LDFLAGS = ( "-ObjC", diff --git a/MSDKDns/MSDKDns.h b/MSDKDns/MSDKDns.h index cc90697..67d6f78 100644 --- a/MSDKDns/MSDKDns.h +++ b/MSDKDns/MSDKDns.h @@ -5,7 +5,7 @@ #ifndef __MSDKDns_H__ #define __MSDKDns_H__ -#define MSDKDns_Version @"1.10.3" +#define MSDKDns_Version @"1.10.4" #import diff --git a/MSDKDns/MSDKDnsPrivate.h b/MSDKDns/MSDKDnsPrivate.h index e125b70..c98cd94 100644 --- a/MSDKDns/MSDKDnsPrivate.h +++ b/MSDKDns/MSDKDnsPrivate.h @@ -5,93 +5,91 @@ #ifndef HTTPDNS_SDK_IOS_MSDKDNS_MSDKDNSPRIVATE_H_ #define HTTPDNS_SDK_IOS_MSDKDNS_MSDKDNSPRIVATE_H_ -static NSString * const HTTP_DNS_UNKNOWN_STR = @"UNKNOWN"; +#define HTTP_DNS_UNKNOWN_STR @"UNKNOWN" // cacheDictionary -static NSString * const kIP = @"ips"; -static NSString * const kClientIP = @"clientIP"; -static NSString * const kTTL = @"ttl"; -static NSString * const kTTLExpired = @"ttlExpried"; -static NSString * const kChannel = @"channel"; -static NSString * const kDnsTimeConsuming = @"timeConsuming"; -static NSString * const kDnsErrCode = @"errCode"; -static NSString * const kDnsErrMsg = @"errMsg"; -static NSString * const kDnsRetry = @"retry"; -static NSString * const kMSDKHttpDnsCache_A = @"httpDnsCache_A"; -static NSString * const kMSDKHttpDnsCache_4A = @"httpDnsCache_4A"; -static NSString * const kMSDKHttpDnsInfo_A = @"httpDnsInfo_A"; -static NSString * const kMSDKHttpDnsInfo_4A = @"httpDnsInfo_4A"; -static NSString * const kMSDKHttpDnsInfo_BOTH = @"httpDnsInfo_BOTH"; -static NSString * const kMSDKLocalDnsCache = @"localDnsCache"; +#define kIP @"ips" +#define kClientIP @"clientIP" +#define kTTL @"ttl" +#define kTTLExpired @"ttlExpried" +#define kChannel @"channel" +#define kDnsTimeConsuming @"timeConsuming" +#define kDnsErrCode @"errCode" +#define kDnsErrMsg @"errMsg" +#define kDnsRetry @"retry" +#define kMSDKHttpDnsCache_A @"httpDnsCache_A" +#define kMSDKHttpDnsCache_4A @"httpDnsCache_4A" +#define kMSDKHttpDnsInfo_A @"httpDnsInfo_A" +#define kMSDKHttpDnsInfo_4A @"httpDnsInfo_4A" +#define kMSDKHttpDnsInfo_BOTH @"httpDnsInfo_BOTH" +#define kMSDKLocalDnsCache @"localDnsCache" // HttpDns解析结果数据上报相关 -static NSString * const MSDKDnsEventName = @"HDNSGetHostByName"; +#define MSDKDnsEventName @"HDNSGetHostByName" -static NSString * const kMSDKDnsSDK_Version = @"sdk_Version"; // SDK版本号 -static NSString * const kMSDKDnsAppID = @"appID"; // 业务AppId -static NSString * const kMSDKDnsID = @"id"; // 业务DnsId,内部业务固定为1 -static NSString * const kMSDKDnsKEY = @"key"; // 业务DnsKey,内部业务固定为>srW/8;& -static NSString * const kMSDKDnsUserID = @"userID"; // 用户Id,内部业务为OpenId -static NSString * const kMSDKDnsChannel = @"channel"; // HTTPDNS服务渠道, http/https/udp -static NSString * const kMSDKDnsNetType = @"netType"; // 用户网络类型 -static NSString * const kMSDKDnsSSID = @"ssid"; // WiFi SSID,网络类型不为WiFi时为空 -static NSString * const kMSDKDnsDomain = @"domain"; // 解析域名 -static NSString * const kMSDKDnsLDNS_IP = @"ldns_ip"; // LocalDns解析结果IP -static NSString * const kMSDKDnsLDNS_Time = @"ldns_time"; // LocalDns解析耗时 +#define kMSDKDnsSDK_Version @"sdk_Version" // SDK版本号 +#define kMSDKDnsAppID @"appID" // 业务AppId +#define kMSDKDnsID @"id" // 业务DnsId,内部业务固定为1 +#define kMSDKDnsKEY @"key" // 业务DnsKey,内部业务固定为>srW/8& +#define kMSDKDnsUserID @"userID" // 用户Id,内部业务为OpenId +#define kMSDKDnsChannel @"channel" // HTTPDNS服务渠道, http/https/udp +#define kMSDKDnsNetType @"netType" // 用户网络类型 +#define kMSDKDnsSSID @"ssid" // WiFi SSID,网络类型不为WiFi时为空 +#define kMSDKDnsDomain @"domain" // 解析域名 +#define kMSDKDnsLDNS_IP @"ldns_ip" // LocalDns解析结果IP +#define kMSDKDnsLDNS_Time @"ldns_time" // LocalDns解析耗时 // 域名解析发起时网络栈 - 0: 无网络/未知 - 1: IPv4 Only - 2: IPv6 Only - 3: Dual Stack -static NSString * const kMSDKDnsNet_Stack = @"net_stack"; -static NSString * const kMSDKDns_A_IsCache = @"isCache"; // 域名解析A记录是否命中缓存 -static NSString * const kMSDKDns_A_ErrCode = @"hdns_a_err_code"; // 域名解析A记录解析错误码 -static NSString * const kMSDKDns_A_ErrMsg = @"hdns_a_err_msg"; // 域名解析A记录解析错误信息 -static NSString * const kMSDKDns_A_IP = @"hdns_ip"; // 域名解析A记录解析结果IP,多个ip以“,”拼接 -static NSString * const kMSDKDns_A_TTL = @"ttl"; // 域名解析A记录解析结果TTL(单位s) -static NSString * const kMSDKDns_A_ClientIP = @"clientIP"; // 域名解析A记录结果客户端IP -static NSString * const kMSDKDns_A_Time = @"hdns_time"; // 域名解析A记录耗时(单位ms) -static NSString * const kMSDKDns_A_Retry = @"hdns_a_retry"; // 域名解析A记录重试次数 -static NSString * const kMSDKDns_4A_IsCache = @"hdns_4a_cache_hit"; // 域名解析AAAA记录是否命中缓存 -static NSString * const kMSDKDns_4A_ErrCode = @"hdns_4a_err_code"; // 域名解析AAAA记录解析错误码 -static NSString * const kMSDKDns_4A_ErrMsg = @"hdns_4a_err_msg"; // 域名解析AAAA记录解析错误信息 -static NSString * const kMSDKDns_4A_IP = @"hdns_4a_ips"; // 域名解析AAAA记录解析结果IP,多个ip以“,”拼接 -static NSString * const kMSDKDns_4A_TTL = @"hdns_4a_ttl"; // 域名解析AAAA记录解析结果TTL(单位s) -static NSString * const kMSDKDns_4A_ClientIP = @"hdns_4a_client_ip"; // 域名解析AAAA记录结果客户端IP -static NSString * const kMSDKDns_4A_Time = @"hdns_4a_time_ms"; // 域名解析AAAA记录耗时(单位ms) -static NSString * const kMSDKDns_4A_Retry = @"hdns_4a_retry"; // 域名解析AAAA记录重试次数 -static NSString * const kMSDKDns_BOTH_Retry = @"hdns_both_retry"; // 双栈域名解析重试次数 -static NSString * const kMSDKDns_BOTH_ErrCode = @"hdns_both_err_code"; // 双栈域名解析解析错误码 -static NSString * const kMSDKDns_BOTH_ErrMsg = @"hdns_both_err_msg"; // 双栈域名解析解析错误信息 -static NSString * const kMSDKDns_DNS_A_IP = @"dns_ips"; // 域名解析结果v4 IP,多个ip以“,”拼接 -static NSString * const kMSDKDns_DNS_4A_IP = @"dns_4a_ips"; // 域名解析结果v6 IP,多个ip以“,”拼接 +#define kMSDKDnsNet_Stack @"net_stack" +#define kMSDKDns_A_IsCache @"isCache" // 域名解析A记录是否命中缓存 +#define kMSDKDns_A_ErrCode @"hdns_a_err_code" // 域名解析A记录解析错误码 +#define kMSDKDns_A_ErrMsg @"hdns_a_err_msg" // 域名解析A记录解析错误信息 +#define kMSDKDns_A_IP @"hdns_ip" // 域名解析A记录解析结果IP,多个ip以“,”拼接 +#define kMSDKDns_A_TTL @"ttl" // 域名解析A记录解析结果TTL(单位s) +#define kMSDKDns_A_ClientIP @"clientIP" // 域名解析A记录结果客户端IP +#define kMSDKDns_A_Time @"hdns_time" // 域名解析A记录耗时(单位ms) +#define kMSDKDns_A_Retry @"hdns_a_retry" // 域名解析A记录重试次数 +#define kMSDKDns_4A_IsCache @"hdns_4a_cache_hit" // 域名解析AAAA记录是否命中缓存 +#define kMSDKDns_4A_ErrCode @"hdns_4a_err_code" // 域名解析AAAA记录解析错误码 +#define kMSDKDns_4A_ErrMsg @"hdns_4a_err_msg" // 域名解析AAAA记录解析错误信息 +#define kMSDKDns_4A_IP @"hdns_4a_ips" // 域名解析AAAA记录解析结果IP,多个ip以“,”拼接 +#define kMSDKDns_4A_TTL @"hdns_4a_ttl" // 域名解析AAAA记录解析结果TTL(单位s) +#define kMSDKDns_4A_ClientIP @"hdns_4a_client_ip" // 域名解析AAAA记录结果客户端IP +#define kMSDKDns_4A_Time @"hdns_4a_time_ms" // 域名解析AAAA记录耗时(单位ms) +#define kMSDKDns_4A_Retry @"hdns_4a_retry" // 域名解析AAAA记录重试次数 +#define kMSDKDns_BOTH_Retry @"hdns_both_retry" // 双栈域名解析重试次数 +#define kMSDKDns_BOTH_ErrCode @"hdns_both_err_code" // 双栈域名解析解析错误码 +#define kMSDKDns_BOTH_ErrMsg @"hdns_both_err_msg" // 双栈域名解析解析错误信息 +#define kMSDKDns_DNS_A_IP @"dns_ips" // 域名解析结果v4 IP,多个ip以“,”拼接 +#define kMSDKDns_DNS_4A_IP @"dns_4a_ips" // 域名解析结果v6 IP,多个ip以“,”拼接 /*** 域名解析错误码*/ -static NSString * const MSDKDns_Fail = @"-1"; // 失败 -static NSString * const MSDKDns_Success = @"0"; // 成功 -static NSString * const MSDKDns_UnResolve = @"1"; // 未解析 -static NSString * const MSDKDns_Timeout = @"2"; // 解析超时 -static NSString * const MSDKDns_NoData = @"3"; // 没有解析数据 -static NSString * const MSDKDns_ErrorCode = @"errorCode"; +#define MSDKDns_Fail @"-1" // 失败 +#define MSDKDns_Success @"0" // 成功 +#define MSDKDns_UnResolve @"1" // 未解析 +#define MSDKDns_Timeout @"2" // 解析超时 +#define MSDKDns_NoData @"3" // 没有解析数据 +#define MSDKDns_ErrorCode @"errorCode" /** 上报事件*/ -static NSString * const MSDKDnsEventHttpDnsfail = @"HttpDnsfail"; -static NSString * const MSDKDnsEventHttpDnsSpend = @"HttpDnsSpend"; -static NSString * const MSDKDnsEventHttpDnsCached = @"HDNSLookupCached"; // 命中缓存 -static NSString * const MSDKDnsEventHttpDnsNormal = @"HDNSGetHostByName"; // 常规解析请求 -static NSString * const MSDKDnsEventHttpDnsPreResolved = @"HDNSPreLookup"; // 预解析请求 -static NSString * const MSDKDnsEventHttpDnsAutoRefresh = @"HDNSLookupAsync"; // 缓存自动刷新 -static NSString * const MSDKDnsEventHttpDnsExpiredAsync = @"HDNSLookupExpiredAsync"; // 乐观DNS中缓存异步刷新请求 -static NSString * const MSDKDnsEventHttpDnsGetHTTPDNSDomainIP = @"HDNSGetDomainIP"; // 获取三网域名的IP +#define MSDKDnsEventHttpDnsfail @"HttpDnsfail" +#define MSDKDnsEventHttpDnsSpend @"HttpDnsSpend" +#define MSDKDnsEventHttpDnsCached @"HDNSLookupCached" // 命中缓存 +#define MSDKDnsEventHttpDnsNormal @"HDNSGetHostByName" // 常规解析请求 +#define MSDKDnsEventHttpDnsPreResolved @"HDNSPreLookup" // 预解析请求 +#define MSDKDnsEventHttpDnsAutoRefresh @"HDNSLookupAsync" // 缓存自动刷新 +#define MSDKDnsEventHttpDnsExpiredAsync @"HDNSLookupExpiredAsync" // 乐观DNS中缓存异步刷新请求 +#define MSDKDnsEventHttpDnsGetHTTPDNSDomainIP @"HDNSGetDomainIP" // 获取三网域名的IP // 命中缓存的状态 -static NSString * const MSDKDnsDomainCacheHit = @"domainCacheHit"; // 命中缓存 -static NSString * const MSDKDnsDomainCacheExpired = @"domainCacheExpired"; // 缓存过期 -static NSString * const MSDKDnsDomainCacheEmpty = @"domainCacheEmpty"; // 没有缓存 +#define MSDKDnsDomainCacheHit @"domainCacheHit" // 命中缓存 +#define MSDKDnsDomainCacheExpired @"domainCacheExpired" // 缓存过期 +#define MSDKDnsDomainCacheEmpty @"domainCacheEmpty" // 没有缓存 // 本地DB存储字段 -static NSString * const DB_HttpDNS_IPV4_Channel = [kMSDKHttpDnsCache_A stringByAppendingString:kChannel]; -static NSString * const DB_HttpDNS_IPV4_ClientIP = [kMSDKHttpDnsCache_A stringByAppendingString:kClientIP]; -static NSString * const DB_HttpDNS_IPV4_TimeConsuming = [kMSDKHttpDnsCache_A stringByAppendingString:kDnsTimeConsuming]; -static NSString * const DB_HttpDNS_IPV4_TTL = [kMSDKHttpDnsCache_A stringByAppendingString:kTTL]; -static NSString * const DB_HttpDNS_IPV4_TTLExpired = [kMSDKHttpDnsCache_A stringByAppendingString:kTTLExpired]; - - +#define DB_HttpDNS_IPV4_Channel [kMSDKHttpDnsCache_A stringByAppendingString:kChannel] +#define DB_HttpDNS_IPV4_ClientIP [kMSDKHttpDnsCache_A stringByAppendingString:kClientIP] +#define DB_HttpDNS_IPV4_TimeConsuming [kMSDKHttpDnsCache_A stringByAppendingString:kDnsTimeConsuming] +#define DB_HttpDNS_IPV4_TTL [kMSDKHttpDnsCache_A stringByAppendingString:kTTL] +#define DB_HttpDNS_IPV4_TTLExpired [kMSDKHttpDnsCache_A stringByAppendingString:kTTLExpired] #endif // HTTPDNS_SDK_IOS_MSDKDNS_MSDKDNSPRIVATE_H_