Backup address fix

This commit is contained in:
Isaac 2024-05-02 21:55:30 +04:00
parent be5bec8680
commit 87a0240c8b
2 changed files with 27 additions and 12 deletions

View File

@ -1,6 +1,7 @@
#import <MtProtoKit/MTBackupAddressSignals.h>
#import <MtProtoKit/MTSignal.h>
#import <MtProtoKit/MTAtomic.h>
#import <MtProtoKit/MTQueue.h>
#import <MtProtoKit/MTHttpRequestOperation.h>
#import <MtProtoKit/MTEncryption.h>
@ -276,6 +277,15 @@ static NSString *makeRandomPadding() {
return [[MTSignal mergeSignals:signals] take:1];
}
MTAtomic *sharedFetchConfigKeychains() {
static MTAtomic *value = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
value = [[MTAtomic alloc] initWithValue:[[NSMutableDictionary alloc] init]];
});
return value;
}
+ (MTSignal *)fetchConfigFromAddress:(MTBackupDatacenterAddress *)address currentContext:(MTContext *)currentContext mainDatacenterId:(NSInteger)mainDatacenterId {
MTApiEnvironment *apiEnvironment = [currentContext.apiEnvironment copy];
@ -299,17 +309,17 @@ static NSString *makeRandomPadding() {
NSInteger authTokenMasterDatacenterId = 0;
NSNumber *requiredAuthToken = nil;
bool allowUnboundEphemeralKeys = true;
if (address.datacenterId != 0) {
authTokenMasterDatacenterId = mainDatacenterId;
requiredAuthToken = @(address.datacenterId);
MTTemporaryKeychain *tempKeychain = [[MTTemporaryKeychain alloc] init];
[MTContext copyAuthInfoFrom:currentContext.keychain toTempKeychain:tempKeychain];
context.keychain = tempKeychain;
allowUnboundEphemeralKeys = false;
} else {
MTTemporaryKeychain *tempKeychain = [[MTTemporaryKeychain alloc] init];
context.keychain = tempKeychain;
}
NSString *keychainKey = [NSString stringWithFormat:@"%d:%@:%d", (int)address.datacenterId, address.ip, (int)address.port];
MTTemporaryKeychain *tempKeychain = [sharedFetchConfigKeychains() with:^(NSMutableDictionary *dict) {
if (dict[keychainKey] != nil) {
return (MTTemporaryKeychain *)dict[keychainKey];
} else {
MTTemporaryKeychain *keychain = [[MTTemporaryKeychain alloc] init];
dict[keychainKey] = keychain;
return keychain;
}
}];
context.keychain = tempKeychain;
MTProto *mtProto = [[MTProto alloc] initWithContext:context datacenterId:address.datacenterId usageCalculationInfo:nil requiredAuthToken:requiredAuthToken authTokenMasterDatacenterId:authTokenMasterDatacenterId];
mtProto.useTempAuthKeys = true;

View File

@ -979,14 +979,16 @@ static void copyKeychainDictionaryKey(NSString * _Nonnull group, NSString * _Non
[[MTContext contextQueue] dispatchOnQueue:^
{
MTDatacenterAddress *overrideAddress = _apiEnvironment.datacenterAddressOverrides[@(datacenterId)];
bool isAddressOverride = false;
if (overrideAddress != nil) {
isAddressOverride = true;
[results addObject:[[MTTransportScheme alloc] initWithTransportClass:[MTTcpTransport class] address:overrideAddress media:false]];
} else {
[results addObjectsFromArray:[self _allTransportSchemesForDatacenterWithId:datacenterId]];
}
MTDatacenterAddressSet *addressSet = [self addressSetForDatacenterWithId:datacenterId];
if (addressSet != nil) {
if (addressSet != nil && !isAddressOverride) {
MTTransportScheme *manualScheme = _datacenterManuallySelectedSchemeById[[[MTTransportSchemeKey alloc] initWithDatacenterId:datacenterId isProxy:isProxy isMedia:media]];
if (manualScheme != nil) {
bool addressValid = false;
@ -1351,6 +1353,9 @@ static void copyKeychainDictionaryKey(NSString * _Nonnull group, NSString * _Non
if (_apiEnvironment.networkSettings == nil || _apiEnvironment.networkSettings.reducedBackupDiscoveryTimeout) {
delay = 5.0;
}
#if DEBUG
delay = 1.0;
#endif
[self _beginBackupAddressDiscoveryWithDelay:delay];
}];
}