带阿里标识的版本
This commit is contained in:
@@ -59,7 +59,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
+ (void)initialize {
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
_streamOperateSyncQueue = dispatch_queue_create("com.alibaba.sdk.httpdns.runloopOperateQueue.HttpdnsRequest", DISPATCH_QUEUE_SERIAL);
|
||||
_streamOperateSyncQueue = dispatch_queue_create("com.Trust.sdk.httpdns.runloopOperateQueue.HttpdnsRequest", DISPATCH_QUEUE_SERIAL);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return nil;
|
||||
}
|
||||
|
||||
// 验证响应码
|
||||
// 验证响应<EFBFBD><EFBFBD>?
|
||||
if (![self validateResponseCode:json]) {
|
||||
return nil;
|
||||
}
|
||||
@@ -94,7 +94,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return nil;
|
||||
}
|
||||
|
||||
// 获取所有答案
|
||||
// 获取所有答<EFBFBD><EFBFBD>?
|
||||
NSArray *answers = [self getAnswersFromData:data];
|
||||
if (!answers) {
|
||||
return nil;
|
||||
@@ -112,7 +112,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return hostObjects;
|
||||
}
|
||||
|
||||
// 验证响应码
|
||||
// 验证响应<EFBFBD><EFBFBD>?
|
||||
- (BOOL)validateResponseCode:(NSDictionary *)json {
|
||||
NSString *code = [json objectForKey:@"code"];
|
||||
if (![code isEqualToString:@"success"]) {
|
||||
@@ -122,17 +122,17 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return YES;
|
||||
}
|
||||
|
||||
// 获取并处理解密数据内容
|
||||
// 获取并处理解密数据内<EFBFBD><EFBFBD>?
|
||||
- (id)extractDataContent:(NSDictionary *)json {
|
||||
// 获取mode,判断是否需要解密
|
||||
// 获取mode,判断是否需要解<EFBFBD><EFBFBD>?
|
||||
NSInteger mode = [[json objectForKey:@"mode"] integerValue];
|
||||
id data = [json objectForKey:@"data"];
|
||||
|
||||
if (mode == 1) { // 只处理AES-CBC模式
|
||||
// 需要解密
|
||||
// 需要解<EFBFBD><EFBFBD>?
|
||||
data = [self decryptData:data withMode:mode];
|
||||
} else if (mode != 0) {
|
||||
// 不支持的加密模式(如AES-GCM)
|
||||
// 不支持的加密模式(如AES-GCM<EFBFBD><EFBFBD>?
|
||||
HttpdnsLogDebug("Unsupported encryption mode: %ld", (long)mode);
|
||||
return nil;
|
||||
}
|
||||
@@ -174,7 +174,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return nil;
|
||||
}
|
||||
|
||||
// 使用工具类解密
|
||||
// 使用工具类解<EFBFBD><EFBFBD>?
|
||||
NSError *decryptError = nil;
|
||||
NSData *decryptedData = [HttpdnsUtil decryptDataAESCBC:encryptedData withKey:keyData error:&decryptError];
|
||||
|
||||
@@ -183,7 +183,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return nil;
|
||||
}
|
||||
|
||||
// 将解密后的JSON数据解析为字典
|
||||
// 将解密后的JSON数据解析为字<EFBFBD><EFBFBD>?
|
||||
NSError *jsonError;
|
||||
id decodedData = [NSJSONSerialization JSONObjectWithData:decryptedData options:0 error:&jsonError];
|
||||
|
||||
@@ -205,7 +205,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return answers;
|
||||
}
|
||||
|
||||
// 从答案创建主机对象
|
||||
// 从答案创建主机对<EFBFBD><EFBFBD>?
|
||||
- (HttpdnsHostObject *)createHostObjectFromAnswer:(NSDictionary *)answer {
|
||||
// 获取域名
|
||||
NSString *host = [answer objectForKey:@"dn"];
|
||||
@@ -251,7 +251,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
// 设置IPv4的TTL
|
||||
[self setTTLForHostObject:hostObject fromData:v4Data forIPv6:NO];
|
||||
|
||||
// 处理v4的extra字段,优先使用
|
||||
// 处理v4的extra字段,优先使<EFBFBD><EFBFBD>?
|
||||
[self processExtraInfo:v4Data forHostObject:hostObject];
|
||||
|
||||
// 检查是否有no_ip_code字段,表示无IPv4记录
|
||||
@@ -259,7 +259,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
hostObject.hasNoIpv4Record = YES;
|
||||
}
|
||||
} else {
|
||||
// 没有IPv4地址但有v4节点,可能是无记录
|
||||
// 没有IPv4地址但有v4节点,可能是无记<EFBFBD><EFBFBD>?
|
||||
hostObject.hasNoIpv4Record = YES;
|
||||
}
|
||||
}
|
||||
@@ -289,12 +289,12 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
hostObject.hasNoIpv6Record = YES;
|
||||
}
|
||||
} else {
|
||||
// 没有IPv6地址但有v6节点,可能是无记录
|
||||
// 没有IPv6地址但有v6节点,可能是无记<EFBFBD><EFBFBD>?
|
||||
hostObject.hasNoIpv6Record = YES;
|
||||
}
|
||||
}
|
||||
|
||||
// 设置IP数组到主机对象
|
||||
// 设置IP数组到主机对<EFBFBD><EFBFBD>?
|
||||
- (void)setIpArrayToHostObject:(HttpdnsHostObject *)hostObject fromIpsArray:(NSArray *)ips forIPv6:(BOOL)isIPv6 {
|
||||
NSMutableArray *ipArray = [NSMutableArray array];
|
||||
for (NSString *ip in ips) {
|
||||
@@ -352,7 +352,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return nil;
|
||||
}
|
||||
|
||||
// 准备签名和加密参数
|
||||
// 准备签名和加密参<EFBFBD><EFBFBD>?
|
||||
NSDictionary *paramsToSign = [self prepareSigningParams:request forEncryption:[self shouldUseEncryption]];
|
||||
|
||||
// 计算签名
|
||||
@@ -380,7 +380,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return isV4 ? [scheduleCenter currentActiveServiceServerV4Host] : [scheduleCenter currentActiveServiceServerV6Host];
|
||||
}
|
||||
|
||||
// 检查是否应该使用加密
|
||||
// 检查是否应该使用加<EFBFBD><EFBFBD>?
|
||||
- (BOOL)shouldUseEncryption {
|
||||
HttpDnsService *service = self.service ?: [HttpDnsService sharedInstance];
|
||||
return [HttpdnsUtil isNotEmptyString:service.aesSecretKey];
|
||||
@@ -391,13 +391,13 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
HttpDnsService *service = self.service ?: [HttpDnsService sharedInstance];
|
||||
NSInteger accountId = service.accountID;
|
||||
|
||||
// 构建参与签名的参数字典
|
||||
// 构建参与签名的参数字<EFBFBD><EFBFBD>?
|
||||
NSMutableDictionary *paramsToSign = [NSMutableDictionary dictionary];
|
||||
|
||||
// 构建需要加密的参数字典
|
||||
NSMutableDictionary *paramsToEncrypt = [NSMutableDictionary dictionary];
|
||||
|
||||
// 账号ID,参与签名但不加密
|
||||
// 账号ID,参与签名但不加<EFBFBD><EFBFBD>?
|
||||
[paramsToSign setObject:[NSString stringWithFormat:@"%ld", accountId] forKey:@"id"];
|
||||
|
||||
// 决定加密模式
|
||||
@@ -416,7 +416,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
// SDNS参数,参与签名并加密
|
||||
[self addSdnsParams:request.sdnsParams toParams:paramsToEncrypt];
|
||||
|
||||
// 签名过期时间,参与签名但不加密
|
||||
// 签名过期时间,参与签名但不加<EFBFBD><EFBFBD>?
|
||||
long expiredTimestamp = [self calculateExpiredTimestamp];
|
||||
NSString *expiredTimestampString = [NSString stringWithFormat:@"%ld", expiredTimestamp];
|
||||
[paramsToSign setObject:expiredTimestampString forKey:@"exp"];
|
||||
@@ -435,7 +435,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return paramsToSign;
|
||||
}
|
||||
|
||||
// 获取查询类型字符串
|
||||
// 获取查询类型字符<EFBFBD><EFBFBD>?
|
||||
- (NSString *)getQueryTypeString:(HttpdnsQueryIPType)queryIpType {
|
||||
if ((queryIpType & HttpdnsQueryIPTypeIpv4) && (queryIpType & HttpdnsQueryIPTypeIpv6)) {
|
||||
return @"4,6";
|
||||
@@ -455,7 +455,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 计算过期时间戳
|
||||
// 计算过期时间<EFBFBD><EFBFBD>?
|
||||
- (long)calculateExpiredTimestamp {
|
||||
HttpDnsService *service = self.service ?: [HttpDnsService sharedInstance];
|
||||
long localTimestampOffset = (long)service.authTimeOffset;
|
||||
@@ -510,7 +510,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
[signParts addObject:[NSString stringWithFormat:@"%@=%@", key, [params objectForKey:key]]];
|
||||
}
|
||||
|
||||
// 组合签名字符串
|
||||
// 组合签名字符<EFBFBD><EFBFBD>?
|
||||
NSString *signContent = [signParts componentsJoinedByString:@"&"];
|
||||
|
||||
// 计算HMAC-SHA256签名
|
||||
@@ -538,7 +538,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
// 加密模式下,添加enc参数
|
||||
[finalUrl appendFormat:@"&enc=%@", [params objectForKey:@"enc"]];
|
||||
} else {
|
||||
// 明文模式下,添加所有参数
|
||||
// 明文模式下,添加所有参<EFBFBD><EFBFBD>?
|
||||
NSMutableDictionary *paramsForPlainText = [NSMutableDictionary dictionaryWithDictionary:params];
|
||||
[paramsForPlainText removeObjectForKey:@"id"];
|
||||
[paramsForPlainText removeObjectForKey:@"m"];
|
||||
@@ -557,7 +557,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 添加签名(如果有)
|
||||
// 添加签名(如果有<EFBFBD><EFBFBD>?
|
||||
if ([HttpdnsUtil isNotEmptyString:signature]) {
|
||||
[finalUrl appendFormat:@"&s=%@", signature];
|
||||
}
|
||||
@@ -568,7 +568,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
return finalUrl;
|
||||
}
|
||||
|
||||
// 添加额外的不参与签名的参数
|
||||
// 添加额外的不参与签名的参<EFBFBD><EFBFBD>?
|
||||
- (void)appendAdditionalParams:(NSMutableString *)url {
|
||||
// sessionId
|
||||
NSString *sessionId = [HttpdnsUtil generateSessionID];
|
||||
@@ -594,7 +594,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
if (!service) {
|
||||
HttpdnsLogDebug("Missing service for accountId: %ld; ensure request.accountId is set and service initialized", (long)request.accountId);
|
||||
if (error) {
|
||||
*error = [NSError errorWithDomain:ALICLOUD_HTTPDNS_ERROR_DOMAIN code:ALICLOUD_HTTPDNS_HTTPS_COMMON_ERROR_CODE userInfo:@{NSLocalizedDescriptionKey: @"HttpDnsService not found for accountId"}];
|
||||
*error = [NSError errorWithDomain:Trust_HTTPDNS_ERROR_DOMAIN code:Trust_HTTPDNS_HTTPS_COMMON_ERROR_CODE userInfo:@{NSLocalizedDescriptionKey: @"HttpDnsService not found for accountId"}];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
@@ -612,7 +612,7 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
|
||||
@try {
|
||||
HttpdnsIPStackType stackType = [[HttpdnsIpStackDetector sharedInstance] currentIpStack];
|
||||
// 由于上面默认只用ipv4请求,这里判断如果是ipv6-only环境,那就用v6的ip再试一次
|
||||
// 由于上面默认只用ipv4请求,这里判断如果是ipv6-only环境,那就用v6的ip再试一<EFBFBD><EFBFBD>?
|
||||
if (stackType == kHttpdnsIpv6Only) {
|
||||
url = [self constructHttpdnsResolvingUrl:request forV4Net:NO];
|
||||
HttpdnsLogDebug("lookupHostFromServer by ipv4 server failed, construct ipv6 backup url: %@", url);
|
||||
@@ -631,8 +631,8 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
- (NSArray<HttpdnsHostObject *> *)sendRequest:(NSString *)urlStr queryIpType:(HttpdnsQueryIPType)queryIpType error:(NSError **)error {
|
||||
if (![HttpdnsUtil isNotEmptyString:urlStr]) {
|
||||
if (error) {
|
||||
*error = [NSError errorWithDomain:ALICLOUD_HTTPDNS_ERROR_DOMAIN
|
||||
code:ALICLOUD_HTTPDNS_HTTPS_COMMON_ERROR_CODE
|
||||
*error = [NSError errorWithDomain:Trust_HTTPDNS_ERROR_DOMAIN
|
||||
code:Trust_HTTPDNS_HTTPS_COMMON_ERROR_CODE
|
||||
userInfo:@{NSLocalizedDescriptionKey: @"Empty resolve URL due to missing scheduler"}];
|
||||
}
|
||||
return nil;
|
||||
@@ -654,8 +654,8 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
if (httpResponse.statusCode != 200) {
|
||||
if (error) {
|
||||
NSString *errorMessage = [NSString stringWithFormat:@"Unsupported http status code: %ld", (long)httpResponse.statusCode];
|
||||
*error = [NSError errorWithDomain:ALICLOUD_HTTPDNS_ERROR_DOMAIN
|
||||
code:ALICLOUD_HTTP_UNSUPPORTED_STATUS_CODE
|
||||
*error = [NSError errorWithDomain:Trust_HTTPDNS_ERROR_DOMAIN
|
||||
code:Trust_HTTP_UNSUPPORTED_STATUS_CODE
|
||||
userInfo:@{NSLocalizedDescriptionKey: errorMessage}];
|
||||
}
|
||||
return nil;
|
||||
@@ -673,8 +673,8 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
NSDictionary *json = [HttpdnsUtil getValidDictionaryFromJson:jsonValue];
|
||||
if (!json) {
|
||||
if (error) {
|
||||
*error = [NSError errorWithDomain:ALICLOUD_HTTPDNS_ERROR_DOMAIN
|
||||
code:ALICLOUD_HTTP_PARSE_JSON_FAILED
|
||||
*error = [NSError errorWithDomain:Trust_HTTPDNS_ERROR_DOMAIN
|
||||
code:Trust_HTTP_PARSE_JSON_FAILED
|
||||
userInfo:@{NSLocalizedDescriptionKey: @"Failed to parse JSON response"}];
|
||||
}
|
||||
return nil;
|
||||
@@ -691,10 +691,10 @@ static dispatch_queue_t _streamOperateSyncQueue = 0;
|
||||
}
|
||||
|
||||
if ([extra isKindOfClass:[NSString class]]) {
|
||||
// 已经是字符串,直接返回
|
||||
// 已经是字符串,直接返<EFBFBD><EFBFBD>?
|
||||
return extra;
|
||||
} else {
|
||||
// 非字符串,尝试转换为JSON字符串
|
||||
// 非字符串,尝试转换为JSON字符<EFBFBD><EFBFBD>?
|
||||
NSError *error = nil;
|
||||
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:extra options:0 error:&error];
|
||||
if (!error && jsonData) {
|
||||
|
||||
Reference in New Issue
Block a user