mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
123 lines
3.3 KiB
Objective-C
123 lines
3.3 KiB
Objective-C
#import <MtProtoKit/MTDatacenterAddress.h>
|
|
|
|
#import <netinet/in.h>
|
|
#import <arpa/inet.h>
|
|
|
|
@implementation MTDatacenterAddress
|
|
|
|
- (instancetype)initWithIp:(NSString *)ip port:(uint16_t)port preferForMedia:(bool)preferForMedia restrictToTcp:(bool)restrictToTcp cdn:(bool)cdn preferForProxy:(bool)preferForProxy secret:(NSData *)secret
|
|
{
|
|
self = [super init];
|
|
if (self != nil)
|
|
{
|
|
_ip = ip;
|
|
_port = port;
|
|
_preferForMedia = preferForMedia;
|
|
_restrictToTcp = restrictToTcp;
|
|
_cdn = cdn;
|
|
_preferForProxy = preferForProxy;
|
|
_secret = secret;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (instancetype)initWithCoder:(NSCoder *)aDecoder
|
|
{
|
|
self = [super init];
|
|
if (self != nil)
|
|
{
|
|
_ip = [aDecoder decodeObjectForKey:@"ip"];
|
|
_host = [aDecoder decodeObjectForKey:@"host"];
|
|
_port = (uint16_t)[aDecoder decodeIntForKey:@"port"];
|
|
_preferForMedia = [aDecoder decodeBoolForKey:@"preferForMedia"];
|
|
_restrictToTcp = [aDecoder decodeBoolForKey:@"restrictToTcp"];
|
|
_cdn = [aDecoder decodeBoolForKey:@"cdn"];
|
|
_preferForProxy = [aDecoder decodeBoolForKey:@"preferForProxy"];
|
|
_secret = [aDecoder decodeObjectForKey:@"secret"];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)encodeWithCoder:(NSCoder *)aCoder
|
|
{
|
|
[aCoder encodeObject:_ip forKey:@"ip"];
|
|
[aCoder encodeObject:_host forKey:@"host"];
|
|
[aCoder encodeInt:_port forKey:@"port"];
|
|
[aCoder encodeBool:_preferForMedia forKey:@"preferForMedia"];
|
|
[aCoder encodeBool:_restrictToTcp forKey:@"restrictToTcp"];
|
|
[aCoder encodeBool:_cdn forKey:@"cdn"];
|
|
[aCoder encodeBool:_preferForProxy forKey:@"preferForProxy"];
|
|
[aCoder encodeObject:_secret forKey:@"secret"];
|
|
}
|
|
|
|
- (instancetype)copyWithZone:(NSZone *)__unused zone {
|
|
return self;
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)object
|
|
{
|
|
if (![object isKindOfClass:[MTDatacenterAddress class]])
|
|
return false;
|
|
|
|
return [self isEqualToAddress:object];
|
|
}
|
|
|
|
- (NSUInteger)hash {
|
|
return [_ip hash] * 31 + ((NSUInteger)_port);
|
|
}
|
|
|
|
- (BOOL)isEqualToAddress:(MTDatacenterAddress *)other
|
|
{
|
|
if (![other isKindOfClass:[MTDatacenterAddress class]])
|
|
return false;
|
|
|
|
if (![_ip isEqualToString:other.ip])
|
|
return false;
|
|
|
|
if (_port != other.port)
|
|
return false;
|
|
|
|
if (_preferForMedia != other.preferForMedia)
|
|
return false;
|
|
|
|
if (_restrictToTcp != other.restrictToTcp) {
|
|
return false;
|
|
}
|
|
|
|
if (_cdn != other.cdn) {
|
|
return false;
|
|
}
|
|
|
|
if (_preferForProxy != other.preferForProxy) {
|
|
return false;
|
|
}
|
|
|
|
if ((_secret != nil) && (other->_secret != nil)) {
|
|
if (![_secret isEqualToData:other->_secret]) {
|
|
return false;
|
|
}
|
|
} else if ((_secret != nil) != (other->_secret != nil)) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
- (BOOL)isIpv6
|
|
{
|
|
const char *utf8 = [_ip UTF8String];
|
|
int success;
|
|
|
|
struct in6_addr dst6;
|
|
success = inet_pton(AF_INET6, utf8, &dst6);
|
|
|
|
return success == 1;
|
|
}
|
|
|
|
- (NSString *)description
|
|
{
|
|
return [[NSString alloc] initWithFormat:@"%@:%d (media: %@, cdn: %@, static: %@, secret: %@)", _ip == nil ? _host : _ip, (int)_port, _preferForMedia ? @"yes" : @"no", _cdn ? @"yes" : @"no", _preferForProxy ? @"yes" : @"no", _secret];
|
|
}
|
|
|
|
@end
|