Fixing issue with identity key change messages deletion.

When a key change is accepted, we iterate over the list of messages
that are waiting for decryption. This commit fixes an issue with error
messages not being deleted after message is processed for decryption.
pull/1/head
Frederic Jacobs 10 years ago
parent 499cdfa56f
commit a389344e0a

@ -41,7 +41,7 @@
if (self.errorType != TSErrorMessageWrongTrustedIdentityKey || !self.pushSignal) {
return;
}
TSStorageManager *storage = [TSStorageManager sharedManager];
IncomingPushMessageSignal *signal = [IncomingPushMessageSignal parseFromData:self.pushSignal];
PreKeyWhisperMessage *message = [[PreKeyWhisperMessage alloc] initWithData:signal.message];
@ -51,7 +51,7 @@
[[TSMessagesManager sharedManager] handleMessageSignal:signal];
__block NSMutableSet *messagesToDecrypt = [NSMutableSet set];
__block NSMutableSet *messagesToDecrypt = [NSMutableSet set];
[[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[[transaction ext:TSMessageDatabaseViewExtensionName]enumerateKeysAndObjectsInGroup:self.uniqueThreadId withOptions:NSEnumerationReverse usingBlock:^(NSString *collection, NSString *key, id object, NSUInteger index, BOOL *stop) {
@ -66,16 +66,22 @@
NSData *newKeyCandidate = [pkwm.identityKey removeKeyType];
if ([newKeyCandidate isEqualToData:newKey]) {
[messagesToDecrypt addObject:invalidMessageSignal];
[messagesToDecrypt addObject:invalidKeyMessage];
}
}
}];
[self removeWithTransaction:transaction];
}];
for (IncomingPushMessageSignal *aSignal in messagesToDecrypt) {
[[TSMessagesManager sharedManager] handleMessageSignal:aSignal];
for (TSInvalidIdentityKeyErrorMessage *errorMessage in messagesToDecrypt) {
[[TSMessagesManager sharedManager] handleMessageSignal:[IncomingPushMessageSignal parseFromData:errorMessage.pushSignal]];
[[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
[errorMessage removeWithTransaction:transaction];
}];
}
}
- (NSString *)newIdentityKey{

Loading…
Cancel
Save