// // Copyright (c) 2019 Open Whisper Systems. All rights reserved. // #import #import NS_ASSUME_NONNULL_BEGIN @class SNProtoEnvelope; typedef NS_ENUM(int32_t, TSErrorMessageType) { TSErrorMessageNoSession, // DEPRECATED: We no longer create TSErrorMessageWrongTrustedIdentityKey, but // persisted legacy messages could exist indefinitly. TSErrorMessageWrongTrustedIdentityKey, TSErrorMessageInvalidKeyException, // unused TSErrorMessageMissingKeyId, TSErrorMessageInvalidMessage, // unused TSErrorMessageDuplicateMessage, TSErrorMessageInvalidVersion, TSErrorMessageNonBlockingIdentityChange, TSErrorMessageUnknownContactBlockOffer, TSErrorMessageGroupCreationFailed, }; @interface TSErrorMessage : TSMessage - (instancetype)initMessageWithTimestamp:(uint64_t)timestamp inThread:(nullable TSThread *)thread messageBody:(nullable NSString *)body attachmentIds:(NSArray *)attachmentIds expiresInSeconds:(uint32_t)expiresInSeconds expireStartedAt:(uint64_t)expireStartedAt quotedMessage:(nullable TSQuotedMessage *)quotedMessage contactShare:(nullable OWSContact *)contact linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE; - (instancetype)initWithTimestamp:(uint64_t)timestamp inThread:(nullable TSThread *)thread messageBody:(nullable NSString *)body attachmentIds:(NSArray *)attachmentIds expiresInSeconds:(uint32_t)expiresInSeconds expireStartedAt:(uint64_t)expireStartedAt NS_UNAVAILABLE; - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER; - (instancetype)initWithTimestamp:(uint64_t)timestamp inThread:(nullable TSThread *)thread failedMessageType:(TSErrorMessageType)errorMessageType recipientId:(nullable NSString *)recipientId NS_DESIGNATED_INITIALIZER; + (instancetype)corruptedMessageWithEnvelope:(SNProtoEnvelope *)envelope withTransaction:(YapDatabaseReadWriteTransaction *)transaction; + (instancetype)corruptedMessageInUnknownThread; + (instancetype)invalidVersionWithEnvelope:(SNProtoEnvelope *)envelope withTransaction:(YapDatabaseReadWriteTransaction *)transaction; + (instancetype)invalidKeyExceptionWithEnvelope:(SNProtoEnvelope *)envelope withTransaction:(YapDatabaseReadWriteTransaction *)transaction; + (instancetype)missingSessionWithEnvelope:(SNProtoEnvelope *)envelope withTransaction:(YapDatabaseReadWriteTransaction *)transaction; + (instancetype)nonblockingIdentityChangeInThread:(TSThread *)thread recipientId:(NSString *)recipientId; @property (nonatomic, readonly) TSErrorMessageType errorType; @property (nullable, nonatomic, readonly) NSString *recipientId; @end NS_ASSUME_NONNULL_END