Fix closed group session handling bug

pull/220/head
nielsandriesse 5 years ago
parent ca888c83ef
commit bbe41f9e82

@ -90,11 +90,11 @@ public final class MultiDeviceProtocol : NSObject {
/// See [Multi Device Message Sending](https://github.com/loki-project/session-protocol-docs/wiki/Multi-Device-Message-Sending) for more information. /// See [Multi Device Message Sending](https://github.com/loki-project/session-protocol-docs/wiki/Multi-Device-Message-Sending) for more information.
@objc(sendMessageToDestinationAndLinkedDevices:in:) @objc(sendMessageToDestinationAndLinkedDevices:in:)
public static func sendMessageToDestinationAndLinkedDevices(_ messageSend: OWSMessageSend, in transaction: YapDatabaseReadTransaction) { public static func sendMessageToDestinationAndLinkedDevices(_ messageSend: OWSMessageSend, in transaction: YapDatabaseReadTransaction) {
if !messageSend.isUDSend && messageSend.recipient.recipientId() != getUserHexEncodedPublicKey() { // if !messageSend.isUDSend && messageSend.recipient.recipientId() != getUserHexEncodedPublicKey() {
#if DEBUG // #if DEBUG
preconditionFailure() // preconditionFailure()
#endif // #endif
} // }
let message = messageSend.message let message = messageSend.message
let messageSender = SSKEnvironment.shared.messageSender let messageSender = SSKEnvironment.shared.messageSender
if !isMultiDeviceRequired(for: message) { if !isMultiDeviceRequired(for: message) {

@ -211,6 +211,13 @@ public final class SessionManagementProtocol : NSObject {
print("[Loki] Couldn't parse pre key bundle received from: \(sender).") print("[Loki] Couldn't parse pre key bundle received from: \(sender).")
return return
} }
if isSessionRequestMessage(protoContent.dataMessage),
let sentSessionRequestTimestamp = storage.getSessionRequestTimestamp(for: sender, in: transaction),
envelope.timestamp < NSDate.ows_millisecondsSince1970(for: sentSessionRequestTimestamp) {
// We sent a session request after this one was sent
print("[Loki] Ignoring session request from: \(sender).")
return
}
storage.setPreKeyBundle(preKeyBundle, forContact: sender, transaction: transaction) storage.setPreKeyBundle(preKeyBundle, forContact: sender, transaction: transaction)
} }

@ -487,7 +487,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
{ {
[self.udManager [self.udManager
ensureSenderCertificateWithSuccess:^(SMKSenderCertificate *senderCertificate) { ensureSenderCertificateWithSuccess:^(SMKSenderCertificate *senderCertificate) {
OWSAssertDebug(senderCertificate != nil); // OWSAssertDebug(senderCertificate != nil);
dispatch_async([OWSDispatch sendingQueue], ^{ dispatch_async([OWSDispatch sendingQueue], ^{
[self sendMessageToService:message senderCertificate:senderCertificate success:success failure:failure]; [self sendMessageToService:message senderCertificate:senderCertificate success:success failure:failure];
}); });
@ -928,8 +928,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
{ {
OWSAssertDebug(messageSend); OWSAssertDebug(messageSend);
OWSAssertDebug(messageSend.thread || [messageSend.message isKindOfClass:[OWSOutgoingSyncMessage class]]); OWSAssertDebug(messageSend.thread || [messageSend.message isKindOfClass:[OWSOutgoingSyncMessage class]]);
NSString *userPublicKey = OWSIdentityManager.sharedManager.identityKeyPair.hexEncodedPublicKey; // NSString *userPublicKey = OWSIdentityManager.sharedManager.identityKeyPair.hexEncodedPublicKey;
OWSAssertDebug(messageSend.isUDSend || [messageSend.recipient.recipientId isEqual:userPublicKey]); // OWSAssertDebug(messageSend.isUDSend || [messageSend.recipient.recipientId isEqual:userPublicKey]);
TSOutgoingMessage *message = messageSend.message; TSOutgoingMessage *message = messageSend.message;
SignalRecipient *recipient = messageSend.recipient; SignalRecipient *recipient = messageSend.recipient;

Loading…
Cancel
Save