Add measurements, improve MSL insert.

This commit is contained in:
Greyson Parrelli
2021-08-30 15:07:03 -04:00
parent 1241f4c0e9
commit bca2205945
10 changed files with 430 additions and 52 deletions

View File

@@ -253,7 +253,7 @@ public class SignalServiceMessageSender {
throws IOException, UntrustedIdentityException, InvalidKeyException, NoSessionException, InvalidRegistrationIdException
{
Content content = createTypingContent(message);
sendGroupMessage(distributionId, recipients, unidentifiedAccess, message.getTimestamp(), content, ContentHint.IMPLICIT, message.getGroupId().orNull(), true);
sendGroupMessage(distributionId, recipients, unidentifiedAccess, message.getTimestamp(), content, ContentHint.IMPLICIT, message.getGroupId().orNull(), true, SenderKeyGroupEvents.EMPTY);
}
@@ -293,7 +293,7 @@ public class SignalServiceMessageSender {
throws IOException, UntrustedIdentityException, InvalidKeyException, NoSessionException, InvalidRegistrationIdException
{
Content content = createCallContent(message);
return sendGroupMessage(distributionId, recipients, unidentifiedAccess, message.getTimestamp().get(), content, ContentHint.IMPLICIT, message.getGroupId().get(), false);
return sendGroupMessage(distributionId, recipients, unidentifiedAccess, message.getTimestamp().get(), content, ContentHint.IMPLICIT, message.getGroupId().get(), false, SenderKeyGroupEvents.EMPTY);
}
/**
@@ -420,14 +420,17 @@ public class SignalServiceMessageSender {
List<UnidentifiedAccess> unidentifiedAccess,
boolean isRecipientUpdate,
ContentHint contentHint,
SignalServiceDataMessage message)
SignalServiceDataMessage message,
SenderKeyGroupEvents sendEvents)
throws IOException, UntrustedIdentityException, NoSessionException, InvalidKeyException, InvalidRegistrationIdException
{
Log.d(TAG, "[" + message.getTimestamp() + "] Sending a group data message to " + recipients.size() + " recipients.");
Content content = createMessageContent(message);
Optional<byte[]> groupId = message.getGroupId();
List<SendMessageResult> results = sendGroupMessage(distributionId, recipients, unidentifiedAccess, message.getTimestamp(), content, contentHint, groupId.orNull(), false);
List<SendMessageResult> results = sendGroupMessage(distributionId, recipients, unidentifiedAccess, message.getTimestamp(), content, contentHint, groupId.orNull(), false, sendEvents);
sendEvents.onMessageSent();
if (store.isMultiDevice()) {
Content syncMessage = createMultiDeviceSentTranscriptContent(content, Optional.absent(), message.getTimestamp(), results, isRecipientUpdate);
@@ -436,6 +439,8 @@ public class SignalServiceMessageSender {
sendMessage(localAddress, Optional.absent(), message.getTimestamp(), syncMessageContent, false, null);
}
sendEvents.onSyncMessageSent();
return results;
}
@@ -450,6 +455,7 @@ public class SignalServiceMessageSender {
boolean isRecipientUpdate,
ContentHint contentHint,
SignalServiceDataMessage message,
LegacyGroupEvents sendEvents,
PartialSendCompleteListener partialListener,
CancelationSignal cancelationSignal)
throws IOException, UntrustedIdentityException
@@ -462,6 +468,8 @@ public class SignalServiceMessageSender {
List<SendMessageResult> results = sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, partialListener, cancelationSignal);
boolean needsSyncInResults = false;
sendEvents.onMessageSent();
for (SendMessageResult result : results) {
if (result.getSuccess() != null && result.getSuccess().isNeedsSync()) {
needsSyncInResults = true;
@@ -481,6 +489,8 @@ public class SignalServiceMessageSender {
sendMessage(localAddress, Optional.absent(), timestamp, syncMessageContent, false, null);
}
sendEvents.onSyncMessageSent();
return results;
}
@@ -1673,7 +1683,8 @@ public class SignalServiceMessageSender {
Content content,
ContentHint contentHint,
byte[] groupId,
boolean online)
boolean online,
SenderKeyGroupEvents sendEvents)
throws IOException, UntrustedIdentityException, NoSessionException, InvalidKeyException, InvalidRegistrationIdException
{
if (recipients.isEmpty()) {
@@ -1751,6 +1762,8 @@ public class SignalServiceMessageSender {
}
}
sendEvents.onSenderKeyShared();
SignalServiceCipher cipher = new SignalServiceCipher(localAddress, store, sessionLock, null);
SenderCertificate senderCertificate = unidentifiedAccess.get(0).getUnidentifiedCertificate();
@@ -1761,6 +1774,8 @@ public class SignalServiceMessageSender {
throw new UntrustedIdentityException("Untrusted during group encrypt", e.getName(), e.getUntrustedIdentity());
}
sendEvents.onMessageEncrypted();
byte[] joinedUnidentifiedAccess = new byte[16];
for (UnidentifiedAccess access : unidentifiedAccess) {
joinedUnidentifiedAccess = ByteArrayUtil.xor(joinedUnidentifiedAccess, access.getUnidentifiedAccessKey());
@@ -2108,4 +2123,38 @@ public class SignalServiceMessageSender {
void onMessageSent();
void onSyncMessageSent();
}
public interface SenderKeyGroupEvents {
SenderKeyGroupEvents EMPTY = new SenderKeyGroupEvents() {
@Override
public void onSenderKeyShared() { }
@Override
public void onMessageEncrypted() { }
@Override
public void onMessageSent() { }
@Override
public void onSyncMessageSent() { }
};
void onSenderKeyShared();
void onMessageEncrypted();
void onMessageSent();
void onSyncMessageSent();
}
public interface LegacyGroupEvents {
LegacyGroupEvents EMPTY = new LegacyGroupEvents() {
@Override
public void onMessageSent() { }
@Override
public void onSyncMessageSent() { }
};
void onMessageSent();
void onSyncMessageSent();
}
}