Update fields for view-once messages.

This commit is contained in:
Greyson Parrelli 2019-08-01 00:32:54 -04:00
parent 8b0ca53f92
commit d43605ad3e
7 changed files with 368 additions and 360 deletions

View File

@ -35,7 +35,7 @@ import org.whispersystems.signalservice.api.messages.calls.OfferMessage;
import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage;
import org.whispersystems.signalservice.api.messages.multidevice.BlockedListMessage;
import org.whispersystems.signalservice.api.messages.multidevice.ConfigurationMessage;
import org.whispersystems.signalservice.api.messages.multidevice.MessageTimerReadMessage;
import org.whispersystems.signalservice.api.messages.multidevice.ViewOnceOpenMessage;
import org.whispersystems.signalservice.api.messages.multidevice.ReadMessage;
import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptMessage;
import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
@ -282,8 +282,8 @@ public class SignalServiceMessageSender {
content = createMultiDeviceGroupsContent(message.getGroups().get().asStream());
} else if (message.getRead().isPresent()) {
content = createMultiDeviceReadContent(message.getRead().get());
} else if (message.getMessageTimerRead().isPresent()) {
content = createMultiDeviceMessageTimerReadContent(message.getMessageTimerRead().get());
} else if (message.getViewOnceOpen().isPresent()) {
content = createMultiDeviceViewOnceOpenContent(message.getViewOnceOpen().get());
} else if (message.getBlockedList().isPresent()) {
content = createMultiDeviceBlockedContent(message.getBlockedList().get());
} else if (message.getConfiguration().isPresent()) {
@ -522,9 +522,9 @@ public class SignalServiceMessageSender {
builder.setSticker(stickerBuilder.build());
}
if (message.getMessageTimerInSeconds() > 0) {
builder.setMessageTimer(message.getMessageTimerInSeconds());
builder.setRequiredProtocolVersion(Math.max(DataMessage.ProtocolVersion.MESSAGE_TIMERS.getNumber(), builder.getRequiredProtocolVersion()));
if (message.isViewOnce()) {
builder.setIsViewOnce(message.isViewOnce());
builder.setRequiredProtocolVersion(Math.max(DataMessage.ProtocolVersion.VIEW_ONCE_VALUE, builder.getRequiredProtocolVersion()));
}
builder.setTimestamp(message.getTimestamp());
@ -625,7 +625,7 @@ public class SignalServiceMessageSender {
sentMessage.setExpirationStartTimestamp(System.currentTimeMillis());
}
if (dataMessage.getMessageTimer() > 0) {
if (dataMessage.getIsViewOnce()) {
dataMessage = dataMessage.toBuilder().clearAttachments().build();
sentMessage.setMessage(dataMessage);
}
@ -651,13 +651,13 @@ public class SignalServiceMessageSender {
return container.setSyncMessage(builder).build().toByteArray();
}
private byte[] createMultiDeviceMessageTimerReadContent(MessageTimerReadMessage readMessage) {
private byte[] createMultiDeviceViewOnceOpenContent(ViewOnceOpenMessage readMessage) {
Content.Builder container = Content.newBuilder();
SyncMessage.Builder builder = createSyncMessageBuilder();
builder.setMessageTimerRead(SyncMessage.MessageTimerRead.newBuilder()
.setTimestamp(readMessage.getTimestamp())
.setSender(readMessage.getSender()));
builder.setViewOnceOpen(SyncMessage.ViewOnceOpen.newBuilder()
.setTimestamp(readMessage.getTimestamp())
.setSender(readMessage.getSender()));
return container.setSyncMessage(builder).build().toByteArray();
}

View File

@ -54,7 +54,7 @@ import org.whispersystems.signalservice.api.messages.calls.HangupMessage;
import org.whispersystems.signalservice.api.messages.calls.IceUpdateMessage;
import org.whispersystems.signalservice.api.messages.calls.OfferMessage;
import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage;
import org.whispersystems.signalservice.api.messages.multidevice.MessageTimerReadMessage;
import org.whispersystems.signalservice.api.messages.multidevice.ViewOnceOpenMessage;
import org.whispersystems.signalservice.api.messages.multidevice.ReadMessage;
import org.whispersystems.signalservice.api.messages.multidevice.RequestMessage;
import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptMessage;
@ -309,7 +309,7 @@ public class SignalServiceCipher {
sharedContacts,
previews,
sticker,
content.getMessageTimer());
content.getIsViewOnce());
}
private SignalServiceSyncMessage createSynchronizeMessage(Metadata metadata, SyncMessage content)
@ -345,10 +345,10 @@ public class SignalServiceCipher {
return SignalServiceSyncMessage.forRead(readMessages);
}
if (content.hasMessageTimerRead()) {
MessageTimerReadMessage timerRead = new MessageTimerReadMessage(content.getMessageTimerRead().getSender(),
content.getMessageTimerRead().getTimestamp());
return SignalServiceSyncMessage.forMessageTimerRead(timerRead);
if (content.hasViewOnceOpen()) {
ViewOnceOpenMessage timerRead = new ViewOnceOpenMessage(content.getViewOnceOpen().getSender(),
content.getViewOnceOpen().getTimestamp());
return SignalServiceSyncMessage.forViewOnceOpen(timerRead);
}
if (content.hasVerified()) {

View File

@ -31,7 +31,7 @@ public class SignalServiceDataMessage {
private final Optional<List<SharedContact>> contacts;
private final Optional<List<Preview>> previews;
private final Optional<Sticker> sticker;
private final int messageTimerInSeconds;
private final boolean viewOnce;
/**
* Construct a SignalServiceDataMessage with a body and no attachments.
@ -105,7 +105,7 @@ public class SignalServiceDataMessage {
* @param expiresInSeconds The number of seconds in which a message should disappear after having been seen.
*/
public SignalServiceDataMessage(long timestamp, SignalServiceGroup group, List<SignalServiceAttachment> attachments, String body, int expiresInSeconds) {
this(timestamp, group, attachments, body, false, expiresInSeconds, false, null, false, null, null, null, null, 0);
this(timestamp, group, attachments, body, false, expiresInSeconds, false, null, false, null, null, null, null, false);
}
/**
@ -123,7 +123,7 @@ public class SignalServiceDataMessage {
String body, boolean endSession, int expiresInSeconds,
boolean expirationUpdate, byte[] profileKey, boolean profileKeyUpdate,
Quote quote, List<SharedContact> sharedContacts, List<Preview> previews,
Sticker sticker, int messageTimerInSeconds)
Sticker sticker, boolean viewOnce)
{
this.timestamp = timestamp;
this.body = Optional.fromNullable(body);
@ -135,7 +135,7 @@ public class SignalServiceDataMessage {
this.profileKeyUpdate = profileKeyUpdate;
this.quote = Optional.fromNullable(quote);
this.sticker = Optional.fromNullable(sticker);
this.messageTimerInSeconds = messageTimerInSeconds;
this.viewOnce = viewOnce;
if (attachments != null && !attachments.isEmpty()) {
this.attachments = Optional.of(attachments);
@ -228,8 +228,8 @@ public class SignalServiceDataMessage {
return sticker;
}
public int getMessageTimerInSeconds() {
return messageTimerInSeconds;
public boolean isViewOnce() {
return viewOnce;
}
public static class Builder {
@ -248,7 +248,7 @@ public class SignalServiceDataMessage {
private boolean profileKeyUpdate;
private Quote quote;
private Sticker sticker;
private int messageTimerInSeconds;
private boolean viewOnce;
private Builder() {}
@ -335,8 +335,8 @@ public class SignalServiceDataMessage {
return this;
}
public Builder withMessageTimer(int messageTimerInSeconds) {
this.messageTimerInSeconds = messageTimerInSeconds;
public Builder withViewOnce(boolean viewOnce) {
this.viewOnce = viewOnce;
return this;
}
@ -345,7 +345,7 @@ public class SignalServiceDataMessage {
return new SignalServiceDataMessage(timestamp, group, attachments, body, endSession,
expiresInSeconds, expirationUpdate, profileKey,
profileKeyUpdate, quote, sharedContacts, previews,
sticker, messageTimerInSeconds);
sticker, viewOnce);
}
}

View File

@ -9,8 +9,6 @@ package org.whispersystems.signalservice.api.messages.multidevice;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.messages.SignalServiceAttachment;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@ -22,7 +20,7 @@ public class SignalServiceSyncMessage {
private final Optional<BlockedListMessage> blockedList;
private final Optional<RequestMessage> request;
private final Optional<List<ReadMessage>> reads;
private final Optional<MessageTimerReadMessage> timerRead;
private final Optional<ViewOnceOpenMessage> viewOnceOpen;
private final Optional<VerifiedMessage> verified;
private final Optional<ConfigurationMessage> configuration;
private final Optional<List<StickerPackOperationMessage>> stickerPackOperations;
@ -33,7 +31,7 @@ public class SignalServiceSyncMessage {
Optional<BlockedListMessage> blockedList,
Optional<RequestMessage> request,
Optional<List<ReadMessage>> reads,
Optional<MessageTimerReadMessage> timerRead,
Optional<ViewOnceOpenMessage> viewOnceOpen,
Optional<VerifiedMessage> verified,
Optional<ConfigurationMessage> configuration,
Optional<List<StickerPackOperationMessage>> stickerPackOperations)
@ -44,7 +42,7 @@ public class SignalServiceSyncMessage {
this.blockedList = blockedList;
this.request = request;
this.reads = reads;
this.timerRead = timerRead;
this.viewOnceOpen = viewOnceOpen;
this.verified = verified;
this.configuration = configuration;
this.stickerPackOperations = stickerPackOperations;
@ -57,7 +55,7 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.<RequestMessage>absent(),
Optional.<List<ReadMessage>>absent(),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.<ConfigurationMessage>absent(),
Optional.<List<StickerPackOperationMessage>>absent());
@ -70,7 +68,7 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.<RequestMessage>absent(),
Optional.<List<ReadMessage>>absent(),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.<ConfigurationMessage>absent(),
Optional.<List<StickerPackOperationMessage>>absent());
@ -83,7 +81,7 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.<RequestMessage>absent(),
Optional.<List<ReadMessage>>absent(),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.<ConfigurationMessage>absent(),
Optional.<List<StickerPackOperationMessage>>absent());
@ -96,7 +94,7 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.of(request),
Optional.<List<ReadMessage>>absent(),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.<ConfigurationMessage>absent(),
Optional.<List<StickerPackOperationMessage>>absent());
@ -109,13 +107,13 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.<RequestMessage>absent(),
Optional.of(reads),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.<ConfigurationMessage>absent(),
Optional.<List<StickerPackOperationMessage>>absent());
}
public static SignalServiceSyncMessage forMessageTimerRead(MessageTimerReadMessage timerRead) {
public static SignalServiceSyncMessage forViewOnceOpen(ViewOnceOpenMessage timerRead) {
return new SignalServiceSyncMessage(Optional.<SentTranscriptMessage>absent(),
Optional.<ContactsMessage>absent(),
Optional.<SignalServiceAttachment>absent(),
@ -138,7 +136,7 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.<RequestMessage>absent(),
Optional.of(reads),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.<ConfigurationMessage>absent(),
Optional.<List<StickerPackOperationMessage>>absent());
@ -151,7 +149,7 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.<RequestMessage>absent(),
Optional.<List<ReadMessage>>absent(),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.of(verifiedMessage),
Optional.<ConfigurationMessage>absent(),
Optional.<List<StickerPackOperationMessage>>absent());
@ -164,7 +162,7 @@ public class SignalServiceSyncMessage {
Optional.of(blocked),
Optional.<RequestMessage>absent(),
Optional.<List<ReadMessage>>absent(),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.<ConfigurationMessage>absent(),
Optional.<List<StickerPackOperationMessage>>absent());
@ -177,7 +175,7 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.<RequestMessage>absent(),
Optional.<List<ReadMessage>>absent(),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.of(configuration),
Optional.<List<StickerPackOperationMessage>>absent());
@ -190,7 +188,7 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.<RequestMessage>absent(),
Optional.<List<ReadMessage>>absent(),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.<ConfigurationMessage>absent(),
Optional.of(stickerPackOperations));
@ -203,7 +201,7 @@ public class SignalServiceSyncMessage {
Optional.<BlockedListMessage>absent(),
Optional.<RequestMessage>absent(),
Optional.<List<ReadMessage>>absent(),
Optional.<MessageTimerReadMessage>absent(),
Optional.<ViewOnceOpenMessage>absent(),
Optional.<VerifiedMessage>absent(),
Optional.<ConfigurationMessage>absent(),
Optional.<List<StickerPackOperationMessage>>absent());
@ -229,8 +227,8 @@ public class SignalServiceSyncMessage {
return reads;
}
public Optional<MessageTimerReadMessage> getMessageTimerRead() {
return timerRead;
public Optional<ViewOnceOpenMessage> getViewOnceOpen() {
return viewOnceOpen;
}
public Optional<BlockedListMessage> getBlockedList() {

View File

@ -1,11 +1,11 @@
package org.whispersystems.signalservice.api.messages.multidevice;
public class MessageTimerReadMessage {
public class ViewOnceOpenMessage {
private final String sender;
private final long timestamp;
public MessageTimerReadMessage(String sender, long timestamp) {
public ViewOnceOpenMessage(String sender, long timestamp) {
this.sender = sender;
this.timestamp = timestamp;
}

View File

@ -178,7 +178,8 @@ message DataMessage {
INITIAL = 0;
MESSAGE_TIMERS = 1;
CURRENT = 1;
VIEW_ONCE = 2;
CURRENT = 2;
}
optional string body = 1;
@ -193,7 +194,7 @@ message DataMessage {
repeated Preview preview = 10;
optional Sticker sticker = 11;
optional uint32 requiredProtocolVersion = 12;
optional uint32 messageTimer = 13;
optional bool isViewOnce = 14;
}
message NullMessage {
@ -298,7 +299,7 @@ message SyncMessage {
optional Type type = 3;
}
message MessageTimerRead {
message ViewOnceOpen {
optional string sender = 1;
optional uint64 timestamp = 2;
}
@ -313,7 +314,7 @@ message SyncMessage {
optional Configuration configuration = 9;
optional bytes padding = 8;
repeated StickerPackOperation stickerPackOperation = 10;
optional MessageTimerRead messageTimerRead = 11;
optional ViewOnceOpen viewOnceOpen = 11;
}
message AttachmentPointer {