Added compact logging

This commit is contained in:
Peter
2019-04-09 16:16:29 +01:00
parent 579d7f6264
commit 233f3ec8ea
22 changed files with 164 additions and 26 deletions

View File

@@ -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
View 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
View 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

View File

@@ -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)

View File

@@ -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;
}];

View File

@@ -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)

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;

View File

@@ -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];
}

View File

@@ -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>

View File

@@ -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

View File

@@ -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];
}

View File

@@ -29,6 +29,8 @@
@property (nonatomic, strong) MTApiEnvironment *apiEnvironment;
@property (nonatomic) bool forceBackgroundRequests;
@property (nonatomic, copy) void (^didReceiveSoftAuthResetError)(void);
- (instancetype)initWithContext:(MTContext *)context;

View File

@@ -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;

View File

@@ -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)

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -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;

View File

@@ -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>

View File

@@ -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>