Automatically recover from bad encrypted messages.

This commit is contained in:
Greyson Parrelli
2021-01-08 10:23:46 -05:00
parent adea15df10
commit 728f1707b6
22 changed files with 331 additions and 51 deletions

View File

@@ -275,6 +275,7 @@ public class SignalServiceMessageSender {
sendMessage(localAddress, Optional.<UnidentifiedAccess>absent(), timestamp, syncMessage, false, null);
}
// TODO [greyson][session] Delete this when we delete the button
if (message.isEndSession()) {
if (recipient.getUuid().isPresent()) {
store.deleteAllSessions(recipient.getUuid().get().toString());
@@ -481,7 +482,6 @@ public class SignalServiceMessageSender {
attachment.getUploadTimestamp());
}
private void sendMessage(VerifiedMessage message, Optional<UnidentifiedAccessPair> unidentifiedAccess)
throws IOException, UntrustedIdentityException
{
@@ -507,6 +507,26 @@ public class SignalServiceMessageSender {
}
}
public SendMessageResult sendNullMessage(SignalServiceAddress address, Optional<UnidentifiedAccessPair> unidentifiedAccess)
throws UntrustedIdentityException, IOException
{
byte[] nullMessageBody = DataMessage.newBuilder()
.setBody(Base64.encodeBytes(Util.getRandomLengthBytes(140)))
.build()
.toByteArray();
NullMessage nullMessage = NullMessage.newBuilder()
.setPadding(ByteString.copyFrom(nullMessageBody))
.build();
byte[] content = Content.newBuilder()
.setNullMessage(nullMessage)
.build()
.toByteArray();
return sendMessage(address, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), content, false, null);
}
private byte[] createTypingContent(SignalServiceTypingMessage message) {
Content.Builder container = Content.newBuilder();
TypingMessage.Builder builder = TypingMessage.newBuilder();