feat: sync httpdns sdk/platform updates without large binaries

This commit is contained in:
robin
2026-03-04 17:59:14 +08:00
parent 853897a6f8
commit 532891fad0
700 changed files with 6096 additions and 2712 deletions

View File

@@ -0,0 +1,481 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#import <Foundation/Foundation.h>
// 头文件包含需使用相对目录,确保通过 CocoaPods 安装后能被模块化编译找到
// #import "HttpdnsRequest.h"
// #import "HttpdnsResult.h"
// #import "HttpdnsDegradationDelegate.h"
// #import "HttpdnsLoggerProtocol.h"
#import <TrustHTTPDNS/HttpdnsRequest.h>
#import <TrustHTTPDNS/HttpDnsResult.h>
#import <TrustHTTPDNS/HttpdnsLoggerProtocol.h>
#import <TrustHTTPDNS/HttpdnsDegradationDelegate.h>
#define Trust_HTTPDNS_DEPRECATED(explain) __attribute__((deprecated(explain)))
#ifndef TrustHDNS_STACK_KEY
#define TrustHDNS_STACK_KEY
#define TrustHDNS_IPV4 @"TrustHDNS_IPV4"
#define TrustHDNS_IPV6 @"TrustHDNS_IPV6"
#endif
NS_ASSUME_NONNULL_BEGIN
@protocol HttpdnsTTLDelegate <NSObject>
/// 自定义HOST的TTL时长
/// @return 返回需要自定义的TTL时长
/// @param host 域名
/// @param ipType 当前查询的IP类型
/// @param ttl 当次域名解析返回的TTL
- (int64_t)httpdnsHost:(NSString * _Nonnull)host ipType:(TrustHttpDNS_IPType)ipType ttl:(int64_t)ttl;
@end
@interface HttpDnsService: NSObject
@property (nonatomic, assign, readonly) NSInteger accountID;
@property (nonatomic, copy, readonly, nullable) NSString *secretKey;
@property (nonatomic, copy, readonly, nullable) NSString *aesSecretKey;
@property (nonatomic, weak, setter=setDelegateForDegradationFilter:) id<HttpDNSDegradationDelegate> delegate Trust_HTTPDNS_DEPRECATED("不再建议通过设置此回调实现降级逻辑而是自行在调用HTTPDNS解析域名前做判断");
@property (nonatomic, weak) id<HttpdnsTTLDelegate> ttlDelegate;
+ (nonnull instancetype)sharedInstance;
/// 获取指定账号对应<E5AFB9><E5BA94>?HttpDnsService 实例
/// @param accountID 账号 ID
/// @return 已初始化的实例,若账号尚未注册则返回 nil
+ (nullable instancetype)getInstanceByAccountId:(NSInteger)accountID;
/*!
* @brief 无需鉴权功能的初始化接口
* @details 初始化,设置 HTTPDNS 服务 Account ID。使用本接口初始化请求将无任何签名保护请谨慎使用<E4BDBF><E794A8>?
* 您可以从控制台获取您<E58F96><E682A8>?Account ID <20><>?
* 此方法会初始化为单例<E58D95><E4BE8B>?
* 注意本接口<E68EA5><E58FA3>?.2.1起废弃后续将进行移除<EFBFBD><EFBFBD>?
* @param accountID 您的 HTTPDNS Account ID
*/
- (nonnull instancetype)initWithAccountID:(NSInteger)accountID Trust_HTTPDNS_DEPRECATED("Deprecated. This method will be removed in the future. Use -[HttpDnsService initWithAccountID:secretKey:] instead.");
/*!
* @brief 启用鉴权功能的初始化接口
* @details 初始化、开启鉴权功能并设<E5B9B6><E8AEBE>?HTTPDNS 服务 Account ID鉴权功能对应的 secretKey<65><79>?
* 您可以从控制台获取您<E58F96><E682A8>?Account ID 、secretKey信息<E4BFA1><E681AF>?
* 此方法会初始化为单例<E58D95><E4BE8B>?
* @param accountID 您的 HTTPDNS Account ID
* @param secretKey 鉴权对应<E5AFB9><E5BA94>?secretKey
*/
- (nonnull instancetype)initWithAccountID:(NSInteger)accountID secretKey:(NSString * _Nonnull)secretKey;
/*!
* @brief 启用鉴权功能、加密功能的初始化接<E58C96><E68EA5>?
* @details 初始化、开启鉴权功能、开启AES加密并设置 HTTPDNS 服务 Account ID鉴权功能对应的 secretKey加密功能对应的 aesSecretKey<65><79>?
* 您可以从控制台获取您<E58F96><E682A8>?Account ID 、secretKey、aesSecretKey 信息<E4BFA1><E681AF>?
* 此方法会初始化为单例<E58D95><E4BE8B>?
* @param accountID 您的 HTTPDNS Account ID
* @param secretKey 鉴权对应<E5AFB9><E5BA94>?secretKey
* @param aesSecretKey 加密功能对应<E5AFB9><E5BA94>?aesSecretKey
*/
- (nonnull instancetype)initWithAccountID:(NSInteger)accountID secretKey:(NSString * _Nonnull)secretKey aesSecretKey:(NSString * _Nullable)aesSecretKey;
/// 开启鉴权功能后,鉴权的签名计算默认读取设备当前时间。若担心设备时间不准确导致签名不准确,可以使用此接口校正 APP 内鉴权计算使用的时间<E697B6><E997B4>?
/// 注意,校正操作在 APP 的一个生命周期内生效APP 重启后需要重新设置才能重新生<E696B0><E7949F>?
/// @param authCurrentTime 用于校正的时间戳单位为<E4BD8D><E4B8BA>?
- (void)setAuthCurrentTime:(NSUInteger)authCurrentTime Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService setInternalAuthTimeBaseBySpecifyingCurrentTime:] instead.");
/// 开启鉴权功能后,鉴权的签名计算默认读取设备当前时间。若担心设备时间不准确导致签名不准确,可以使用此接口校正 APP 内鉴权计算使用的时间<E697B6><E997B4>?
/// 注意,校正操作在 APP 的一个生命周期内生效APP 重启后需要重新设置才能重新生<E696B0><E7949F>?
/// @param currentTime 用于校正的时间戳单位为<E4BD8D><E4B8BA>?
- (void)setInternalAuthTimeBaseBySpecifyingCurrentTime:(NSTimeInterval)currentTime;
/// 设置持久化缓存功<E5AD98><E58A9F>?
/// @param enable YES: 开<><E5BC80>?NO: 关闭
- (void)setCachedIPEnabled:(BOOL)enable Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService setPersistentCacheIPEnabled:] instead.");
/// 设置持久化缓存功<E5AD98><E58A9F>?
/// 开启后,每次解析会将结果持久化缓存到本地,当下次应用启动时,可以从本地加载缓存解析结果,提高应用启动时获取解析结果的速度
/// 加载时,会丢弃已经过期的解析结果
/// @param enable YES: 开<><E5BC80>?NO: 关闭
- (void)setPersistentCacheIPEnabled:(BOOL)enable;
/// 设置持久化缓存功<E5AD98><E58A9F>?
/// 开启后,每次解析会将结果持久化缓存到本地,当下次应用启动时,可以从本地加载缓存解析结果,提高应用启动时获取解析结果的速度
/// 加载时,会丢弃过期时间已经超过指定值的解析结果
/// @param enable YES: 开<><E5BC80>?NO: 关闭
/// @param duration 决定丢弃IP的过期时间阈值单位为秒过期超过这个时间范围的IP会被丢弃取值范围为0-1年。这个值仅在开启持久化缓存功能时才有意<E69C89><E6848F>?
- (void)setPersistentCacheIPEnabled:(BOOL)enable discardRecordsHasExpiredFor:(NSTimeInterval)duration;
/// 是否允许 HTTPDNS 返回 TTL 过期域名<E59F9F><E5908D>?ip ,建议允许(默认不允许)
/// @param enable YES: 开<><E5BC80>?NO: 关闭
- (void)setExpiredIPEnabled:(BOOL)enable Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService setReuseExpiredIPEnabled:] instead.");
/// 是否允许 HTTPDNS 返回 TTL 过期域名<E59F9F><E5908D>?ip ,建议允许(默认不允许)
/// @param enable YES: 开<><E5BC80>?NO: 关闭
- (void)setReuseExpiredIPEnabled:(BOOL)enable;
/// 设置 HTTPDNS 域名解析请求类型 ( HTTP / HTTPS )
/// 若不调用该接口默认<E9BB98><E8AEA4>?HTTP 请求<E8AFB7><E6B182>?
/// HTTP 请求基于底层 CFNetwork 实现<EFBC8C><E4B88D>?ATS 限制<E99990><E588B6>?
/// @param enable YES: HTTPS请求 NO: HTTP请求
- (void)setHTTPSRequestEnabled:(BOOL)enable;
/// 声明App是否配置了ATS为AllowsArbitraryLoads默认认为没有配<E69C89><E9858D>?
/// 若做了声明则当指定走HTTP方式解析域名时解析链路会走系统NSURLSession逻辑
/// 否则会走定制的CFHTTP链路避免被ATS拦截请求
- (void)setHasAllowedArbitraryLoadsInATS:(BOOL)hasAllowedArbitraryLoadsInATS;
/// 设置底层HTTPDNS网络请求超时时间单位为<E4BD8D><E4B8BA>?
/// 需要注意这个值只决定底层解析请求的网络超时时间而非同步解析接口、异步解析接口的最长阻塞或者等待时<E5BE85><E697B6>?
/// 同步解析接口、异步解析接口的最长阻塞或者等待时间需要调用接口时设置request参数中的`resolveTimeoutInSecond`决定
/// @param timeoutInterval 超时时间单位为<E4BD8D><E4B8BA>?
- (void)setNetworkingTimeoutInterval:(NSTimeInterval)timeoutInterval;
/// 指定region指定后会读取该region对应配置作为初始化配<E58C96><E9858D>?
/// 一般情况下无需设置SDK内部会默认路由全球范围内最近的接入<E68EA5><E585A5>?
/// @param region 需要指定的region缺省为中国大陆
- (void)setRegion:(NSString *)region;
/// 域名预解<E9A284><E8A7A3>?(默认解析双栈记录)
/// 通常用于启动后立即向SDK设置您后续可能会使用到的热点域名以便SDK提前解析减少后续解析域名时请求的时<E79A84><E697B6>?
/// 如果是在运行过程中调用SDK也会立即解析设置的域名数组中的域名刷新这些域名的解析结<E69E90><E7BB93>?
///
/// @param hosts 预解析列表数<E8A1A8><E695B0>?
- (void)setPreResolveHosts:(NSArray *)hosts;
/// 域名预解析可以指定预解析auto、ipv4、ipv6、both
/// 通常用于启动后立即向SDK设置您后续可能会使用到的热点域名以便SDK提前解析减少后续解析域名时请求的时<E79A84><E697B6>?
/// 如果是在运行过程中调用SDK也会立即解析设置的域名数组中的域名刷新这些域名的解析结<E69E90><E7BB93>?
///
/// @param hosts 预解析列表数<E8A1A8><E695B0>?
/// @param ipType 指定预解析记录类<E5BD95><E7B1BB>?
- (void)setPreResolveHosts:(NSArray *)hosts byIPType:(HttpdnsQueryIPType)ipType;
/// 域名预解<E9A284><E8A7A3>?
/// @param hosts 域名
/// @param ipType 4: ipv4; 6: ipv6; 64: ipv4+ipv6
- (void)setPreResolveHosts:(NSArray *)hosts queryIPType:(TrustHttpDNS_IPType)ipType Trust_HTTPDNS_DEPRECATED("Deprecated, this method will be removed in the future. Use -[HttpDnsService setPreResolveHosts:byIPType:] instead.");
/// 本地日志 log 开<><E5BC80>?
/// @param enable YES: 打开 NO: 关闭
- (void)setLogEnabled:(BOOL)enable;
/// 设置网络切换时是否自动更新所有域名解析结<E69E90><E7BB93>?
/// 如果打开此开关在网络切换时会自动刷新所有域名的解析结果但会产生一定流量消<E9878F><E6B688>?
/// @param enable YES: 开<><E5BC80>?NO: 关闭
- (void)setPreResolveAfterNetworkChanged:(BOOL)enable;
/// 设置当httpdns解析失败时是否降级到localDNS尝试解析
/// 降级生效时SDNS参数不生效降级逻辑只解析域名返回的结果默认使<E8AEA4><E4BDBF>?0<><30>?若未指定该域名自定义TTL)作为TTL<54><4C>?
/// 降级请求也不会再对ip进行优先排序
/// 默认关闭不会自动降<E58AA8><E9998D>?
/// @param enable YES自动降<E58AA8><E9998D>?NO不自动降级
- (void)setDegradeToLocalDNSEnabled:(BOOL)enable;
/// 设置IP排优规则
/// @param IPRankingDatasource 设置对应域名的端口号
/// @{host: port}
- (void)setIPRankingDatasource:(NSDictionary<NSString *, NSNumber *> *)IPRankingDatasource;
/// 设置是否 开<><E5BC80>?IPv6 结果解析。只有开启状态下对域名的解析才会尝试解析v6记录并返回v6的结<E79A84><E7BB93>?
/// @param enable YES: 开<><E5BC80>?NO: 关闭
- (void)enableIPv6:(BOOL)enable Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService setIPv6Enabled:] instead.");
/// 设置是否 开<><E5BC80>?IPv6 结果解析。只有开启状态下对域名的解析才会尝试解析v6记录并返回v6的结<E79A84><E7BB93>?
/// 已弃用。默认支持IPv6。如果不需要IPv6类型的结果只需在请求时指定`queryIpType`为`HttpdnsQueryIPTypeIpv4`
/// @param enable YES: 开<><E5BC80>?NO: 关闭
- (void)setIPv6Enabled:(BOOL)enable Trust_HTTPDNS_DEPRECATED("Deprecated. If ipv6 is unnecessary, you can set the `queryIpType` as HttpdnsQueryIPTypeIpv4 when resolving domain.");
/// 是否允许通过 CNCopyCurrentNetworkInfo 获取wifi ssid bssid
/// @param enable YES: 开<><E5BC80>?NO: 关闭 默认关<E8AEA4><E585B3>?
- (void)enableNetworkInfo:(BOOL)enable Trust_HTTPDNS_DEPRECATED("Deprecated. We do not utilize network information anymore");
/// 是否允许通过 CNCopyCurrentNetworkInfo 获取wifi ssid bssid
/// @param enable YES: 开<><E5BC80>?NO: 关闭 默认关<E8AEA4><E585B3>?
- (void)setReadNetworkInfoEnabled:(BOOL)enable Trust_HTTPDNS_DEPRECATED("Deprecated. We do not utilize network information anymore.");
/// 是否开启IP探测功能
/// @param enable YES: 开<><E5BC80>?NO: 关闭 默认打开
- (void)enableCustomIPRank:(BOOL)enable Trust_HTTPDNS_DEPRECATED("Deprecated, will be removed in the future.");
/// 设置软件自定义解析全局默认参数设置后调用软件自定义解析时每个请求默认都会带上这里配置的参<E79A84><E58F82>?
/// @param params 全局默认参数
- (void)setSdnsGlobalParams:(NSDictionary<NSString *, NSString *> *)params;
/// 设置日志输出回调以实现自定义日志输出方<E587BA><E696B9>?
/// @param logHandler 日志输出回调实现实例
- (void)setLogHandler:(id<HttpdnsLoggerProtocol>)logHandler;
/// 获取用于用户追踪<E8BFBD><E8B8AA>?sessionId
/// sessionId为随机生成长度<E995BF><E5BAA6>?12 位App 生命周期内保持不<E68C81><E4B88D>?
/// 为了排查可能的解析问题需要您<E8A681><E682A8>?sessionId 和解析出<E69E90><E587BA>?IP 一起记录在日志<E697A5><E5BF97>?
/// 请参<E8AFB7><E58F82>? 解析异常排查<E68E92><E69FA5>?“会话追踪方案<E696B9><E6A188>?https://help.TrustAPP.com/document_detail/100530.html
- (NSString *)getSessionId;
/// 同步解析域名会阻塞当前线程直到从缓存中获取到有效解析结果或者从服务器拿到最新解析结<E69E90><E7BB93>?
/// 如果允许复用过期的解析结果且存在过期结果的情况下会先返回这个结果然后启动后台线程去更新解析结<E69E90><E7BB93>?
/// 为了防止在主线程中误用本接口导致APP卡顿本接口会做检测若发现调用线程是主线程则自动降级到resolveHostSyncNonBlocking接口的实现逻辑<E980BB><E8BE91>?
/// @param host 需要解析的域名
/// @param queryIpType 可设置为自动选择ipv4ipv6. 设置为自动选择时会自动根据当前所处网络环境选择解析ipv4或ipv6
/// @return 解析结果
- (nullable HttpdnsResult *)resolveHostSync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType;
/// 同步解析域名会阻塞当前线程直到从缓存中获取到有效解析结果或者从服务器拿到最新解析结<E69E90><E7BB93>?
/// 如果允许复用过期的解析结果且存在过期结果的情况下会先返回这个结果然后启动后台线程去更新解析结<E69E90><E7BB93>?
/// 为了防止在主线程中误用本接口导致APP卡顿本接口会做检测若发现调用线程是主线程则自动降级到resolveHostSyncNonBlocking接口的实现逻辑<E980BB><E8BE91>?
/// @param host 需要解析的域名
/// @param queryIpType 可设置为自动选择ipv4ipv6. 设置为自动选择时会自动根据当前所处网络环境选择解析ipv4或ipv6
/// @param sdnsParams 如果域名配置了sdns自定义解析通过此参数携带自定义参数
/// @param cacheKey sdns自定义解析缓存key
/// @return 解析结果
- (nullable HttpdnsResult *)resolveHostSync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType withSdnsParams:(NSDictionary<NSString *, NSString *> *)sdnsParams sdnsCacheKey:(NSString *)cacheKey;
/// 同步解析域名会阻塞当前线程直到从缓存中获取到有效解析结果或者从服务器拿到最新解析结<E69E90><E7BB93>?
/// 如果允许复用过期的解析结果且存在过期结果的情况下会先返回这个结果然后启动后台线程去更新解析结<E69E90><E7BB93>?
/// 为了防止在主线程中误用本接口导致APP卡顿本接口会做检测若发现调用线程是主线程则自动降级到resolveHostSyncNonBlocking接口的实现逻辑<E980BB><E8BE91>?
/// @param request 请求参数对象
/// @return 解析结果
- (nullable HttpdnsResult *)resolveHostSync:(HttpdnsRequest *)request;
/// 异步解析域名,不会阻塞当前线程,会在从缓存中获取到有效结果,或从服务器拿到最新解析结果后,通过回调返回结果
/// 如果允许复用过期的解析结果且存在过期结果的情况下会先在回调中返回这个结果然后启动后台线程去更新解析结<E69E90><E7BB93>?
/// @param host 需要解析的域名
/// @param queryIpType 可设置为自动选择ipv4ipv6. 设置为自动选择时会自动根据当前所处网络环境选择解析ipv4或ipv6
/// @handler 解析结果回调
- (void)resolveHostAsync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType completionHandler:(void (^)(HttpdnsResult * nullable))handler;
/// 异步解析域名,不会阻塞当前线程,会在从缓存中获取到有效结果,或从服务器拿到最新解析结果后,通过回调返回结果
/// 如果允许复用过期的解析结果且存在过期结果的情况下会先在回调中返回这个结果然后启动后台线程去更新解析结<E69E90><E7BB93>?
/// @param host 需要解析的域名
/// @param queryIpType 可设置为自动选择ipv4ipv6. 设置为自动选择时会自动根据当前所处网络环境选择解析ipv4或ipv6
/// @param sdnsParams 如果域名配置了sdns自定义解析通过此参数携带自定义参数
/// @param cacheKey sdns自定义解析缓存key
/// @handler 解析结果回调
- (void)resolveHostAsync:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType withSdnsParams:(nullable NSDictionary<NSString *, NSString *> *)sdnsParams sdnsCacheKey:(nullable NSString *)cacheKey completionHandler:(void (^)(HttpdnsResult * nullable))handler;
/// 异步解析域名,不会阻塞当前线程,会在从缓存中获取到有效结果,或从服务器拿到最新解析结果后,通过回调返回结果
/// 如果允许复用过期的解析结果且存在过期结果的情况下会先在回调中返回这个结果然后启动后台线程去更新解析结<E69E90><E7BB93>?
/// @param request 请求参数对象
/// @handler 解析结果回调
- (void)resolveHostAsync:(HttpdnsRequest *)request completionHandler:(void (^)(HttpdnsResult * nullable))handler;
/// 伪异步解析域名不会阻塞当前线程首次解析结果可能为<E883BD><E4B8BA>?
/// 先查询缓存缓存中存在有效结<E69588><E7BB93>?未过期或者过期但配置了可以复用过期解析结<E69E90><E7BB93>?,则直接返回结果,如果缓存未命中,则发起异步解析请求
/// @param host 需要解析的域名
/// @param queryIpType 可设置为自动选择ipv4ipv6. 设置为自动选择时会自动根据当前所处网络环境选择解析ipv4或ipv6
/// @return 解析结果
- (nullable HttpdnsResult *)resolveHostSyncNonBlocking:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType;
/// 伪异步解析域名不会阻塞当前线程首次解析结果可能为<E883BD><E4B8BA>?
/// 先查询缓存缓存中存在有效结<E69588><E7BB93>?未过期或者过期但配置了可以复用过期解析结<E69E90><E7BB93>?,则直接返回结果,如果缓存未命中,则发起异步解析请求
/// @param host 需要解析的域名
/// @param queryIpType 可设置为自动选择ipv4ipv6. 设置为自动选择时会自动根据当前所处网络环境选择解析ipv4或ipv6
/// @param sdnsParams 如果域名配置了sdns自定义解析通过此参数携带自定义参数
/// @param cacheKey sdns自定义解析缓存key
/// @return 解析结果
- (nullable HttpdnsResult *)resolveHostSyncNonBlocking:(NSString *)host byIpType:(HttpdnsQueryIPType)queryIpType withSdnsParams:(nullable NSDictionary<NSString *, NSString *> *)sdnsParams sdnsCacheKey:(nullable NSString *)cacheKey;
/// 伪异步解析域名不会阻塞当前线程首次解析结果可能为<E883BD><E4B8BA>?
/// 先查询缓存缓存中存在有效结<E69588><E7BB93>?未过期或者过期但配置了可以复用过期解析结<E69E90><E7BB93>?,则直接返回结果,如果缓存未命中,则发起异步解析请求
/// @param request 请求参数对象
/// @return 解析结果
- (nullable HttpdnsResult *)resolveHostSyncNonBlocking:(HttpdnsRequest *)request;
/// 获取域名对应的IP单IP
/// @param host 域名
- (NSString *)getIpByHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 异步接口首次结果可能为空获取域名对应的IP数组多IP
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
- (NSArray *)getIpsByHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 异步接口首次结果可能为空获取域名对应的ipv6, 单IP 需要开启ipv6 开<><E5BC80>?enableIPv6<76><36>?
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
- (NSString *)getIPv6ByHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 异步接口首次结果可能为空获取域名对应的ipv6数组, 多IP 需要开启ipv6 开<><E5BC80>?enableIPv6<76><36>?
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
- (NSArray *)getIPv6sByHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 同时获取ipv4 ipv6的IP 需要开启ipv6 开<><E5BC80>?enableIPv6<76><36>?
/// @param host 域名
/// @result 返回字典类型结构
/// {
/// TrustHDNS_IPV4: ['xxx.xxx.xxx.xxx', 'xxx.xxx.xxx.xxx'],
/// TrustHDNS_IPV6: ['xx:xx:xx:xx:xx:xx:xx:xx', 'xx:xx:xx:xx:xx:xx:xx:xx']
/// }
- (NSDictionary <NSString *, NSArray *>*)getIPv4_v6ByHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 根据当前设备的网络状态自动返回域名对应的 IPv4/IPv6地址<E59CB0><E59D80>?
/// 使用此API 需要确<E8A681><E7A1AE>?enableIPv6 开关已打开
/// 设备网络 返回域名IP
/// IPv4 Only IPv4
/// IPv6 Only IPv6 如果没有Pv6返回空
/// 双栈 IPv4/IPV6
/// @param host 要解析的域名
/// @result 返回字典类型结构
/// {
/// TrustHDNS_IPV4: ['xxx.xxx.xxx.xxx', 'xxx.xxx.xxx.xxx'],
/// TrustHDNS_IPV6: ['xx:xx:xx:xx:xx:xx:xx:xx', 'xx:xx:xx:xx:xx:xx:xx:xx']
/// }
-(NSDictionary <NSString *, NSArray *>*)autoGetIpsByHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 异步接口首次结果可能为空获取域名对应的IPv4地址单IPv4
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
- (NSString *)getIPv4ForHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 异步接口首次结果可能为空获取域名对应的IP数组多IP
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
- (NSArray *)getIPv4ListForHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 获取IPv4地址列表同步接口必须在子线程中执行否则会转变为异步接口
/// 同步接口有超时机制,超时时间为[HttpDnsService sharedInstance].timeoutInterval, 但是超时上限<E4B88A><E99990>?s<><73>?
/// 即使[HttpDnsService sharedInstance].timeoutInterval设置的时间大<E997B4><E5A4A7>?s同步接口也最多阻塞当前线<E5898D><E7BABF>?s
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起同步解析请<E69E90><E8AFB7>?
/// @param host 域名
- (NSArray *)getIPv4ListForHostSync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSync:byIpType:] instead.");
/// 异步接口首次结果可能为空获取域名对应的ipv6, 单IP 需要开启ipv6 开<><E5BC80>?enableIPv6<76><36>?
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
- (NSString *)getIPv6ForHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 异步接口首次结果可能为空获取域名对应的ipv6数组, 多IP 需要开启ipv6 开<><E5BC80>?enableIPv6<76><36>?
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
- (NSArray *)getIPv6ListForHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 获取IPv6地址列表同步接口必须在子线程中执行否则会转变为异步接口
/// 同步接口有超时机制,超时时间为[HttpDnsService sharedInstance].timeoutInterval, 但是超时上限<E4B88A><E99990>?s<><73>?
/// 即使[HttpDnsService sharedInstance].timeoutInterval设置的时间大<E997B4><E5A4A7>?s同步接口也最多阻塞当前线<E5898D><E7BABF>?s
/// @param host 域名
- (NSArray *)getIPv6ListForHostSync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSync:byIpType:] instead.");
/// 异步接口首次结果可能为空获取域名对应格式化后的IP (针对ipv6)
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
- (NSString *)getIpByHostAsyncInURLFormat:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 异步接口首次结果可能为空同时获取ipv4 ipv6的IP 需要开启ipv6 开<><E5BC80>?enableIPv6<76><36>?
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
/// @result 返回字典类型结构
/// {
/// TrustHDNS_IPV4: ['xxx.xxx.xxx.xxx', 'xxx.xxx.xxx.xxx'],
/// TrustHDNS_IPV6: ['xx:xx:xx:xx:xx:xx:xx:xx', 'xx:xx:xx:xx:xx:xx:xx:xx']
/// }
- (NSDictionary <NSString *, NSArray *>*)getHttpDnsResultHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// NOTE: 同步接口必须在子线程中执行否则会转变为异步接<E6ADA5><E68EA5>?
/// 同步接口有超时机制,超时时间为[HttpDnsService sharedInstance].timeoutInterval, 但是超时上限<E4B88A><E99990>?s<><73>?
/// 即使[HttpDnsService sharedInstance].timeoutInterval设置的时间大<E997B4><E5A4A7>?s同步接口也最多阻塞当前线<E5898D><E7BABF>?s
/// 同时获取ipv4 + ipv6的IP 需要开启ipv6 开<><E5BC80>?enableIPv6<76><36>?
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
/// @result 返回字典类型结构
/// {
/// TrustHDNS_IPV4: ['xxx.xxx.xxx.xxx', 'xxx.xxx.xxx.xxx'],
/// TrustHDNS_IPV6: ['xx:xx:xx:xx:xx:xx:xx:xx', 'xx:xx:xx:xx:xx:xx:xx:xx']
/// }
- (NSDictionary <NSString *, NSArray *>*)getHttpDnsResultHostSync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSync:byIpType:] instead.");
/// 异步接口,首次结果可能为空,根据当前设备的网络状态自动返回域名对应的 IPv4/IPv6地址<E59CB0><E59D80>?
/// 使用此API 需要确<E8A681><E7A1AE>?enableIPv6 开关已打开
/// 设备网络 返回域名IP
/// IPv4 Only IPv4
/// IPv6 Only IPv6 如果没有Pv6返回空
/// 双栈 IPv4/IPV6
/// @param host 要解析的域名
/// @result 返回字典类型结构
/// {
/// TrustHDNS_IPV4: ['xxx.xxx.xxx.xxx', 'xxx.xxx.xxx.xxx'],
/// TrustHDNS_IPV6: ['xx:xx:xx:xx:xx:xx:xx:xx', 'xx:xx:xx:xx:xx:xx:xx:xx']
/// }
-(NSDictionary <NSString *, NSArray *>*)autoGetHttpDnsResultForHostAsync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:] instead.");
/// 根据当前设备的网络状态自动返回域名对应的 IPv4/IPv6地址组同步接口必须在子线程中执行否则会转变为异步接<E6ADA5><E68EA5>?
/// 同步接口有超时机制,超时时间为[HttpDnsService sharedInstance].timeoutInterval, 但是超时上限<E4B88A><E99990>?s<><73>?
/// 即使[HttpDnsService sharedInstance].timeoutInterval设置的时间大<E997B4><E5A4A7>?s同步接口也最多阻塞当前线<E5898D><E7BABF>?s
/// 根据当前网络栈自动获取ipv4 ipv6的IP 需要开启ipv6 开<><E5BC80>?enableIPv6<76><36>?
/// 先查询缓存缓存中存在未过期的结果则直接返回结果如果缓存未命中则发起异步解析请<E69E90><E8AFB7>?
/// @param host 域名
/// @result 返回字典类型结构
/// {
/// TrustHDNS_IPV4: ['xxx.xxx.xxx.xxx', 'xxx.xxx.xxx.xxx'],
/// TrustHDNS_IPV6: ['xx:xx:xx:xx:xx:xx:xx:xx', 'xx:xx:xx:xx:xx:xx:xx:xx']
/// }
- (NSDictionary <NSString *, NSArray *>*)autoGetHttpDnsResultForHostSync:(NSString *)host Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSync:byIpType:] instead.");
/// 软件自定义解析接<E69E90><E68EA5>?
- (NSDictionary *)getIpsByHostAsync:(NSString *)host withParams:(NSDictionary<NSString *, NSString *> *)params withCacheKey:(NSString *)cacheKey Trust_HTTPDNS_DEPRECATED("Deprecated. Use -[HttpDnsService resolveHostSyncNonBlocking:byIpType:withSdnsParams:sdnsCacheKey:] instead.");
/// 清除指定host缓存<EFBC88><E58685>?沙盒数据库)
/// @param hostArray 需要清除的host域名数组。如果需要清空全部数据传nil或者空数组即可
- (void)cleanHostCache:(nullable NSArray<NSString *> *)hostArray;
/// 清除当前所有host缓存 (内存+沙盒数据<E695B0><E68DAE>?
- (void)cleanAllHostCache;
/// 清理已经配置的软件自定义解析全局参数
- (void)clearSdnsGlobalParams;
@end
NS_ASSUME_NONNULL_END