diff --git a/MTProtoKit/MTTcpConnectionBehaviour.m b/MTProtoKit/MTTcpConnectionBehaviour.m index b80e55d678..bb86531eea 100644 --- a/MTProtoKit/MTTcpConnectionBehaviour.m +++ b/MTProtoKit/MTTcpConnectionBehaviour.m @@ -36,8 +36,7 @@ - (void)requestConnection { - if (_backoffTimer == nil) - { + if (_backoffTimer == nil) { [self timerEvent:false]; } } diff --git a/MTProtoKit/MTTcpTransport.m b/MTProtoKit/MTTcpTransport.m index 4fadf7335c..5305f84379 100644 --- a/MTProtoKit/MTTcpTransport.m +++ b/MTProtoKit/MTTcpTransport.m @@ -341,6 +341,9 @@ static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0; id delegate = self.delegate; if (scheme != nil) { + if ([delegate respondsToSelector:@selector(transportConnectionFailed:scheme:)]) { + [delegate transportConnectionFailed:self scheme:scheme]; + } if ([delegate respondsToSelector:@selector(transportConnectionProblemsStatusChanged:scheme:hasConnectionProblems:isProbablyHttp:)]) { [delegate transportConnectionProblemsStatusChanged:self scheme:scheme hasConnectionProblems:true isProbablyHttp:false]; } @@ -786,4 +789,23 @@ static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0; }]; } +- (void)updateSchemes:(NSArray * _Nonnull)schemes { + MTTcpTransportContext *transportContext = _transportContext; + [[MTTcpTransport tcpTransportQueue] dispatchOnQueue:^{ + if ([transportContext.schemes isEqualToArray:schemes]) { + return; + } + transportContext.schemes = schemes; + bool reset = false; + if (![transportContext.schemes containsObject:transportContext.connection.scheme]) { + reset = true; + } else if (!transportContext.connectionIsValid) { + reset = true; + } + if (reset) { + [transportContext.connectionBehaviour requestConnection]; + } + }]; +} + @end diff --git a/MTProtoKit/MTTransport.h b/MTProtoKit/MTTransport.h index 7b96c9d0e7..ce46a6506c 100644 --- a/MTProtoKit/MTTransport.h +++ b/MTProtoKit/MTTransport.h @@ -64,4 +64,6 @@ - (void)activeTransactionIds:(void (^)(NSArray *activeTransactionId))completion; +- (void)updateSchemes:(NSArray * _Nonnull)schemes; + @end diff --git a/MTProtoKit/MTTransport.m b/MTProtoKit/MTTransport.m index b0766aefb1..dc6e318815 100644 --- a/MTProtoKit/MTTransport.m +++ b/MTProtoKit/MTTransport.m @@ -90,4 +90,7 @@ { } +- (void)updateSchemes:(NSArray * _Nonnull)schemes { +} + @end