diff --git a/MTDiscoverConnectionSignals.m b/MTDiscoverConnectionSignals.m index 84c24a7da9..7265a41b18 100644 --- a/MTDiscoverConnectionSignals.m +++ b/MTDiscoverConnectionSignals.m @@ -181,11 +181,13 @@ typedef struct { [bestTcp4Signals addObject:signal]; } - SSignal *signal = [[[[self httpConnectionWithAddress:address] then:[SSignal single:httpTransportScheme]] timeout:5.0 onQueue:[SQueue concurrentDefaultQueue] orSignal:[SSignal fail:nil]] catch:^SSignal *(__unused id error) - { - return [SSignal complete]; - }]; - [bestHttpSignals addObject:signal]; + if (!address.restrictToTcp) { + SSignal *signal = [[[[self httpConnectionWithAddress:address] then:[SSignal single:httpTransportScheme]] timeout:5.0 onQueue:[SQueue concurrentDefaultQueue] orSignal:[SSignal fail:nil]] catch:^SSignal *(__unused id error) + { + return [SSignal complete]; + }]; + [bestHttpSignals addObject:signal]; + } } SSignal *repeatDelaySignal = [[SSignal complete] delay:1.0 onQueue:[SQueue concurrentDefaultQueue]]; diff --git a/MTProtoKit/MTDatacenterAddress.h b/MTProtoKit/MTDatacenterAddress.h index 1279c7dd35..f014b0c611 100644 --- a/MTProtoKit/MTDatacenterAddress.h +++ b/MTProtoKit/MTDatacenterAddress.h @@ -14,8 +14,9 @@ @property (nonatomic, strong, readonly) NSString *ip; @property (nonatomic, readonly) uint16_t port; @property (nonatomic, readonly) bool preferForMedia; +@property (nonatomic, readonly) bool restrictToTcp; -- (instancetype)initWithIp:(NSString *)ip port:(uint16_t)port preferForMedia:(bool)preferForMedia; +- (instancetype)initWithIp:(NSString *)ip port:(uint16_t)port preferForMedia:(bool)preferForMedia restrictToTcp:(bool)restrictToTcp; - (BOOL)isEqualToAddress:(MTDatacenterAddress *)other; - (BOOL)isIpv6; diff --git a/MTProtoKit/MTDatacenterAddress.m b/MTProtoKit/MTDatacenterAddress.m index 15abc6cc5c..4a11ab751e 100644 --- a/MTProtoKit/MTDatacenterAddress.m +++ b/MTProtoKit/MTDatacenterAddress.m @@ -13,7 +13,7 @@ @implementation MTDatacenterAddress -- (instancetype)initWithIp:(NSString *)ip port:(uint16_t)port preferForMedia:(bool)preferForMedia +- (instancetype)initWithIp:(NSString *)ip port:(uint16_t)port preferForMedia:(bool)preferForMedia restrictToTcp:(bool)restrictToTcp { self = [super init]; if (self != nil) @@ -21,6 +21,7 @@ _ip = ip; _port = port; _preferForMedia = preferForMedia; + _restrictToTcp = restrictToTcp; } return self; } @@ -34,6 +35,7 @@ _host = [aDecoder decodeObjectForKey:@"host"]; _port = (uint16_t)[aDecoder decodeIntForKey:@"port"]; _preferForMedia = [aDecoder decodeBoolForKey:@"preferForMedia"]; + _restrictToTcp = [aDecoder decodeBoolForKey:@"restrictToTcp"]; } return self; } @@ -44,6 +46,7 @@ [aCoder encodeObject:_host forKey:@"host"]; [aCoder encodeInt:_port forKey:@"port"]; [aCoder encodeBool:_preferForMedia forKey:@"preferForMedia"]; + [aCoder encodeBool:_restrictToTcp forKey:@"restrictToTcp"]; } - (BOOL)isEqual:(id)object @@ -68,6 +71,10 @@ if (_preferForMedia != other.preferForMedia) return false; + if (_restrictToTcp != other.restrictToTcp) { + return false; + } + return true; } diff --git a/MTProtoKit/MTTcpTransport.m b/MTProtoKit/MTTcpTransport.m index 83adc2f0fc..db741de0a6 100644 --- a/MTProtoKit/MTTcpTransport.m +++ b/MTProtoKit/MTTcpTransport.m @@ -618,7 +618,13 @@ static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0; { if (transaction.payload.length != 0) { - if (transportContext.connection != nil) + bool acceptTransaction = true; +/*#ifdef DEBUG + if (arc4random_uniform(10) < 5) { + acceptTransaction = false; + } +#endif*/ + if (transportContext.connection != nil && acceptTransaction) { id transactionId = transportContext.connection.internalId; [transportContext.connection sendDatas:@[transaction.payload] completion:^(bool success)