mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Backup address fix
This commit is contained in:
parent
be5bec8680
commit
87a0240c8b
@ -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;
|
||||
|
@ -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];
|
||||
}];
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user