阿里sdk

This commit is contained in:
Robin
2026-02-20 17:56:24 +08:00
parent 39524692e5
commit f3af234308
524 changed files with 58345 additions and 0 deletions

View File

@@ -0,0 +1,150 @@
//
// HttpdnsLocalResolver.m
// AlicloudHttpDNS
//
// Created by xuyecan on 2025/3/16.
// Copyright © 2025 alibaba-inc.com. All rights reserved.
//
#import "HttpdnsLocalResolver.h"
#import <netdb.h>
#import <arpa/inet.h>
#import <ifaddrs.h>
#import <sys/socket.h>
#import "HttpdnsService.h"
#import "HttpdnsUtil.h"
#import "HttpdnsHostObject.h"
@implementation HttpdnsLocalResolver
- (HttpdnsHostObject *)resolve:(HttpdnsRequest *)request {
// 1.
NSString *host = request.host;
if (host.length == 0) {
return nil; //
}
HttpDnsService *service = [HttpDnsService getInstanceByAccountId:request.accountId];
if (!service) {
service = [HttpDnsService sharedInstance];
}
// 2. DNS
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC; // IPv4IPv6
hints.ai_socktype = SOCK_STREAM; // TCP (DNS)
// 3. getaddrinfo
struct addrinfo *res = NULL;
int ret = getaddrinfo([host UTF8String], NULL, &hints, &res);
if (ret != 0 || res == NULL) {
// DNS
if (res) {
freeaddrinfo(res);
}
return nil;
}
// 4. IPv4IPv6
NSMutableArray<NSString *> *ipv4Array = [NSMutableArray array];
NSMutableArray<NSString *> *ipv6Array = [NSMutableArray array];
for (struct addrinfo *p = res; p != NULL; p = p->ai_next) {
if (p->ai_family == AF_INET || p->ai_family == AF_INET6) {
char hostBuffer[NI_MAXHOST];
memset(hostBuffer, 0, sizeof(hostBuffer));
if (getnameinfo(p->ai_addr, (socklen_t)p->ai_addrlen,
hostBuffer, sizeof(hostBuffer),
NULL, 0, NI_NUMERICHOST) == 0) {
NSString *ipString = [NSString stringWithUTF8String:hostBuffer];
if (p->ai_family == AF_INET) {
[ipv4Array addObject:ipString];
} else {
[ipv6Array addObject:ipString];
}
}
}
}
freeaddrinfo(res);
// 5. queryIpTypeIP
BOOL wantIPv4 = NO;
BOOL wantIPv6 = NO;
switch (request.queryIpType) {
case HttpdnsQueryIPTypeAuto:
// AutoIPv4IPv6
// wantIPv4YES
wantIPv4 = YES;
// DNSIPv6IPv6
wantIPv6 = (ipv6Array.count > 0);
break;
case HttpdnsQueryIPTypeIpv4:
wantIPv4 = YES;
break;
case HttpdnsQueryIPTypeIpv6:
wantIPv6 = YES;
break;
case HttpdnsQueryIPTypeBoth:
wantIPv4 = YES;
wantIPv6 = YES;
break;
}
// 6. HttpdnsIpObject
NSMutableArray<HttpdnsIpObject *> *v4IpObjects = [NSMutableArray array];
NSMutableArray<HttpdnsIpObject *> *v6IpObjects = [NSMutableArray array];
if (wantIPv4) {
for (NSString *ipStr in ipv4Array) {
HttpdnsIpObject *ipObj = [[HttpdnsIpObject alloc] init];
[ipObj setIp:ipStr]; // ipObj.ip = ipStr
// connectedRT0
[v4IpObjects addObject:ipObj];
}
}
if (wantIPv6) {
for (NSString *ipStr in ipv6Array) {
HttpdnsIpObject *ipObj = [[HttpdnsIpObject alloc] init];
[ipObj setIp:ipStr];
[v6IpObjects addObject:ipObj];
}
}
// 7. HttpdnsHostObject
HttpdnsHostObject *hostObject = [[HttpdnsHostObject alloc] init];
[hostObject setHostName:host]; // hostName = request.host
[hostObject setV4Ips:v4IpObjects];
[hostObject setV6Ips:v6IpObjects];
// IPv4IPv6TTL60
[hostObject setV4TTL:60];
[hostObject setV6TTL:60];
// ttl
[HttpdnsUtil processCustomTTL:hostObject forHost:host service:service];
// (1970)
int64_t now = (int64_t)[[NSDate date] timeIntervalSince1970];
//
[hostObject setLastIPv4LookupTime:now];
[hostObject setLastIPv6LookupTime:now];
// IPv4IPv6
[hostObject setHasNoIpv4Record:(v4IpObjects.count == 0)];
[hostObject setHasNoIpv6Record:(v6IpObjects.count == 0)];
// clientIp
// /
return hostObject;
}
@end