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,91 @@
//
// HttpDnsLocker.m
// TrustHttpDNS
//
// Created by on 2023/8/16.
// Copyright © 2023 trustapp.com. All rights reserved.
//
#import "HttpDnsLocker.h"
#import "HttpdnsService.h"
@implementation HttpDnsLocker {
NSMutableDictionary<NSString*, NSLock*> *_v4LockMap;
NSMutableDictionary<NSString*, NSLock*> *_v6LockMap;
NSMutableDictionary<NSString*, NSLock*> *_v4v6LockMap;
}
+ (instancetype)sharedInstance {
static HttpDnsLocker *locker = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
locker = [[HttpDnsLocker alloc] init];
});
return locker;
}
- (instancetype)init {
if (self = [super init]) {
_v4LockMap = [NSMutableDictionary dictionary];
_v6LockMap = [NSMutableDictionary dictionary];
_v4v6LockMap = [NSMutableDictionary dictionary];
}
return self;
}
- (void)lock:(NSString *)host queryType:(HttpdnsQueryIPType)queryIpType {
NSLock *condition = [self getLock:host queryType:queryIpType];
if (condition) {
[condition lock];
}
}
- (BOOL)tryLock:(NSString *)host queryType:(HttpdnsQueryIPType)queryType {
NSLock *condition = [self getLock:host queryType:queryType];
if (condition) {
return [condition tryLock];
}
return NO;
}
- (void)unlock:(NSString *)host queryType:(HttpdnsQueryIPType)queryType {
NSLock *condition = [self getLock:host queryType:queryType];
if (condition) {
[condition unlock];
}
}
- (NSLock *)getLock:(NSString *)host queryType:(HttpdnsQueryIPType)queryType {
if (queryType == HttpdnsQueryIPTypeIpv4) {
@synchronized (_v4LockMap) {
NSLock *lock = [_v4LockMap objectForKey:host];
if (!lock) {
lock = [[NSLock alloc] init];
[_v4LockMap setObject:lock forKey:host];
}
return lock;
}
} else if (queryType == HttpdnsQueryIPTypeIpv6) {
@synchronized (_v6LockMap) {
NSLock *condition = [_v6LockMap objectForKey:host];
if (!condition) {
condition = [[NSLock alloc] init];
[_v6LockMap setObject:condition forKey:host];
}
return condition;
}
} else {
@synchronized (_v4v6LockMap) {
NSLock *condition = [_v4v6LockMap objectForKey:host];
if (!condition) {
condition = [[NSLock alloc] init];
[_v4v6LockMap setObject:condition forKey:host];
}
return condition;
}
}
}
@end