From 74ee433eec085c55878dc50c577b71e7eb9e10f3 Mon Sep 17 00:00:00 2001 From: 0x330a <92654767+0x330a@users.noreply.github.com> Date: Wed, 19 Jul 2023 00:02:43 +1000 Subject: [PATCH] fix: more merge conflict compile issues --- .../main/res/layout/view_control_message.xml | 1 - app/src/main/res/values/strings.xml | 1 - libsession-util/libsession-util | 2 +- .../messaging/jobs/BatchMessageReceiveJob.kt | 3 +- .../libsession/messaging/messages/Message.kt | 9 +- .../control/MessageRequestResponse.kt | 7 +- .../sending_receiving/MessageSender.kt | 104 +---- .../ReceivedMessageHandler.kt | 6 - libsignal/protobuf/SignalService.proto | 6 +- .../libsignal/protos/SignalServiceProtos.java | 381 +++++++++++++++++- 10 files changed, 383 insertions(+), 137 deletions(-) diff --git a/app/src/main/res/layout/view_control_message.xml b/app/src/main/res/layout/view_control_message.xml index 805683ace0..b3266eb215 100644 --- a/app/src/main/res/layout/view_control_message.xml +++ b/app/src/main/res/layout/view_control_message.xml @@ -31,7 +31,6 @@ Call button Settings - Disappearing messages timer Time selector Accept message request Decline message request diff --git a/libsession-util/libsession-util b/libsession-util/libsession-util index 7eb8702835..97084c69f8 160000 --- a/libsession-util/libsession-util +++ b/libsession-util/libsession-util @@ -1 +1 @@ -Subproject commit 7eb87028355bfc89950102c52d5b2927a25b2e22 +Subproject commit 97084c69f86e67c675095b48efacc86113ccebb0 diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt index 32b762ef60..53e9849991 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt @@ -27,6 +27,7 @@ import org.session.libsession.messaging.sending_receiving.handle import org.session.libsession.messaging.sending_receiving.handleOpenGroupReactions import org.session.libsession.messaging.sending_receiving.handleUnsendRequest import org.session.libsession.messaging.sending_receiving.handleVisibleMessage +import org.session.libsession.messaging.sending_receiving.updateExpiryIfNeeded import org.session.libsession.messaging.utilities.Data import org.session.libsession.messaging.utilities.SessionId import org.session.libsession.messaging.utilities.SodiumUtilities @@ -170,7 +171,7 @@ class BatchMessageReceiveJob( sentTimestamp // use sent timestamp here since that is technically the last one we have } } - valmessageId = MessageReceiver.handleVisibleMessage(message, proto, openGroupID, + val messageId = MessageReceiver.handleVisibleMessage(message, proto, openGroupID, threadId, runThreadUpdate = false, runProfileUpdate = true) diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt index cbd2faf8f3..5a5bcb8244 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt @@ -1,8 +1,8 @@ package org.session.libsession.messaging.messages import com.google.protobuf.ByteString -import org.session.libsession.messaging.MessagingModuleConfiguration import org.session.libsession.database.StorageProtocol +import org.session.libsession.messaging.MessagingModuleConfiguration import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate import org.session.libsession.messaging.messages.visible.VisibleMessage import org.session.libsession.utilities.GroupUtil @@ -22,7 +22,7 @@ abstract class Message { var specifiedTtl: Long? = null open val defaultTtl: Long = 14 * 24 * 60 * 60 * 1000 - val ttl: Long get() = specifiedTtl ?: defaultTtl + open val ttl: Long get() = specifiedTtl ?: defaultTtl open val isSelfSendValid: Boolean = false companion object { @@ -54,16 +54,17 @@ abstract class Message { dataMessage.group = groupProto.build() } - fun SignalServiceProtos.Content.Builder.setExpirationConfigurationIfNeeded(threadId: Long?) { + fun SignalServiceProtos.Content.Builder.setExpirationConfigurationIfNeeded(threadId: Long?): SignalServiceProtos.Content.Builder { val config = threadId?.let { MessagingModuleConfiguration.shared.storage.getExpirationConfiguration(it) } ?: run { expirationTimer = 0 - return + return this } if (config.isEnabled) { expirationTimer = config.durationSeconds lastDisappearingMessageChangeTimestamp = config.updatedTimestampMs expirationType = config.expirationType } + return this } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/control/MessageRequestResponse.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/control/MessageRequestResponse.kt index e4124c30b0..346488ec1d 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/control/MessageRequestResponse.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/control/MessageRequestResponse.kt @@ -18,9 +18,10 @@ class MessageRequestResponse(val isApproved: Boolean, var profile: Profile? = nu .setProfile(profileProto.build()) profile?.profileKey?.let { messageRequestResponseProto.profileKey = ByteString.copyFrom(it) } return try { - messageRequestResponseProto.messageRequestResponse = messageRequestResponseProto.build() - messageRequestResponseProto.setExpirationConfigurationIfNeeded(threadID) - messageRequestResponseProto.build() + SignalServiceProtos.Content.newBuilder() + .setMessageRequestResponse(messageRequestResponseProto.build()) + .setExpirationConfigurationIfNeeded(threadID) + .build() } catch (e: Exception) { Log.w(TAG, "Couldn't construct message request response proto from: $this") null diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt index c98d316fb2..d978e1a8bb 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt @@ -15,11 +15,6 @@ import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate import org.session.libsession.messaging.messages.control.MessageRequestResponse import org.session.libsession.messaging.messages.control.SharedConfigurationMessage import org.session.libsession.messaging.messages.control.UnsendRequest -import org.session.libsession.messaging.messages.control.CallMessage -import org.session.libsession.messaging.messages.control.ClosedGroupControlMessage -import org.session.libsession.messaging.messages.control.ConfigurationMessage -import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate -import org.session.libsession.messaging.messages.control.UnsendRequest import org.session.libsession.messaging.messages.visible.LinkPreview import org.session.libsession.messaging.messages.visible.Quote import org.session.libsession.messaging.messages.visible.VisibleMessage @@ -160,7 +155,7 @@ object MessageSender { return SnodeMessage( message.recipient!!, base64EncodedData, - message.ttl, + ttl = getSpecifiedTtl(message, isSyncMessage) ?: message.ttl, messageSendTime ) } @@ -190,98 +185,15 @@ object MessageSender { val namespaces: List = when { destination is Destination.ClosedGroup && forkInfo.defaultRequiresAuth() -> listOf(Namespace.UNAUTHENTICATED_CLOSED_GROUP) + destination is Destination.ClosedGroup - && forkInfo.hasNamespaces() -> listOf(Namespace.UNAUTHENTICATED_CLOSED_GROUP, Namespace.DEFAULT) - else -> listOf(Namespace.DEFAULT) - // DISAPPEARING-MESSAGES - val isSelfSend = (message.recipient == userPublicKey) - // Set the failure handler (need it here already for precondition failure handling) - fun handleFailure(error: Exception) { - handleFailedMessageSend(message, error, isSyncMessage) - if (destination is Destination.Contact && message is VisibleMessage && !isSelfSend) { - SnodeModule.shared.broadcaster.broadcast("messageFailed", message.sentTimestamp!!) - } - deferred.reject(error) - } - try { - when (destination) { - is Destination.Contact -> message.recipient = destination.publicKey - is Destination.ClosedGroup -> message.recipient = destination.groupPublicKey - else -> throw IllegalStateException("Destination should not be an open group.") - } - // Validate the message - if (!message.isValid()) { throw Error.InvalidMessage } - // Stop here if this is a self-send, unless it's: - // • a configuration message - // • a sync message - // • a closed group control message of type `new` - var isNewClosedGroupControlMessage = false - if (message is ClosedGroupControlMessage && message.kind is ClosedGroupControlMessage.Kind.New) isNewClosedGroupControlMessage = true - if (isSelfSend && message !is ConfigurationMessage && !isSyncMessage && !isNewClosedGroupControlMessage && message !is UnsendRequest) { - handleSuccessfulMessageSend(message, destination) - deferred.resolve(Unit) - return promise - } - // Attach the user's profile if needed - if (message is VisibleMessage) { - message.profile = storage.getUserProfile() - } - if (message is MessageRequestResponse) { - message.profile = storage.getUserProfile() - } - // Convert it to protobuf - val proto = message.toProto() ?: throw Error.ProtoConversionFailed - // Serialize the protobuf - val plaintext = PushTransportDetails.getPaddedMessageBody(proto.toByteArray()) - // Encrypt the serialized protobuf - val ciphertext = when (destination) { - is Destination.Contact -> MessageEncrypter.encrypt(plaintext, destination.publicKey) - is Destination.ClosedGroup -> { - val encryptionKeyPair = MessagingModuleConfiguration.shared.storage.getLatestClosedGroupEncryptionKeyPair(destination.groupPublicKey)!! - MessageEncrypter.encrypt(plaintext, encryptionKeyPair.hexEncodedPublicKey) - } - else -> throw IllegalStateException("Destination should not be open group.") - } - // Wrap the result - val kind: SignalServiceProtos.Envelope.Type - val senderPublicKey: String - // TODO: this might change in future for config messages - val forkInfo = SnodeAPI.forkInfo - val namespaces: List = when { - destination is Destination.ClosedGroup - && forkInfo.defaultRequiresAuth() -> listOf(Namespace.UNAUTHENTICATED_CLOSED_GROUP) - destination is Destination.ClosedGroup - && forkInfo.hasNamespaces() -> listOf(Namespace.UNAUTHENTICATED_CLOSED_GROUP, Namespace.DEFAULT) + && forkInfo.hasNamespaces() -> listOf( + Namespace.UNAUTHENTICATED_CLOSED_GROUP, + Namespace.DEFAULT + ) + else -> listOf(Namespace.DEFAULT) } - when (destination) { - is Destination.Contact -> { - kind = SignalServiceProtos.Envelope.Type.SESSION_MESSAGE - senderPublicKey = "" - } - is Destination.ClosedGroup -> { - kind = SignalServiceProtos.Envelope.Type.CLOSED_GROUP_MESSAGE - senderPublicKey = destination.groupPublicKey - } - else -> throw IllegalStateException("Destination should not be open group.") - } - val wrappedMessage = MessageWrapper.wrap(kind, message.sentTimestamp!!, senderPublicKey, ciphertext) - // Send the result - if (destination is Destination.Contact && message is VisibleMessage && !isSelfSend) { - SnodeModule.shared.broadcaster.broadcast("calculatingPoW", messageSendTime) - } - val base64EncodedData = Base64.encodeBytes(wrappedMessage) - // Send the result - val timestamp = messageSendTime + SnodeAPI.clockOffset - val snodeMessage = SnodeMessage( - recipient = message.recipient!!, - data = base64EncodedData, - ttl = getSpecifiedTtl(message, isSyncMessage) ?: message.ttl, - timestamp = timestamp - ) - if (destination is Destination.Contact && message is VisibleMessage && !isSelfSend) { - SnodeModule.shared.broadcaster.broadcast("sendingMessage", messageSendTime) - } namespaces.map { namespace -> SnodeAPI.sendMessage(snodeMessage, requiresAuth = false, namespace = namespace) }.let { promises -> var isSuccess = false val promiseCount = promises.size @@ -336,7 +248,7 @@ object MessageSender { val threadId = message.threadID ?: run { val address = if (isSyncMessage && message is VisibleMessage) message.syncTarget else message.recipient - storage.getOrCreateThreadIdFor(address!!) + storage.getOrCreateThreadIdFor(Address.fromSerialized(address!!)) } val config = storage.getExpirationConfiguration(threadId) ?: return null return if (config.isEnabled && (config.expirationType == ExpirationType.DELETE_AFTER_SEND || isSyncMessage)) { diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt index 3ab33b1cd6..88e82c4fd2 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt @@ -32,12 +32,6 @@ import org.session.libsession.messaging.utilities.SodiumUtilities import org.session.libsession.messaging.utilities.WebRtcUtils import org.session.libsession.snode.SnodeAPI import org.session.libsession.utilities.Address -import org.session.libsession.utilities.GroupRecord -import org.session.libsession.utilities.GroupUtil -import org.session.libsession.utilities.ProfileKeyUtil -import org.session.libsession.utilities.SSKEnvironment -import org.session.libsession.utilities.TextSecurePreferences -import org.session.libsession.utilities.Address import org.session.libsession.utilities.Address.Companion.fromSerialized import org.session.libsession.utilities.GroupRecord import org.session.libsession.utilities.GroupUtil diff --git a/libsignal/protobuf/SignalService.proto b/libsignal/protobuf/SignalService.proto index a996b85268..90910c79fe 100644 --- a/libsignal/protobuf/SignalService.proto +++ b/libsignal/protobuf/SignalService.proto @@ -57,9 +57,9 @@ message Content { optional UnsendRequest unsendRequest = 9; optional MessageRequestResponse messageRequestResponse = 10; optional SharedConfigMessage sharedConfigMessage = 11; - optional ExpirationType expirationType = 11; - optional uint32 expirationTimer = 12; - optional uint64 lastDisappearingMessageChangeTimestamp = 13; + optional ExpirationType expirationType = 12; + optional uint32 expirationTimer = 13; + optional uint64 lastDisappearingMessageChangeTimestamp = 14; } message KeyPair { diff --git a/libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java b/libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java index 8e26b05d92..211eb0460a 100644 --- a/libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java +++ b/libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java @@ -2482,6 +2482,36 @@ public final class SignalServiceProtos { * optional .signalservice.SharedConfigMessage sharedConfigMessage = 11; */ org.session.libsignal.protos.SignalServiceProtos.SharedConfigMessageOrBuilder getSharedConfigMessageOrBuilder(); + + // optional .signalservice.Content.ExpirationType expirationType = 12; + /** + * optional .signalservice.Content.ExpirationType expirationType = 12; + */ + boolean hasExpirationType(); + /** + * optional .signalservice.Content.ExpirationType expirationType = 12; + */ + org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType getExpirationType(); + + // optional uint32 expirationTimer = 13; + /** + * optional uint32 expirationTimer = 13; + */ + boolean hasExpirationTimer(); + /** + * optional uint32 expirationTimer = 13; + */ + int getExpirationTimer(); + + // optional uint64 lastDisappearingMessageChangeTimestamp = 14; + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 14; + */ + boolean hasLastDisappearingMessageChangeTimestamp(); + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 14; + */ + long getLastDisappearingMessageChangeTimestamp(); } /** * Protobuf type {@code signalservice.Content} @@ -2651,6 +2681,27 @@ public final class SignalServiceProtos { bitField0_ |= 0x00000100; break; } + case 96: { + int rawValue = input.readEnum(); + org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType value = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(12, rawValue); + } else { + bitField0_ |= 0x00000200; + expirationType_ = value; + } + break; + } + case 104: { + bitField0_ |= 0x00000400; + expirationTimer_ = input.readUInt32(); + break; + } + case 112: { + bitField0_ |= 0x00000800; + lastDisappearingMessageChangeTimestamp_ = input.readUInt64(); + break; + } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -2690,6 +2741,88 @@ public final class SignalServiceProtos { return PARSER; } + /** + * Protobuf enum {@code signalservice.Content.ExpirationType} + */ + public enum ExpirationType + implements com.google.protobuf.ProtocolMessageEnum { + /** + * DELETE_AFTER_READ = 1; + */ + DELETE_AFTER_READ(0, 1), + /** + * DELETE_AFTER_SEND = 2; + */ + DELETE_AFTER_SEND(1, 2), + ; + + /** + * DELETE_AFTER_READ = 1; + */ + public static final int DELETE_AFTER_READ_VALUE = 1; + /** + * DELETE_AFTER_SEND = 2; + */ + public static final int DELETE_AFTER_SEND_VALUE = 2; + + + public final int getNumber() { return value; } + + public static ExpirationType valueOf(int value) { + switch (value) { + case 1: return DELETE_AFTER_READ; + case 2: return DELETE_AFTER_SEND; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public ExpirationType findValueByNumber(int number) { + return ExpirationType.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return org.session.libsignal.protos.SignalServiceProtos.Content.getDescriptor().getEnumTypes().get(0); + } + + private static final ExpirationType[] VALUES = values(); + + public static ExpirationType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private ExpirationType(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:signalservice.Content.ExpirationType) + } + private int bitField0_; // optional .signalservice.DataMessage dataMessage = 1; public static final int DATAMESSAGE_FIELD_NUMBER = 1; @@ -2889,6 +3022,54 @@ public final class SignalServiceProtos { return sharedConfigMessage_; } + // optional .signalservice.Content.ExpirationType expirationType = 12; + public static final int EXPIRATIONTYPE_FIELD_NUMBER = 12; + private org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType expirationType_; + /** + * optional .signalservice.Content.ExpirationType expirationType = 12; + */ + public boolean hasExpirationType() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + /** + * optional .signalservice.Content.ExpirationType expirationType = 12; + */ + public org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType getExpirationType() { + return expirationType_; + } + + // optional uint32 expirationTimer = 13; + public static final int EXPIRATIONTIMER_FIELD_NUMBER = 13; + private int expirationTimer_; + /** + * optional uint32 expirationTimer = 13; + */ + public boolean hasExpirationTimer() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + /** + * optional uint32 expirationTimer = 13; + */ + public int getExpirationTimer() { + return expirationTimer_; + } + + // optional uint64 lastDisappearingMessageChangeTimestamp = 14; + public static final int LASTDISAPPEARINGMESSAGECHANGETIMESTAMP_FIELD_NUMBER = 14; + private long lastDisappearingMessageChangeTimestamp_; + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 14; + */ + public boolean hasLastDisappearingMessageChangeTimestamp() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 14; + */ + public long getLastDisappearingMessageChangeTimestamp() { + return lastDisappearingMessageChangeTimestamp_; + } + private void initFields() { dataMessage_ = org.session.libsignal.protos.SignalServiceProtos.DataMessage.getDefaultInstance(); callMessage_ = org.session.libsignal.protos.SignalServiceProtos.CallMessage.getDefaultInstance(); @@ -2899,6 +3080,9 @@ public final class SignalServiceProtos { unsendRequest_ = org.session.libsignal.protos.SignalServiceProtos.UnsendRequest.getDefaultInstance(); messageRequestResponse_ = org.session.libsignal.protos.SignalServiceProtos.MessageRequestResponse.getDefaultInstance(); sharedConfigMessage_ = org.session.libsignal.protos.SignalServiceProtos.SharedConfigMessage.getDefaultInstance(); + expirationType_ = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ; + expirationTimer_ = 0; + lastDisappearingMessageChangeTimestamp_ = 0L; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -2993,6 +3177,15 @@ public final class SignalServiceProtos { if (((bitField0_ & 0x00000100) == 0x00000100)) { output.writeMessage(11, sharedConfigMessage_); } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeEnum(12, expirationType_.getNumber()); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + output.writeUInt32(13, expirationTimer_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + output.writeUInt64(14, lastDisappearingMessageChangeTimestamp_); + } getUnknownFields().writeTo(output); } @@ -3038,6 +3231,18 @@ public final class SignalServiceProtos { size += com.google.protobuf.CodedOutputStream .computeMessageSize(11, sharedConfigMessage_); } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(12, expirationType_.getNumber()); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(13, expirationTimer_); + } + if (((bitField0_ & 0x00000800) == 0x00000800)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(14, lastDisappearingMessageChangeTimestamp_); + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -3217,6 +3422,12 @@ public final class SignalServiceProtos { sharedConfigMessageBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000100); + expirationType_ = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ; + bitField0_ = (bitField0_ & ~0x00000200); + expirationTimer_ = 0; + bitField0_ = (bitField0_ & ~0x00000400); + lastDisappearingMessageChangeTimestamp_ = 0L; + bitField0_ = (bitField0_ & ~0x00000800); return this; } @@ -3317,6 +3528,18 @@ public final class SignalServiceProtos { } else { result.sharedConfigMessage_ = sharedConfigMessageBuilder_.build(); } + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000200; + } + result.expirationType_ = expirationType_; + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + to_bitField0_ |= 0x00000400; + } + result.expirationTimer_ = expirationTimer_; + if (((from_bitField0_ & 0x00000800) == 0x00000800)) { + to_bitField0_ |= 0x00000800; + } + result.lastDisappearingMessageChangeTimestamp_ = lastDisappearingMessageChangeTimestamp_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -3360,6 +3583,15 @@ public final class SignalServiceProtos { if (other.hasSharedConfigMessage()) { mergeSharedConfigMessage(other.getSharedConfigMessage()); } + if (other.hasExpirationType()) { + setExpirationType(other.getExpirationType()); + } + if (other.hasExpirationTimer()) { + setExpirationTimer(other.getExpirationTimer()); + } + if (other.hasLastDisappearingMessageChangeTimestamp()) { + setLastDisappearingMessageChangeTimestamp(other.getLastDisappearingMessageChangeTimestamp()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -4494,6 +4726,108 @@ public final class SignalServiceProtos { return sharedConfigMessageBuilder_; } + // optional .signalservice.Content.ExpirationType expirationType = 12; + private org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType expirationType_ = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ; + /** + * optional .signalservice.Content.ExpirationType expirationType = 12; + */ + public boolean hasExpirationType() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + /** + * optional .signalservice.Content.ExpirationType expirationType = 12; + */ + public org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType getExpirationType() { + return expirationType_; + } + /** + * optional .signalservice.Content.ExpirationType expirationType = 12; + */ + public Builder setExpirationType(org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000200; + expirationType_ = value; + onChanged(); + return this; + } + /** + * optional .signalservice.Content.ExpirationType expirationType = 12; + */ + public Builder clearExpirationType() { + bitField0_ = (bitField0_ & ~0x00000200); + expirationType_ = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ; + onChanged(); + return this; + } + + // optional uint32 expirationTimer = 13; + private int expirationTimer_ ; + /** + * optional uint32 expirationTimer = 13; + */ + public boolean hasExpirationTimer() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + /** + * optional uint32 expirationTimer = 13; + */ + public int getExpirationTimer() { + return expirationTimer_; + } + /** + * optional uint32 expirationTimer = 13; + */ + public Builder setExpirationTimer(int value) { + bitField0_ |= 0x00000400; + expirationTimer_ = value; + onChanged(); + return this; + } + /** + * optional uint32 expirationTimer = 13; + */ + public Builder clearExpirationTimer() { + bitField0_ = (bitField0_ & ~0x00000400); + expirationTimer_ = 0; + onChanged(); + return this; + } + + // optional uint64 lastDisappearingMessageChangeTimestamp = 14; + private long lastDisappearingMessageChangeTimestamp_ ; + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 14; + */ + public boolean hasLastDisappearingMessageChangeTimestamp() { + return ((bitField0_ & 0x00000800) == 0x00000800); + } + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 14; + */ + public long getLastDisappearingMessageChangeTimestamp() { + return lastDisappearingMessageChangeTimestamp_; + } + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 14; + */ + public Builder setLastDisappearingMessageChangeTimestamp(long value) { + bitField0_ |= 0x00000800; + lastDisappearingMessageChangeTimestamp_ = value; + onChanged(); + return this; + } + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 14; + */ + public Builder clearLastDisappearingMessageChangeTimestamp() { + bitField0_ = (bitField0_ & ~0x00000800); + lastDisappearingMessageChangeTimestamp_ = 0L; + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:signalservice.Content) } @@ -27141,7 +27475,7 @@ public final class SignalServiceProtos { "\002(\004\0223\n\006action\030\002 \002(\0162#.signalservice.Typi" + "ngMessage.Action\"\"\n\006Action\022\013\n\007STARTED\020\000\022" + "\013\n\007STOPPED\020\001\"2\n\rUnsendRequest\022\021\n\ttimesta", - "mp\030\001 \002(\004\022\016\n\006author\030\002 \002(\t\"\246\004\n\007Content\022/\n\013" + + "mp\030\001 \002(\004\022\016\n\006author\030\002 \002(\t\"\356\005\n\007Content\022/\n\013" + "dataMessage\030\001 \001(\0132\032.signalservice.DataMe" + "ssage\022/\n\013callMessage\030\003 \001(\0132\032.signalservi" + "ce.CallMessage\0225\n\016receiptMessage\030\005 \001(\0132\035" + @@ -27155,97 +27489,102 @@ public final class SignalServiceProtos { "t\022E\n\026messageRequestResponse\030\n \001(\0132%.sign" + "alservice.MessageRequestResponse\022?\n\023shar" + "edConfigMessage\030\013 \001(\0132\".signalservice.Sh" + - "aredConfigMessage\"0\n\007KeyPair\022\021\n\tpublicKe" + + "aredConfigMessage\022=\n\016expirationType\030\014 \001(" + + "\0162%.signalservice.Content.ExpirationType" + + "\022\027\n\017expirationTimer\030\r \001(\r\022.\n&lastDisappe" + + "aringMessageChangeTimestamp\030\016 \001(\004\">\n\016Exp" + + "irationType\022\025\n\021DELETE_AFTER_READ\020\001\022\025\n\021DE" + + "LETE_AFTER_SEND\020\002\"0\n\007KeyPair\022\021\n\tpublicKe", "y\030\001 \002(\014\022\022\n\nprivateKey\030\002 \002(\014\"\226\001\n\032DataExtr" + "actionNotification\022<\n\004type\030\001 \002(\0162..signa" + "lservice.DataExtractionNotification.Type" + "\022\021\n\ttimestamp\030\002 \001(\004\"\'\n\004Type\022\016\n\nSCREENSHO" + - "T\020\001\022\017\n\013MEDIA_SAVED\020\002\"\361\r\n\013DataMessage\022\014\n\004", + "T\020\001\022\017\n\013MEDIA_SAVED\020\002\"\361\r\n\013DataMessage\022\014\n\004" + "body\030\001 \001(\t\0225\n\013attachments\030\002 \003(\0132 .signal" + "service.AttachmentPointer\022*\n\005group\030\003 \001(\013" + "2\033.signalservice.GroupContext\022\r\n\005flags\030\004" + " \001(\r\022\023\n\013expireTimer\030\005 \001(\r\022\022\n\nprofileKey\030" + - "\006 \001(\014\022\021\n\ttimestamp\030\007 \001(\004\022/\n\005quote\030\010 \001(\0132" + + "\006 \001(\014\022\021\n\ttimestamp\030\007 \001(\004\022/\n\005quote\030\010 \001(\0132", " .signalservice.DataMessage.Quote\0223\n\007pre" + "view\030\n \003(\0132\".signalservice.DataMessage.P" + "review\0225\n\010reaction\030\013 \001(\0132#.signalservice" + ".DataMessage.Reaction\0227\n\007profile\030e \001(\0132&" + - ".signalservice.DataMessage.LokiProfile\022K", + ".signalservice.DataMessage.LokiProfile\022K" + "\n\023openGroupInvitation\030f \001(\0132..signalserv" + "ice.DataMessage.OpenGroupInvitation\022W\n\031c" + "losedGroupControlMessage\030h \001(\01324.signals" + "ervice.DataMessage.ClosedGroupControlMes" + - "sage\022\022\n\nsyncTarget\030i \001(\t\032\225\002\n\005Quote\022\n\n\002id" + + "sage\022\022\n\nsyncTarget\030i \001(\t\032\225\002\n\005Quote\022\n\n\002id", "\030\001 \002(\004\022\016\n\006author\030\002 \002(\t\022\014\n\004text\030\003 \001(\t\022F\n\013" + "attachments\030\004 \003(\01321.signalservice.DataMe" + "ssage.Quote.QuotedAttachment\032\231\001\n\020QuotedA" + "ttachment\022\023\n\013contentType\030\001 \001(\t\022\020\n\010fileNa" + - "me\030\002 \001(\t\0223\n\tthumbnail\030\003 \001(\0132 .signalserv", + "me\030\002 \001(\t\0223\n\tthumbnail\030\003 \001(\0132 .signalserv" + "ice.AttachmentPointer\022\r\n\005flags\030\004 \001(\r\"\032\n\005" + "Flags\022\021\n\rVOICE_MESSAGE\020\001\032V\n\007Preview\022\013\n\003u" + "rl\030\001 \002(\t\022\r\n\005title\030\002 \001(\t\022/\n\005image\030\003 \001(\0132 " + ".signalservice.AttachmentPointer\032:\n\013Loki" + - "Profile\022\023\n\013displayName\030\001 \001(\t\022\026\n\016profileP" + + "Profile\022\023\n\013displayName\030\001 \001(\t\022\026\n\016profileP", "icture\030\002 \001(\t\0320\n\023OpenGroupInvitation\022\013\n\003u" + "rl\030\001 \002(\t\022\014\n\004name\030\003 \002(\t\032\374\003\n\031ClosedGroupCo" + "ntrolMessage\022G\n\004type\030\001 \002(\01629.signalservi" + "ce.DataMessage.ClosedGroupControlMessage" + - ".Type\022\021\n\tpublicKey\030\002 \001(\014\022\014\n\004name\030\003 \001(\t\0221", + ".Type\022\021\n\tpublicKey\030\002 \001(\014\022\014\n\004name\030\003 \001(\t\0221" + "\n\021encryptionKeyPair\030\004 \001(\0132\026.signalservic" + "e.KeyPair\022\017\n\007members\030\005 \003(\014\022\016\n\006admins\030\006 \003" + "(\014\022U\n\010wrappers\030\007 \003(\0132C.signalservice.Dat" + "aMessage.ClosedGroupControlMessage.KeyPa" + - "irWrapper\022\027\n\017expirationTimer\030\010 \001(\r\032=\n\016Ke" + + "irWrapper\022\027\n\017expirationTimer\030\010 \001(\r\032=\n\016Ke", "yPairWrapper\022\021\n\tpublicKey\030\001 \002(\014\022\030\n\020encry" + "ptedKeyPair\030\002 \002(\014\"r\n\004Type\022\007\n\003NEW\020\001\022\027\n\023EN" + "CRYPTION_KEY_PAIR\020\003\022\017\n\013NAME_CHANGE\020\004\022\021\n\r" + "MEMBERS_ADDED\020\005\022\023\n\017MEMBERS_REMOVED\020\006\022\017\n\013" + - "MEMBER_LEFT\020\007\032\222\001\n\010Reaction\022\n\n\002id\030\001 \002(\004\022\016", + "MEMBER_LEFT\020\007\032\222\001\n\010Reaction\022\n\n\002id\030\001 \002(\004\022\016" + "\n\006author\030\002 \002(\t\022\r\n\005emoji\030\003 \001(\t\022:\n\006action\030" + "\004 \002(\0162*.signalservice.DataMessage.Reacti" + "on.Action\"\037\n\006Action\022\t\n\005REACT\020\000\022\n\n\006REMOVE" + "\020\001\"$\n\005Flags\022\033\n\027EXPIRATION_TIMER_UPDATE\020\002" + - "\"\352\001\n\013CallMessage\022-\n\004type\030\001 \002(\0162\037.signals" + + "\"\352\001\n\013CallMessage\022-\n\004type\030\001 \002(\0162\037.signals", "ervice.CallMessage.Type\022\014\n\004sdps\030\002 \003(\t\022\027\n" + "\017sdpMLineIndexes\030\003 \003(\r\022\017\n\007sdpMids\030\004 \003(\t\022" + "\014\n\004uuid\030\005 \002(\t\"f\n\004Type\022\r\n\tPRE_OFFER\020\006\022\t\n\005" + "OFFER\020\001\022\n\n\006ANSWER\020\002\022\026\n\022PROVISIONAL_ANSWE" + - "R\020\003\022\022\n\016ICE_CANDIDATES\020\004\022\014\n\010END_CALL\020\005\"\245\004", + "R\020\003\022\022\n\016ICE_CANDIDATES\020\004\022\014\n\010END_CALL\020\005\"\245\004" + "\n\024ConfigurationMessage\022E\n\014closedGroups\030\001" + " \003(\0132/.signalservice.ConfigurationMessag" + "e.ClosedGroup\022\022\n\nopenGroups\030\002 \003(\t\022\023\n\013dis" + "playName\030\003 \001(\t\022\026\n\016profilePicture\030\004 \001(\t\022\022" + - "\n\nprofileKey\030\005 \001(\014\022=\n\010contacts\030\006 \003(\0132+.s" + + "\n\nprofileKey\030\005 \001(\014\022=\n\010contacts\030\006 \003(\0132+.s", "ignalservice.ConfigurationMessage.Contac" + "t\032\233\001\n\013ClosedGroup\022\021\n\tpublicKey\030\001 \001(\014\022\014\n\004" + "name\030\002 \001(\t\0221\n\021encryptionKeyPair\030\003 \001(\0132\026." + "signalservice.KeyPair\022\017\n\007members\030\004 \003(\014\022\016" + - "\n\006admins\030\005 \003(\014\022\027\n\017expirationTimer\030\006 \001(\r\032", + "\n\006admins\030\005 \003(\014\022\027\n\017expirationTimer\030\006 \001(\r\032" + "\223\001\n\007Contact\022\021\n\tpublicKey\030\001 \002(\014\022\014\n\004name\030\002" + " \002(\t\022\026\n\016profilePicture\030\003 \001(\t\022\022\n\nprofileK" + "ey\030\004 \001(\014\022\022\n\nisApproved\030\005 \001(\010\022\021\n\tisBlocke" + "d\030\006 \001(\010\022\024\n\014didApproveMe\030\007 \001(\010\"y\n\026Message" + - "RequestResponse\022\022\n\nisApproved\030\001 \002(\010\022\022\n\np" + + "RequestResponse\022\022\n\nisApproved\030\001 \002(\010\022\022\n\np", "rofileKey\030\002 \001(\014\0227\n\007profile\030\003 \001(\0132&.signa" + "lservice.DataMessage.LokiProfile\"\375\001\n\023Sha" + "redConfigMessage\0225\n\004kind\030\001 \002(\0162\'.signals" + "ervice.SharedConfigMessage.Kind\022\r\n\005seqno" + - "\030\002 \002(\003\022\014\n\004data\030\003 \002(\014\"\221\001\n\004Kind\022\020\n\014USER_PR", + "\030\002 \002(\003\022\014\n\004data\030\003 \002(\014\"\221\001\n\004Kind\022\020\n\014USER_PR" + "OFILE\020\001\022\014\n\010CONTACTS\020\002\022\027\n\023CONVO_INFO_VOLA" + "TILE\020\003\022\n\n\006GROUPS\020\004\022\025\n\021CLOSED_GROUP_INFO\020" + "\005\022\030\n\024CLOSED_GROUP_MEMBERS\020\006\022\023\n\017ENCRYPTIO" + "N_KEYS\020\007\"u\n\016ReceiptMessage\0220\n\004type\030\001 \002(\016" + - "2\".signalservice.ReceiptMessage.Type\022\021\n\t" + + "2\".signalservice.ReceiptMessage.Type\022\021\n\t", "timestamp\030\002 \003(\004\"\036\n\004Type\022\014\n\010DELIVERY\020\000\022\010\n" + "\004READ\020\001\"\354\001\n\021AttachmentPointer\022\n\n\002id\030\001 \002(" + "\006\022\023\n\013contentType\030\002 \001(\t\022\013\n\003key\030\003 \001(\014\022\014\n\004s" + "ize\030\004 \001(\r\022\021\n\tthumbnail\030\005 \001(\014\022\016\n\006digest\030\006" + - " \001(\014\022\020\n\010fileName\030\007 \001(\t\022\r\n\005flags\030\010 \001(\r\022\r\n", + " \001(\014\022\020\n\010fileName\030\007 \001(\t\022\r\n\005flags\030\010 \001(\r\022\r\n" + "\005width\030\t \001(\r\022\016\n\006height\030\n \001(\r\022\017\n\007caption\030" + "\013 \001(\t\022\013\n\003url\030e \001(\t\"\032\n\005Flags\022\021\n\rVOICE_MES" + "SAGE\020\001\"\365\001\n\014GroupContext\022\n\n\002id\030\001 \001(\014\022.\n\004t" + "ype\030\002 \001(\0162 .signalservice.GroupContext.T" + - "ype\022\014\n\004name\030\003 \001(\t\022\017\n\007members\030\004 \003(\t\0220\n\006av" + + "ype\022\014\n\004name\030\003 \001(\t\022\017\n\007members\030\004 \003(\t\0220\n\006av", "atar\030\005 \001(\0132 .signalservice.AttachmentPoi" + "nter\022\016\n\006admins\030\006 \003(\t\"H\n\004Type\022\013\n\007UNKNOWN\020" + "\000\022\n\n\006UPDATE\020\001\022\013\n\007DELIVER\020\002\022\010\n\004QUIT\020\003\022\020\n\014" + @@ -27280,7 +27619,7 @@ public final class SignalServiceProtos { internal_static_signalservice_Content_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_signalservice_Content_descriptor, - new java.lang.String[] { "DataMessage", "CallMessage", "ReceiptMessage", "TypingMessage", "ConfigurationMessage", "DataExtractionNotification", "UnsendRequest", "MessageRequestResponse", "SharedConfigMessage", }); + new java.lang.String[] { "DataMessage", "CallMessage", "ReceiptMessage", "TypingMessage", "ConfigurationMessage", "DataExtractionNotification", "UnsendRequest", "MessageRequestResponse", "SharedConfigMessage", "ExpirationType", "ExpirationTimer", "LastDisappearingMessageChangeTimestamp", }); internal_static_signalservice_KeyPair_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_signalservice_KeyPair_fieldAccessorTable = new