mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2026-01-16 09:26:59 +00:00
Added compact logging
This commit is contained in:
@@ -162,7 +162,7 @@ static NSData *base64_decode(NSString *str) {
|
||||
NSData *getConfigData = nil;
|
||||
MTRequestDatacenterAddressListParser responseParser = [currentContext.serialization requestDatacenterAddressWithData:&getConfigData];
|
||||
|
||||
[request setPayload:getConfigData metadata:@"getConfig" responseParser:responseParser];
|
||||
[request setPayload:getConfigData metadata:@"getConfig" shortMetadata:@"getConfig" responseParser:responseParser];
|
||||
|
||||
__weak MTContext *weakCurrentContext = currentContext;
|
||||
return [[MTSignal alloc] initWithGenerator:^id<MTDisposable>(MTSubscriber *subscriber) {
|
||||
|
||||
11
MTGzip.h
Normal file
11
MTGzip.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface MTGzip : NSObject
|
||||
|
||||
+ (NSData * _Nullable)decompress:(NSData *)data;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
53
MTGzip.m
Normal file
53
MTGzip.m
Normal file
@@ -0,0 +1,53 @@
|
||||
#import "MTGzip.h"
|
||||
|
||||
#import <zlib.h>
|
||||
|
||||
@implementation MTGzip
|
||||
|
||||
+ (NSData * _Nullable)decompress:(NSData *)data {
|
||||
const int kMemoryChunkSize = 1024;
|
||||
|
||||
NSUInteger length = [data length];
|
||||
int windowBits = 15 + 32; //Default + gzip header instead of zlib header
|
||||
int retCode;
|
||||
unsigned char output[kMemoryChunkSize];
|
||||
uInt gotBack;
|
||||
NSMutableData *result;
|
||||
z_stream stream;
|
||||
|
||||
if ((length == 0) || (length > UINT_MAX)) //FIXME: Support 64 bit inputs
|
||||
return nil;
|
||||
|
||||
bzero(&stream, sizeof(z_stream));
|
||||
stream.avail_in = (uInt)length;
|
||||
stream.next_in = (unsigned char*)[data bytes];
|
||||
|
||||
retCode = inflateInit2(&stream, windowBits);
|
||||
if(retCode != Z_OK)
|
||||
{
|
||||
NSLog(@"%s: inflateInit2() failed with error %i", __PRETTY_FUNCTION__, retCode);
|
||||
return nil;
|
||||
}
|
||||
|
||||
result = [NSMutableData dataWithCapacity:(length * 4)];
|
||||
do
|
||||
{
|
||||
stream.avail_out = kMemoryChunkSize;
|
||||
stream.next_out = output;
|
||||
retCode = inflate(&stream, Z_NO_FLUSH);
|
||||
if ((retCode != Z_OK) && (retCode != Z_STREAM_END))
|
||||
{
|
||||
NSLog(@"%s: inflate() failed with error %i", __PRETTY_FUNCTION__, retCode);
|
||||
inflateEnd(&stream);
|
||||
return nil;
|
||||
}
|
||||
gotBack = kMemoryChunkSize - stream.avail_out;
|
||||
if (gotBack > 0)
|
||||
[result appendBytes:output length:gotBack];
|
||||
} while( retCode == Z_OK);
|
||||
inflateEnd(&stream);
|
||||
|
||||
return (retCode == Z_STREAM_END ? result : nil);
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -240,7 +240,8 @@ typedef enum {
|
||||
[reqPqBuffer appendInt32:(int32_t)0x60469778];
|
||||
[reqPqBuffer appendBytes:_nonce.bytes length:_nonce.length];
|
||||
|
||||
MTOutgoingMessage *message = [[MTOutgoingMessage alloc] initWithData:reqPqBuffer.data metadata:[NSString stringWithFormat:@"reqPq nonce:%@", _nonce] messageId:_currentStageMessageId messageSeqNo:_currentStageMessageSeqNo];
|
||||
NSString *messageDescription = [NSString stringWithFormat:@"reqPq nonce:%@", _nonce];
|
||||
MTOutgoingMessage *message = [[MTOutgoingMessage alloc] initWithData:reqPqBuffer.data metadata:messageDescription shortMetadata:messageDescription messageId:_currentStageMessageId messageSeqNo:_currentStageMessageSeqNo];
|
||||
return [[MTMessageTransaction alloc] initWithMessagePayload:@[message] prepared:nil failed:nil completion:^(NSDictionary *messageInternalIdToTransactionId, NSDictionary *messageInternalIdToPreparedMessage, __unused NSDictionary *messageInternalIdToQuickAckId)
|
||||
{
|
||||
if (_stage == MTDatacenterAuthStagePQ && messageInternalIdToTransactionId[message.internalId] != nil && messageInternalIdToPreparedMessage[message.internalId] != nil)
|
||||
@@ -263,7 +264,8 @@ typedef enum {
|
||||
[reqDhBuffer appendInt64:_dhPublicKeyFingerprint];
|
||||
[reqDhBuffer appendTLBytes:_dhEncryptedData];
|
||||
|
||||
MTOutgoingMessage *message = [[MTOutgoingMessage alloc] initWithData:reqDhBuffer.data metadata:[NSString stringWithFormat:@"reqDh nonce:%@ serverNonce:%@ p:%@ q:%@ fingerprint:%llx", _nonce, _serverNonce, _dhP, _dhQ, _dhPublicKeyFingerprint] messageId:_currentStageMessageId messageSeqNo:_currentStageMessageSeqNo];
|
||||
NSString *messageDescription = [NSString stringWithFormat:@"reqDh nonce:%@ serverNonce:%@ p:%@ q:%@ fingerprint:%llx", _nonce, _serverNonce, _dhP, _dhQ, _dhPublicKeyFingerprint];
|
||||
MTOutgoingMessage *message = [[MTOutgoingMessage alloc] initWithData:reqDhBuffer.data metadata:messageDescription shortMetadata:messageDescription messageId:_currentStageMessageId messageSeqNo:_currentStageMessageSeqNo];
|
||||
return [[MTMessageTransaction alloc] initWithMessagePayload:@[message] prepared:nil failed:nil completion:^(NSDictionary *messageInternalIdToTransactionId, NSDictionary *messageInternalIdToPreparedMessage, __unused NSDictionary *messageInternalIdToQuickAckId)
|
||||
{
|
||||
if (_stage == MTDatacenterAuthStageReqDH && messageInternalIdToTransactionId[message.internalId] != nil && messageInternalIdToPreparedMessage[message.internalId] != nil)
|
||||
@@ -283,7 +285,7 @@ typedef enum {
|
||||
[setDhParamsBuffer appendBytes:_serverNonce.bytes length:_serverNonce.length];
|
||||
[setDhParamsBuffer appendTLBytes:_encryptedClientData];
|
||||
|
||||
MTOutgoingMessage *message = [[MTOutgoingMessage alloc] initWithData:setDhParamsBuffer.data metadata:@"setDhParams" messageId:_currentStageMessageId messageSeqNo:_currentStageMessageSeqNo];
|
||||
MTOutgoingMessage *message = [[MTOutgoingMessage alloc] initWithData:setDhParamsBuffer.data metadata:@"setDhParams" shortMetadata:@"setDhParams" messageId:_currentStageMessageId messageSeqNo:_currentStageMessageSeqNo];
|
||||
return [[MTMessageTransaction alloc] initWithMessagePayload:@[message] prepared:nil failed:nil completion:^(NSDictionary *messageInternalIdToTransactionId, NSDictionary *messageInternalIdToPreparedMessage, __unused NSDictionary *messageInternalIdToQuickAckId)
|
||||
{
|
||||
if (_stage == MTDatacenterAuthStageKeyVerification && messageInternalIdToTransactionId[message.internalId] != nil && messageInternalIdToPreparedMessage[message.internalId] != nil)
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
NSData *exportAuthRequestData = nil;
|
||||
MTExportAuthorizationResponseParser responseParser = [[context.serialization exportAuthorization:(int32_t)_destinationDatacenterId data:&exportAuthRequestData] copy];
|
||||
|
||||
[request setPayload:exportAuthRequestData metadata:@"exportAuthorization" responseParser:responseParser];
|
||||
[request setPayload:exportAuthRequestData metadata:@"exportAuthorization" shortMetadata:@"exportAuthorization" responseParser:responseParser];
|
||||
|
||||
__weak MTDatacenterTransferAuthAction *weakSelf = self;
|
||||
[request setCompleted:^(MTExportedAuthorizationData *result, __unused NSTimeInterval timestamp, id error)
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
NSData *importAuthRequestData = [_context.serialization importAuthorization:dataId bytes:authData];
|
||||
|
||||
[request setPayload:importAuthRequestData metadata:@"importAuthorization" responseParser:^id (NSData *data)
|
||||
[request setPayload:importAuthRequestData metadata:@"importAuthorization" shortMetadata:@"importAuthorization" responseParser:^id (NSData *data)
|
||||
{
|
||||
return @true;
|
||||
}];
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
NSData *getConfigData = nil;
|
||||
MTRequestDatacenterAddressListParser responseParser = [_context.serialization requestDatacenterAddressWithData:&getConfigData];
|
||||
|
||||
[request setPayload:getConfigData metadata:@"getConfig" responseParser:responseParser];
|
||||
[request setPayload:getConfigData metadata:@"getConfig" shortMetadata:@"getConfig" responseParser:responseParser];
|
||||
|
||||
__weak MTDiscoverDatacenterAddressAction *weakSelf = self;
|
||||
[request setCompleted:^(MTDatacenterAddressListData *result, __unused NSTimeInterval completionTimestamp, id error)
|
||||
|
||||
@@ -11,7 +11,9 @@ extern "C" {
|
||||
|
||||
bool MTLogEnabled();
|
||||
void MTLog(NSString *format, ...);
|
||||
void MTShortLog(NSString *format, ...);
|
||||
void MTLogSetLoggingFunction(void (*function)(NSString *, va_list args));
|
||||
void MTLogSetShortLoggingFunction(void (*function)(NSString *, va_list args));
|
||||
void MTLogSetEnabled(bool);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#import "MTLogging.h"
|
||||
|
||||
static void (*loggingFunction)(NSString *, va_list args) = NULL;
|
||||
static void (*shortLoggingFunction)(NSString *, va_list args) = NULL;
|
||||
static bool MTLogEnabledValue = true;
|
||||
|
||||
bool MTLogEnabled() {
|
||||
@@ -18,10 +19,23 @@ void MTLog(NSString *format, ...) {
|
||||
va_end(L);
|
||||
}
|
||||
|
||||
void MTShortLog(NSString *format, ...) {
|
||||
va_list L;
|
||||
va_start(L, format);
|
||||
if (shortLoggingFunction != NULL) {
|
||||
shortLoggingFunction(format, L);
|
||||
}
|
||||
va_end(L);
|
||||
}
|
||||
|
||||
void MTLogSetLoggingFunction(void (*function)(NSString *, va_list args)) {
|
||||
loggingFunction = function;
|
||||
}
|
||||
|
||||
void MTLogSetShortLoggingFunction(void (*function)(NSString *, va_list args)) {
|
||||
shortLoggingFunction = function;
|
||||
}
|
||||
|
||||
void MTLogSetEnabled(bool enabled) {
|
||||
MTLogEnabledValue = enabled;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
@property (nonatomic, strong, readonly) id internalId;
|
||||
@property (nonatomic, strong, readonly) NSData *data;
|
||||
@property (nonatomic, strong, readonly) id metadata;
|
||||
@property (nonatomic, strong, readonly) id shortMetadata;
|
||||
@property (nonatomic, readonly) int64_t messageId;
|
||||
@property (nonatomic, readonly) int32_t messageSeqNo;
|
||||
@property (nonatomic) bool requiresConfirmation;
|
||||
@@ -16,7 +17,7 @@
|
||||
|
||||
@property (nonatomic, copy) id (^dynamicDecorator)(NSData *currentData, NSMutableDictionary *messageInternalIdToPreparedMessage);
|
||||
|
||||
- (instancetype)initWithData:(NSData *)data metadata:(id)metadata;
|
||||
- (instancetype)initWithData:(NSData *)data metadata:(id)metadata messageId:(int64_t)messageId messageSeqNo:(int32_t)messageSeqNo;
|
||||
- (instancetype)initWithData:(NSData *)data metadata:(id)metadata shortMetadata:(id)shortMetadata;
|
||||
- (instancetype)initWithData:(NSData *)data metadata:(id)metadata shortMetadata:(id)shortMetadata messageId:(int64_t)messageId messageSeqNo:(int32_t)messageSeqNo;
|
||||
|
||||
@end
|
||||
|
||||
@@ -46,12 +46,12 @@
|
||||
|
||||
@implementation MTOutgoingMessage
|
||||
|
||||
- (instancetype)initWithData:(NSData *)data metadata:(id)metadata
|
||||
- (instancetype)initWithData:(NSData *)data metadata:(id)metadata shortMetadata:(id)shortMetadata
|
||||
{
|
||||
return [self initWithData:data metadata:metadata messageId:0 messageSeqNo:0];
|
||||
return [self initWithData:data metadata:metadata shortMetadata:shortMetadata messageId:0 messageSeqNo:0];
|
||||
}
|
||||
|
||||
- (instancetype)initWithData:(NSData *)data metadata:(id)metadata messageId:(int64_t)messageId messageSeqNo:(int32_t)messageSeqNo
|
||||
- (instancetype)initWithData:(NSData *)data metadata:(id)metadata shortMetadata:(id)shortMetadata messageId:(int64_t)messageId messageSeqNo:(int32_t)messageSeqNo
|
||||
{
|
||||
self = [super init];
|
||||
if (self != nil)
|
||||
@@ -59,6 +59,7 @@
|
||||
_internalId = [[MTOutgoingMessageInternalId alloc] init];
|
||||
_data = data;
|
||||
_metadata = metadata;
|
||||
_shortMetadata = shortMetadata;
|
||||
_messageId = messageId;
|
||||
_messageSeqNo = messageSeqNo;
|
||||
_requiresConfirmation = true;
|
||||
|
||||
@@ -196,6 +196,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p pause]", self, _context);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p pause]", self, _context);
|
||||
|
||||
_mtState |= MTProtoStatePaused;
|
||||
|
||||
@@ -214,6 +215,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p resume]", self, _context);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p resume]", self, _context);
|
||||
|
||||
[self setMtState:_mtState & (~MTProtoStatePaused)];
|
||||
|
||||
@@ -338,12 +340,14 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p authInfoForDatacenterWithId:%d is nil]", self, _context, _datacenterId);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p authInfoForDatacenterWithId:%d is nil]", self, _context, _datacenterId);
|
||||
if ((_mtState & MTProtoStateAwaitingDatacenterAuthorization) == 0) {
|
||||
[self setMtState:_mtState | MTProtoStateAwaitingDatacenterAuthorization];
|
||||
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p requesting authInfo for %d]", self, _context, _datacenterId);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p requesting authInfo for %d]", self, _context, _datacenterId);
|
||||
[_context authInfoForDatacenterWithIdRequired:_datacenterId isCdn:_cdn];
|
||||
}
|
||||
}/* else if (!_useUnauthorizedMode && _useTempAuthKeys && [[_context authInfoForDatacenterWithId:_datacenterId] tempAuthKeyWithType:tempAuthKeyType] == nil) {
|
||||
@@ -377,6 +381,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p resetting session]", self, _context);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p resetting session]", self, _context);
|
||||
|
||||
if (_authInfo.authKeyId != 0 && !self.cdn) {
|
||||
[_context scheduleSessionCleanupForAuthKeyId:_authInfo.authKeyId sessionInfo:_sessionInfo];
|
||||
@@ -426,6 +431,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p begin time sync]", self, _context);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p begin time sync]", self, _context);
|
||||
|
||||
MTTimeSyncMessageService *timeSyncService = [[MTTimeSyncMessageService alloc] init];
|
||||
timeSyncService.delegate = self;
|
||||
@@ -458,6 +464,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p service tasks state: %d, resend: %s]", self, _context, _mtState, haveResendMessagesPending ? "yes" : "no");
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p service tasks state: %d, resend: %s]", self, _context, _mtState, haveResendMessagesPending ? "yes" : "no");
|
||||
|
||||
for (id<MTMessageService> messageService in _messageServices)
|
||||
{
|
||||
@@ -508,6 +515,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p service tasks state: %d, resend: %s]", self, _context, _mtState, "yes");
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p service tasks state: %d, resend: %s]", self, _context, _mtState, "yes");
|
||||
|
||||
for (id<MTMessageService> messageService in _messageServices)
|
||||
{
|
||||
@@ -560,6 +568,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p service tasks state: %d, resend: %s]", self, _context, _mtState, "no");
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p service tasks state: %d, resend: %s]", self, _context, _mtState, "no");
|
||||
|
||||
for (id<MTMessageService> messageService in _messageServices)
|
||||
{
|
||||
@@ -859,6 +868,11 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
return [[NSString alloc] initWithFormat:@"%@ (%" PRId64 "/%" PRId32 ")", message.metadata, message.messageId == 0 ? messageId : message.messageId, message.messageSeqNo == 0 ? message.messageSeqNo : messageSeqNo];
|
||||
}
|
||||
|
||||
- (NSString *)outgoingShortMessageDescription:(MTOutgoingMessage *)message messageId:(int64_t)messageId messageSeqNo:(int32_t)messageSeqNo
|
||||
{
|
||||
return [[NSString alloc] initWithFormat:@"%@ (%" PRId64 "/%" PRId32 ")", message.shortMetadata, message.messageId == 0 ? messageId : message.messageId, message.messageSeqNo == 0 ? message.messageSeqNo : messageSeqNo];
|
||||
}
|
||||
|
||||
- (NSString *)incomingMessageDescription:(MTIncomingMessage *)message
|
||||
{
|
||||
return [[NSString alloc] initWithFormat:@"%@ (%" PRId64", %" PRId64"/%" PRId64")", message.body, message.messageId, message.authKeyId, message.sessionId];
|
||||
@@ -938,7 +952,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
[msgsAckBuffer appendInt64:(int64_t)[nMessageId longLongValue]];
|
||||
}
|
||||
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:msgsAckBuffer.data metadata:@"msgsAck"];
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:msgsAckBuffer.data metadata:@"msgsAck" shortMetadata:@"msgsAck"];
|
||||
outgoingMessage.requiresConfirmation = false;
|
||||
|
||||
[messageTransactions addObject:[[MTMessageTransaction alloc] initWithMessagePayload:@[outgoingMessage] prepared:nil failed:nil completion:^(__unused NSDictionary *messageInternalIdToTransactionId, NSDictionary *messageInternalIdToPreparedMessage, __unused NSDictionary *messageInternalIdToQuickAckId)
|
||||
@@ -1013,6 +1027,8 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
}*/
|
||||
MTLog(@"[MTProto#%p@%p preparing %@]", self, _context, messageDescription);
|
||||
}
|
||||
NSString *shortMessageDescription = [self outgoingShortMessageDescription:outgoingMessage messageId:messageId messageSeqNo:messageSeqNo];
|
||||
MTShortLog(@"[MTProto#%p@%p preparing %@]", self, _context, shortMessageDescription);
|
||||
|
||||
if (!monotonityViolated || _useUnauthorizedMode)
|
||||
{
|
||||
@@ -1057,6 +1073,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p client message id monotonity violated]", self, _context);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p client message id monotonity violated]", self, _context);
|
||||
|
||||
[self resetSessionInfo];
|
||||
}
|
||||
@@ -1300,6 +1317,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p sending time fix ping (%" PRId64 "/%" PRId32 ", %" PRId64 ")]", self, _context, timeFixMessageId, timeFixSeqNo, _sessionInfo.sessionId);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p sending time fix ping (%" PRId64 "/%" PRId32 ", %" PRId64 ")]", self, _context, timeFixMessageId, timeFixSeqNo, _sessionInfo.sessionId);
|
||||
|
||||
[decryptedOs writeInt64:[_authInfo authSaltForMessageId:timeFixMessageId]]; // salt
|
||||
[decryptedOs writeInt64:_sessionInfo.sessionId];
|
||||
@@ -1425,6 +1443,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p sending temp key binding message (%" PRId64 "/%" PRId32 ") for %lld (%d)]", self, _context, bindingMessageId, bindingSeqNo, effectiveTempAuthKey.authKeyId, (int)tempAuthKeyType);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p sending temp key binding message (%" PRId64 "/%" PRId32 ") for %lld (%d)]", self, _context, bindingMessageId, bindingSeqNo, effectiveTempAuthKey.authKeyId, (int)tempAuthKeyType);
|
||||
|
||||
[decryptedOs writeInt64:[_authInfo authSaltForMessageId:bindingMessageId]];
|
||||
[decryptedOs writeInt64:_sessionInfo.sessionId];
|
||||
@@ -1545,6 +1564,7 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64;
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@" container (%" PRId64 ") of (%@), in %" PRId64 "", containerMessageId, idsString, sessionInfo.sessionId);
|
||||
}
|
||||
MTShortLog(@" container (%" PRId64 ") of (%@), in %" PRId64 "", containerMessageId, idsString, sessionInfo.sessionId);
|
||||
}
|
||||
|
||||
[decryptedOs writeInt64:salt];
|
||||
@@ -2032,6 +2052,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) {
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p protocol error %" PRId32 "", self, _context, protocolErrorCode);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p protocol error %" PRId32 "", self, _context, protocolErrorCode);
|
||||
|
||||
if (decodeResult != nil)
|
||||
decodeResult(transactionId, false);
|
||||
@@ -2083,6 +2104,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) {
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p received AUTH_KEY_PERM_EMPTY]", self, _context);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p received AUTH_KEY_PERM_EMPTY]", self, _context);
|
||||
[self handleMissingKey:scheme.address];
|
||||
[self requestSecureTransportReset];
|
||||
|
||||
@@ -2095,6 +2117,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) {
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p incoming data parse error, header: %d:%@]", self, _context, (int)decryptedData.length, dumpHexString(decryptedData, 128));
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p incoming data parse error, header: %d:%@]", self, _context, (int)decryptedData.length, dumpHexString(decryptedData, 128));
|
||||
|
||||
[_context reportTransportSchemeFailureForDatacenterId:_datacenterId transportScheme:scheme];
|
||||
[self transportTransactionsMayHaveFailed:transport transactionIds:@[transactionId]];
|
||||
@@ -2116,6 +2139,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) {
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p couldn't decrypt incoming data]", self, _context);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p couldn't decrypt incoming data]", self, _context);
|
||||
|
||||
if (decodeResult != nil)
|
||||
decodeResult(transactionId, false);
|
||||
@@ -2398,6 +2422,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) {
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p received duplicate message %" PRId64 "]", self, _context, incomingMessage.messageId);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p received duplicate message %" PRId64 "]", self, _context, incomingMessage.messageId);
|
||||
[_sessionInfo scheduleMessageConfirmation:incomingMessage.messageId size:incomingMessage.size];
|
||||
|
||||
if ([_sessionInfo scheduledMessageConfirmationsExceedSize:MTMaxUnacknowledgedMessageSize orCount:MTMaxUnacknowledgedMessageCount])
|
||||
@@ -2529,6 +2554,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) {
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p detailed info %" PRId64 " is for %" PRId64 "", self, _context, incomingMessage.messageId, requestMessageId);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p detailed info %" PRId64 " is for %" PRId64 "", self, _context, incomingMessage.messageId, requestMessageId);
|
||||
|
||||
for (id<MTMessageService> messageService in _messageServices)
|
||||
{
|
||||
@@ -2551,6 +2577,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) {
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p will request message %" PRId64 "", self, _context, detailedInfoMessage.responseMessageId);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p will request message %" PRId64 "", self, _context, detailedInfoMessage.responseMessageId);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2639,6 +2666,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) {
|
||||
if (MTLogEnabled()) {
|
||||
MTLog(@"[MTProto#%p@%p bindTempAuthKey error %@]", self, _context, rpcError);
|
||||
}
|
||||
MTShortLog(@"[MTProto#%p@%p bindTempAuthKey error %@]", self, _context, rpcError);
|
||||
|
||||
[self requestTransportTransaction];
|
||||
}
|
||||
|
||||
@@ -73,3 +73,4 @@ FOUNDATION_EXPORT const unsigned char MtProtoKitVersionString[];
|
||||
#import <MTProtoKit/AFURLConnectionOperation.h>
|
||||
#import <MTProtoKit/AFHTTPRequestOperation.h>
|
||||
#import <MTProtoKit/MTProxyConnectivity.h>
|
||||
#import <MTProtoKit/MTGzip.h>
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
@property (nonatomic, strong, readonly) NSData *payload;
|
||||
@property (nonatomic, strong, readonly) id metadata;
|
||||
@property (nonatomic, strong, readonly) id shortMetadata;
|
||||
@property (nonatomic, strong, readonly) id (^responseParser)(NSData *);
|
||||
|
||||
@property (nonatomic, strong) NSArray *decorators;
|
||||
@@ -29,6 +30,6 @@
|
||||
@property (nonatomic, copy) bool (^shouldContinueExecutionWithErrorContext)(MTRequestErrorContext *errorContext);
|
||||
@property (nonatomic, copy) bool (^shouldDependOnRequest)(MTRequest *anotherRequest);
|
||||
|
||||
- (void)setPayload:(NSData *)payload metadata:(id)metadata responseParser:(id (^)(NSData *))responseParser;
|
||||
- (void)setPayload:(NSData *)payload metadata:(id)metadata shortMetadata:(id)shortMetadata responseParser:(id (^)(NSData *))responseParser;
|
||||
|
||||
@end
|
||||
|
||||
@@ -59,10 +59,11 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setPayload:(NSData *)payload metadata:(id)metadata responseParser:(id (^)(NSData *))responseParser
|
||||
- (void)setPayload:(NSData *)payload metadata:(id)metadata shortMetadata:(id)shortMetadata responseParser:(id (^)(NSData *))responseParser
|
||||
{
|
||||
_payload = payload;
|
||||
_metadata = metadata;
|
||||
_shortMetadata = shortMetadata;
|
||||
_responseParser = [responseParser copy];
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
@property (nonatomic, strong) MTApiEnvironment *apiEnvironment;
|
||||
@property (nonatomic) bool forceBackgroundRequests;
|
||||
|
||||
@property (nonatomic, copy) void (^didReceiveSoftAuthResetError)(void);
|
||||
|
||||
- (instancetype)initWithContext:(MTContext *)context;
|
||||
|
||||
|
||||
@@ -276,7 +276,7 @@
|
||||
MTRequest *request = [[MTRequest alloc] init];
|
||||
__autoreleasing NSData *noopData = nil;
|
||||
MTRequestNoopParser responseParser = [[_context serialization] requestNoop:&noopData];
|
||||
[request setPayload:noopData metadata:@"noop" responseParser:responseParser];
|
||||
[request setPayload:noopData metadata:@"noop" shortMetadata:@"noop" responseParser:responseParser];
|
||||
|
||||
[request setCompleted:^(__unused id result, __unused NSTimeInterval timestamp, __unused id error) {
|
||||
}];
|
||||
@@ -416,7 +416,7 @@
|
||||
messageSeqNo = request.requestContext.messageSeqNo;
|
||||
}
|
||||
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:[self decorateRequestData:request initializeApi:requestsWillInitializeApi unresolvedDependencyOnRequestInternalId:&autoreleasingUnresolvedDependencyOnRequestInternalId] metadata:request.metadata messageId:messageId messageSeqNo:messageSeqNo];
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:[self decorateRequestData:request initializeApi:requestsWillInitializeApi unresolvedDependencyOnRequestInternalId:&autoreleasingUnresolvedDependencyOnRequestInternalId] metadata:request.metadata shortMetadata:request.shortMetadata messageId:messageId messageSeqNo:messageSeqNo];
|
||||
outgoingMessage.needsQuickAck = request.acknowledgementReceived != nil;
|
||||
outgoingMessage.hasHighPriority = request.hasHighPriority;
|
||||
|
||||
@@ -460,7 +460,8 @@
|
||||
[dropAnswerBuffer appendInt32:(int32_t)0x58e4a740];
|
||||
[dropAnswerBuffer appendInt64:dropContext.dropMessageId];
|
||||
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:dropAnswerBuffer.data metadata:[NSString stringWithFormat:@"dropAnswer for %" PRId64, dropContext.dropMessageId] messageId:dropContext.messageId messageSeqNo:dropContext.messageSeqNo];
|
||||
NSString *messageDecription = [NSString stringWithFormat:@"dropAnswer for %" PRId64, dropContext.dropMessageId];
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:dropAnswerBuffer.data metadata:messageDecription shortMetadata:messageDecription messageId:dropContext.messageId messageSeqNo:dropContext.messageSeqNo];
|
||||
outgoingMessage.requiresConfirmation = false;
|
||||
dropMessageIdToMessageInternalId[@(dropContext.dropMessageId)] = outgoingMessage.internalId;
|
||||
[messages addObject:outgoingMessage];
|
||||
@@ -704,9 +705,11 @@
|
||||
authInfo = [authInfo withUpdatedAuthKeyAttributes:authKeyAttributes];
|
||||
[_context updateAuthInfoForDatacenterWithId:mtProto.datacenterId authInfo:authInfo];
|
||||
}];
|
||||
} else if (rpcError.errorCode == 406) {
|
||||
if (_didReceiveSoftAuthResetError) {
|
||||
_didReceiveSoftAuthResetError();
|
||||
}
|
||||
}
|
||||
|
||||
//#warning TODO other service errors
|
||||
}
|
||||
|
||||
request.requestContext = nil;
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
NSData *resentMessagesRequestData = resendRequestBuffer.data;
|
||||
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:resentMessagesRequestData metadata:@"resendMessages"];
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:resentMessagesRequestData metadata:@"resendMessages" shortMetadata:@"resendMessages"];
|
||||
outgoingMessage.requiresConfirmation = false;
|
||||
|
||||
return [[MTMessageTransaction alloc] initWithMessagePayload:@[outgoingMessage] prepared:nil failed:nil completion:^(NSDictionary *messageInternalIdToTransactionId, NSDictionary *messageInternalIdToPreparedMessage, __unused NSDictionary *messageInternalIdToQuickAckId)
|
||||
|
||||
@@ -620,7 +620,7 @@ static const NSTimeInterval MTTcpTransportSleepWatchdogTimeout = 60.0;
|
||||
[pingBuffer appendInt32:(int32_t)0x7abe77ec];
|
||||
[pingBuffer appendInt64:randomId];
|
||||
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:pingBuffer.data metadata:@"ping"];
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:pingBuffer.data metadata:@"ping" shortMetadata:@"ping"];
|
||||
outgoingMessage.requiresConfirmation = false;
|
||||
|
||||
__weak MTTcpTransport *weakSelf = self;
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
[getFutureSaltsBuffer appendInt32:(int32_t)0xb921bd04];
|
||||
[getFutureSaltsBuffer appendInt32:_futureSalts.count != 0 ? 1 : 32];
|
||||
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:getFutureSaltsBuffer.data metadata:@"getFutureSalts"];
|
||||
MTOutgoingMessage *outgoingMessage = [[MTOutgoingMessage alloc] initWithData:getFutureSaltsBuffer.data metadata:@"getFutureSalts" shortMetadata:@"getFutureSalts"];
|
||||
|
||||
return [[MTMessageTransaction alloc] initWithMessagePayload:@[outgoingMessage] prepared:nil failed:nil completion:^(NSDictionary *messageInternalIdToTransactionId, NSDictionary *messageInternalIdToPreparedMessage, __unused NSDictionary *messageInternalIdToQuickAckId)
|
||||
{
|
||||
|
||||
@@ -28,6 +28,12 @@
|
||||
D0119CCC20CAD65D00895300 /* PingFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = D0119CC820CAD65D00895300 /* PingFoundation.m */; };
|
||||
D0119CCD20CAD65D00895300 /* PingFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = D0119CC820CAD65D00895300 /* PingFoundation.m */; };
|
||||
D0119CCE20CAD65D00895300 /* PingFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = D0119CC820CAD65D00895300 /* PingFoundation.m */; };
|
||||
D015E018225CD19E00CB9E8A /* MTGzip.h in Headers */ = {isa = PBXBuildFile; fileRef = D015E016225CD19E00CB9E8A /* MTGzip.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D015E019225CD19E00CB9E8A /* MTGzip.h in Headers */ = {isa = PBXBuildFile; fileRef = D015E016225CD19E00CB9E8A /* MTGzip.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D015E01A225CD19E00CB9E8A /* MTGzip.h in Headers */ = {isa = PBXBuildFile; fileRef = D015E016225CD19E00CB9E8A /* MTGzip.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D015E01B225CD19E00CB9E8A /* MTGzip.m in Sources */ = {isa = PBXBuildFile; fileRef = D015E017225CD19E00CB9E8A /* MTGzip.m */; };
|
||||
D015E01C225CD19E00CB9E8A /* MTGzip.m in Sources */ = {isa = PBXBuildFile; fileRef = D015E017225CD19E00CB9E8A /* MTGzip.m */; };
|
||||
D015E01D225CD19E00CB9E8A /* MTGzip.m in Sources */ = {isa = PBXBuildFile; fileRef = D015E017225CD19E00CB9E8A /* MTGzip.m */; };
|
||||
D0185E722089D265005E1A6C /* MTProxyConnectivity.h in Headers */ = {isa = PBXBuildFile; fileRef = D0185E702089D265005E1A6C /* MTProxyConnectivity.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D0185E732089D265005E1A6C /* MTProxyConnectivity.h in Headers */ = {isa = PBXBuildFile; fileRef = D0185E702089D265005E1A6C /* MTProxyConnectivity.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
D0185E742089D265005E1A6C /* MTProxyConnectivity.h in Headers */ = {isa = PBXBuildFile; fileRef = D0185E702089D265005E1A6C /* MTProxyConnectivity.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
@@ -617,6 +623,8 @@
|
||||
D0119CC020CAD34800895300 /* MTConnectionProbing.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTConnectionProbing.m; sourceTree = "<group>"; };
|
||||
D0119CC720CAD65D00895300 /* PingFoundation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PingFoundation.h; sourceTree = "<group>"; };
|
||||
D0119CC820CAD65D00895300 /* PingFoundation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PingFoundation.m; sourceTree = "<group>"; };
|
||||
D015E016225CD19E00CB9E8A /* MTGzip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTGzip.h; sourceTree = "<group>"; };
|
||||
D015E017225CD19E00CB9E8A /* MTGzip.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTGzip.m; sourceTree = "<group>"; };
|
||||
D0185E702089D265005E1A6C /* MTProxyConnectivity.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTProxyConnectivity.h; sourceTree = "<group>"; };
|
||||
D0185E712089D265005E1A6C /* MTProxyConnectivity.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MTProxyConnectivity.m; sourceTree = "<group>"; };
|
||||
D020FAF81D994E3100F279AA /* MTHttpRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTHttpRequestOperation.h; path = MTProtoKit/MTHttpRequestOperation.h; sourceTree = "<group>"; };
|
||||
@@ -1085,6 +1093,8 @@
|
||||
D0119CC820CAD65D00895300 /* PingFoundation.m */,
|
||||
D0338737223BC115007A2CE4 /* MTPKCS.h */,
|
||||
D0338738223BC115007A2CE4 /* MTPKCS.m */,
|
||||
D015E016225CD19E00CB9E8A /* MTGzip.h */,
|
||||
D015E017225CD19E00CB9E8A /* MTGzip.m */,
|
||||
);
|
||||
name = Utils;
|
||||
sourceTree = "<group>";
|
||||
@@ -1523,6 +1533,7 @@
|
||||
D0CD981F1D74B99400F41187 /* MTResPqMessage.h in Headers */,
|
||||
D0CD98E81D75C0BB00F41187 /* MTMessageService.h in Headers */,
|
||||
D0B0DF621DD7E7A3003BA12D /* MTBag.h in Headers */,
|
||||
D015E019225CD19E00CB9E8A /* MTGzip.h in Headers */,
|
||||
D0CD98681D74B9E200F41187 /* MTContext.h in Headers */,
|
||||
D0CD985B1D74B9BF00F41187 /* MTSetClientDhParamsResponseMessage.h in Headers */,
|
||||
D0CD98741D74BA0100F41187 /* MTDiscoverDatacenterAddressAction.h in Headers */,
|
||||
@@ -1699,6 +1710,7 @@
|
||||
D0D1A0421ADD983C007D9ED6 /* MTFutureSaltsMessage.h in Headers */,
|
||||
D0CB064B1ADC45B1005E298F /* MTRequest.h in Headers */,
|
||||
D010DB811D70B3B90012AD96 /* MTAes.h in Headers */,
|
||||
D015E018225CD19E00CB9E8A /* MTGzip.h in Headers */,
|
||||
D0CB062C1ADC4575005E298F /* MTDatacenterAuthMessageService.h in Headers */,
|
||||
D0CB061C1ADC4541005E298F /* MTInternalId.h in Headers */,
|
||||
);
|
||||
@@ -1723,6 +1735,7 @@
|
||||
D0CD982D1D74B99500F41187 /* MTResPqMessage.h in Headers */,
|
||||
D0CD98E91D75C0BB00F41187 /* MTMessageService.h in Headers */,
|
||||
D0B0DF631DD7E7A4003BA12D /* MTBag.h in Headers */,
|
||||
D015E01A225CD19E00CB9E8A /* MTGzip.h in Headers */,
|
||||
D0CD98691D74B9E300F41187 /* MTContext.h in Headers */,
|
||||
D0CD985F1D74B9BF00F41187 /* MTSetClientDhParamsResponseMessage.h in Headers */,
|
||||
D0CD98751D74BA0100F41187 /* MTDiscoverDatacenterAddressAction.h in Headers */,
|
||||
@@ -1910,16 +1923,16 @@
|
||||
};
|
||||
D079AB961AF39B8000076F59 = {
|
||||
CreatedOnToolsVersion = 6.3.1;
|
||||
LastSwiftMigration = 0930;
|
||||
LastSwiftMigration = 1010;
|
||||
};
|
||||
D0CB05F61ADC4483005E298F = {
|
||||
CreatedOnToolsVersion = 6.3;
|
||||
LastSwiftMigration = 0930;
|
||||
LastSwiftMigration = 1010;
|
||||
ProvisioningStyle = Manual;
|
||||
};
|
||||
D0D2250A1B4D817B0085E26D = {
|
||||
CreatedOnToolsVersion = 6.4;
|
||||
LastSwiftMigration = 0930;
|
||||
LastSwiftMigration = 1010;
|
||||
ProvisioningStyle = Manual;
|
||||
};
|
||||
D0D225141B4D817B0085E26D = {
|
||||
@@ -2090,6 +2103,7 @@
|
||||
D0CD988E1D74BA5900F41187 /* MTDatacenterAddress.m in Sources */,
|
||||
D0CD98521D74B9B700F41187 /* MTSetClientDhParamsResponseMessage.m in Sources */,
|
||||
D0C932271E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m in Sources */,
|
||||
D015E01C225CD19E00CB9E8A /* MTGzip.m in Sources */,
|
||||
D0CAF2CF1D75E25B0011F558 /* MTSignal.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -2189,6 +2203,7 @@
|
||||
D0D1A0631ADD983C007D9ED6 /* MTServerDhInnerDataMessage.m in Sources */,
|
||||
D0D1A0571ADD983C007D9ED6 /* MTNewSessionCreatedMessage.m in Sources */,
|
||||
D0C932261E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m in Sources */,
|
||||
D015E01B225CD19E00CB9E8A /* MTGzip.m in Sources */,
|
||||
D0CAF2CC1D75E24C0011F558 /* MTSignal.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -2288,6 +2303,7 @@
|
||||
D0CD98931D74BA5A00F41187 /* MTDatacenterAddress.m in Sources */,
|
||||
D0CD98571D74B9B700F41187 /* MTSetClientDhParamsResponseMessage.m in Sources */,
|
||||
D0C932281E095D6A0074F044 /* MTNetworkUsageCalculationInfo.m in Sources */,
|
||||
D015E01D225CD19E00CB9E8A /* MTGzip.m in Sources */,
|
||||
D0CAF2D01D75E25B0011F558 /* MTSignal.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
||||
@@ -75,3 +75,4 @@ FOUNDATION_EXPORT const unsigned char MtProtoKitDynamicVersionString[];
|
||||
#import <MTProtoKitDynamic/AFHTTPRequestOperation.h>
|
||||
#import <MTProtoKitDynamic/MTProxyConnectivity.h>
|
||||
#import <MTProtoKitDynamic/MTPKCS.h>
|
||||
#import <MTProtoKitDynamic/MTGzip.h>
|
||||
|
||||
@@ -74,3 +74,4 @@ FOUNDATION_EXPORT const unsigned char MtProtoKitMacVersionString[];
|
||||
#import <MtProtoKitMac/AFURLConnectionOperation.h>
|
||||
#import <MtProtoKitMac/AFHTTPRequestOperation.h>
|
||||
#import <MTProtoKitMac/MTProxyConnectivity.h>
|
||||
#import <MTProtoKitMac/MTGzip.h>
|
||||
|
||||
Reference in New Issue
Block a user