Improve PushProcessMessageJob logging.

This commit is contained in:
Greyson Parrelli 2020-10-22 11:57:18 -04:00 committed by Cody Henthorne
parent e93d7518f3
commit 5eace49739

View file

@ -250,7 +250,7 @@ public final class PushProcessMessageJob extends BaseJob {
} }
} }
} catch (BadGroupIdException e) { } catch (BadGroupIdException e) {
Log.w(TAG, "Bad groupId! Using default queue."); Log.w(TAG, "Bad groupId! Using default queue. ID: " + content.getTimestamp());
} }
} else { } else {
queueName = getQueueName(RecipientId.fromHighTrust(content.getSender())); queueName = getQueueName(RecipientId.fromHighTrust(content.getSender()));
@ -302,7 +302,7 @@ public final class PushProcessMessageJob extends BaseJob {
.retrieve(Recipient.externalPush(context, content.getSender()).getId(), .retrieve(Recipient.externalPush(context, content.getSender()).getId(),
content.getTimestamp()); content.getTimestamp());
if (earlyContent.isPresent()) { if (earlyContent.isPresent()) {
Log.i(TAG, "Found " + earlyContent.get().size() + " dependent item(s) that were retrieved earlier. Processing."); log(TAG, String.valueOf(content.getTimestamp()), "Found " + earlyContent.get().size() + " dependent item(s) that were retrieved earlier. Processing.");
for (SignalServiceContent earlyItem : earlyContent.get()) { for (SignalServiceContent earlyItem : earlyContent.get()) {
handleMessage(earlyItem, Optional.absent()); handleMessage(earlyItem, Optional.absent());
@ -311,7 +311,7 @@ public final class PushProcessMessageJob extends BaseJob {
} else if (exceptionMetadata != null) { } else if (exceptionMetadata != null) {
handleExceptionMessage(exceptionMetadata, optionalSmsMessageId); handleExceptionMessage(exceptionMetadata, optionalSmsMessageId);
} else { } else {
Log.w(TAG, "Bad state! messageState: " + messageState); warn(TAG, "Bad state! messageState: " + messageState);
} }
} }
@ -333,11 +333,11 @@ public final class PushProcessMessageJob extends BaseJob {
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context); GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
if (content == null || shouldIgnore(content)) { if (content == null || shouldIgnore(content)) {
Log.i(TAG, "Ignoring message."); log(TAG, content != null ? String.valueOf(content.getTimestamp()) : "null", "Ignoring message.");
return; return;
} }
Log.i(TAG, "Processing message ID " + content.getTimestamp()); log(TAG, String.valueOf(content.getTimestamp()), "Beginning message processing.");
if (content.getDataMessage().isPresent()) { if (content.getDataMessage().isPresent()) {
SignalServiceDataMessage message = content.getDataMessage().get(); SignalServiceDataMessage message = content.getDataMessage().get();
@ -349,13 +349,13 @@ public final class PushProcessMessageJob extends BaseJob {
GroupId.V2 groupIdV2 = groupId.get().requireV2(); GroupId.V2 groupIdV2 = groupId.get().requireV2();
if (!updateGv2GroupFromServerOrP2PChange(content, message.getGroupContext().get().getGroupV2().get())) { if (!updateGv2GroupFromServerOrP2PChange(content, message.getGroupContext().get().getGroupV2().get())) {
Log.i(TAG, "Ignoring GV2 message for group we are not currently in " + groupIdV2); log(TAG, String.valueOf(content.getTimestamp()), "Ignoring GV2 message for group we are not currently in " + groupIdV2);
return; return;
} }
Recipient sender = Recipient.externalPush(context, content.getSender()); Recipient sender = Recipient.externalPush(context, content.getSender());
if (!groupDatabase.isCurrentMember(groupIdV2, sender.getId())) { if (!groupDatabase.isCurrentMember(groupIdV2, sender.getId())) {
Log.i(TAG, "Ignoring GV2 message from member not in group " + groupIdV2); log(TAG, String.valueOf(content.getTimestamp()), "Ignoring GV2 message from member not in group " + groupIdV2);
return; return;
} }
} }
@ -395,15 +395,15 @@ public final class PushProcessMessageJob extends BaseJob {
else if (syncMessage.getBlockedList().isPresent()) handleSynchronizeBlockedListMessage(syncMessage.getBlockedList().get()); else if (syncMessage.getBlockedList().isPresent()) handleSynchronizeBlockedListMessage(syncMessage.getBlockedList().get());
else if (syncMessage.getFetchType().isPresent()) handleSynchronizeFetchMessage(syncMessage.getFetchType().get()); else if (syncMessage.getFetchType().isPresent()) handleSynchronizeFetchMessage(syncMessage.getFetchType().get());
else if (syncMessage.getMessageRequestResponse().isPresent()) handleSynchronizeMessageRequestResponse(syncMessage.getMessageRequestResponse().get()); else if (syncMessage.getMessageRequestResponse().isPresent()) handleSynchronizeMessageRequestResponse(syncMessage.getMessageRequestResponse().get());
else Log.w(TAG, "Contains no known sync types..."); else warn(TAG, String.valueOf(content.getTimestamp()), "Contains no known sync types...");
} else if (content.getCallMessage().isPresent()) { } else if (content.getCallMessage().isPresent()) {
Log.i(TAG, "Got call message..."); log(TAG, String.valueOf(content.getTimestamp()), "Got call message...");
SignalServiceCallMessage message = content.getCallMessage().get(); SignalServiceCallMessage message = content.getCallMessage().get();
Optional<Integer> destinationDeviceId = message.getDestinationDeviceId(); Optional<Integer> destinationDeviceId = message.getDestinationDeviceId();
if (destinationDeviceId.isPresent() && destinationDeviceId.get() != 1) { if (destinationDeviceId.isPresent() && destinationDeviceId.get() != 1) {
Log.i(TAG, String.format(Locale.US, "Ignoring call message that is not for this device! intended: %d, this: %d", destinationDeviceId.get(), 1)); log(TAG, String.valueOf(content.getTimestamp()), String.format(Locale.US, "Ignoring call message that is not for this device! intended: %d, this: %d", destinationDeviceId.get(), 1));
return; return;
} }
@ -420,15 +420,15 @@ public final class PushProcessMessageJob extends BaseJob {
} else if (content.getTypingMessage().isPresent()) { } else if (content.getTypingMessage().isPresent()) {
handleTypingMessage(content, content.getTypingMessage().get()); handleTypingMessage(content, content.getTypingMessage().get());
} else { } else {
Log.w(TAG, "Got unrecognized message..."); warn(TAG, String.valueOf(content.getTimestamp()), "Got unrecognized message!");
} }
resetRecipientToPush(Recipient.externalPush(context, content.getSender())); resetRecipientToPush(Recipient.externalPush(context, content.getSender()));
} catch (StorageFailedException e) { } catch (StorageFailedException e) {
Log.w(TAG, e); warn(TAG, String.valueOf(content.getTimestamp()), e);
handleCorruptMessage(e.getSender(), e.getSenderDevice(), timestamp, smsMessageId); handleCorruptMessage(e.getSender(), e.getSenderDevice(), timestamp, smsMessageId);
} catch (BadGroupIdException e) { } catch (BadGroupIdException e) {
Log.w(TAG, "Ignoring message with bad group id", e); warn(TAG, String.valueOf(content.getTimestamp()), "Ignoring message with bad group id", e);
} }
} }
@ -449,7 +449,7 @@ public final class PushProcessMessageJob extends BaseJob {
GroupManager.updateGroupFromServer(context, groupV2.getMasterKey(), groupV2.getRevision(), content.getTimestamp(), groupV2.getSignedGroupChange()); GroupManager.updateGroupFromServer(context, groupV2.getMasterKey(), groupV2.getRevision(), content.getTimestamp(), groupV2.getSignedGroupChange());
return true; return true;
} catch (GroupNotAMemberException e) { } catch (GroupNotAMemberException e) {
Log.w(TAG, "Ignoring message for a group we're not in"); warn(TAG, String.valueOf(content.getTimestamp()), "Ignoring message for a group we're not in");
return false; return false;
} }
} }
@ -458,39 +458,38 @@ public final class PushProcessMessageJob extends BaseJob {
Recipient sender = Recipient.external(context, e.sender); Recipient sender = Recipient.external(context, e.sender);
if (sender.isBlocked()) { if (sender.isBlocked()) {
Log.w(TAG, "Ignoring exception content from blocked sender, message state:" + messageState); warn(TAG, "Ignoring exception content from blocked sender, message state:" + messageState);
return; return;
} }
switch (messageState) { switch (messageState) {
case INVALID_VERSION: case INVALID_VERSION:
Log.w(TAG, "Handling invalid version (" + timestamp + ")"); warn(TAG, String.valueOf(timestamp), "Handling invalid version.");
handleInvalidVersionMessage(e.sender, e.senderDevice, timestamp, smsMessageId); handleInvalidVersionMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
break; break;
case CORRUPT_MESSAGE: case CORRUPT_MESSAGE:
Log.w(TAG, "Handling corrupt message (" + timestamp + ")"); warn(TAG, String.valueOf(timestamp), "Handling corrupt message.");
handleCorruptMessage(e.sender, e.senderDevice, timestamp, smsMessageId); handleCorruptMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
break; break;
case NO_SESSION: case NO_SESSION:
Log.w(TAG, "Handling no session (" + timestamp + ")"); warn(TAG, String.valueOf(timestamp), "Handling no session.");
handleNoSessionMessage(e.sender, e.senderDevice, timestamp, smsMessageId); handleNoSessionMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
break; break;
case LEGACY_MESSAGE: case LEGACY_MESSAGE:
Log.w(TAG, "Handling legacy message (" + timestamp + ")"); warn(TAG, String.valueOf(timestamp), "Handling legacy message.");
handleLegacyMessage(e.sender, e.senderDevice, timestamp, smsMessageId); handleLegacyMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
break; break;
case DUPLICATE_MESSAGE: case DUPLICATE_MESSAGE:
Log.w(TAG, "Handling duplicate message (" + timestamp + ")"); warn(TAG, String.valueOf(timestamp), "Duplicate message. Dropping.");
handleDuplicateMessage(e.sender, e.senderDevice, timestamp, smsMessageId);
break; break;
case UNSUPPORTED_DATA_MESSAGE: case UNSUPPORTED_DATA_MESSAGE:
Log.w(TAG, "Handling unsupported data message (" + timestamp + ")"); warn(TAG, String.valueOf(timestamp), "Handling unsupported data message.");
handleUnsupportedDataMessage(e.sender, e.senderDevice, Optional.fromNullable(e.groupId), timestamp, smsMessageId); handleUnsupportedDataMessage(e.sender, e.senderDevice, Optional.fromNullable(e.groupId), timestamp, smsMessageId);
break; break;
@ -503,7 +502,7 @@ public final class PushProcessMessageJob extends BaseJob {
@NonNull OfferMessage message, @NonNull OfferMessage message,
@NonNull Optional<Long> smsMessageId) @NonNull Optional<Long> smsMessageId)
{ {
Log.i(TAG, "handleCallOfferMessage..."); log(TAG, String.valueOf(content.getTimestamp()), "handleCallOfferMessage...");
if (smsMessageId.isPresent()) { if (smsMessageId.isPresent()) {
MessageDatabase database = DatabaseFactory.getSmsDatabase(context); MessageDatabase database = DatabaseFactory.getSmsDatabase(context);
@ -534,7 +533,7 @@ public final class PushProcessMessageJob extends BaseJob {
private void handleCallAnswerMessage(@NonNull SignalServiceContent content, private void handleCallAnswerMessage(@NonNull SignalServiceContent content,
@NonNull AnswerMessage message) @NonNull AnswerMessage message)
{ {
Log.i(TAG, "handleCallAnswerMessage..."); log(TAG, String.valueOf(content), "handleCallAnswerMessage...");
Intent intent = new Intent(context, WebRtcCallService.class); Intent intent = new Intent(context, WebRtcCallService.class);
Recipient recipient = Recipient.externalHighTrustPush(context, content.getSender()); Recipient recipient = Recipient.externalHighTrustPush(context, content.getSender());
RemotePeer remotePeer = new RemotePeer(recipient.getId()); RemotePeer remotePeer = new RemotePeer(recipient.getId());
@ -555,7 +554,7 @@ public final class PushProcessMessageJob extends BaseJob {
private void handleCallIceUpdateMessage(@NonNull SignalServiceContent content, private void handleCallIceUpdateMessage(@NonNull SignalServiceContent content,
@NonNull List<IceUpdateMessage> messages) @NonNull List<IceUpdateMessage> messages)
{ {
Log.i(TAG, "handleCallIceUpdateMessage... " + messages.size()); log(TAG, String.valueOf(content), "handleCallIceUpdateMessage... " + messages.size());
ArrayList<IceCandidateParcel> iceCandidates = new ArrayList<>(messages.size()); ArrayList<IceCandidateParcel> iceCandidates = new ArrayList<>(messages.size());
long callId = -1; long callId = -1;
@ -580,7 +579,7 @@ public final class PushProcessMessageJob extends BaseJob {
@NonNull HangupMessage message, @NonNull HangupMessage message,
@NonNull Optional<Long> smsMessageId) @NonNull Optional<Long> smsMessageId)
{ {
Log.i(TAG, "handleCallHangupMessage"); log(TAG, String.valueOf(content), "handleCallHangupMessage");
if (smsMessageId.isPresent()) { if (smsMessageId.isPresent()) {
DatabaseFactory.getSmsDatabase(context).markAsMissedCall(smsMessageId.get()); DatabaseFactory.getSmsDatabase(context).markAsMissedCall(smsMessageId.get());
} else { } else {
@ -602,7 +601,7 @@ public final class PushProcessMessageJob extends BaseJob {
private void handleCallBusyMessage(@NonNull SignalServiceContent content, private void handleCallBusyMessage(@NonNull SignalServiceContent content,
@NonNull BusyMessage message) @NonNull BusyMessage message)
{ {
Log.i(TAG, "handleCallBusyMessage"); log(TAG, String.valueOf(content.getTimestamp()), "handleCallBusyMessage");
Intent intent = new Intent(context, WebRtcCallService.class); Intent intent = new Intent(context, WebRtcCallService.class);
RemotePeer remotePeer = new RemotePeer(Recipient.externalHighTrustPush(context, content.getSender()).getId()); RemotePeer remotePeer = new RemotePeer(Recipient.externalHighTrustPush(context, content.getSender()).getId());
@ -699,10 +698,10 @@ public final class PushProcessMessageJob extends BaseJob {
if (groupV1.getType() != SignalServiceGroup.Type.REQUEST_INFO) { if (groupV1.getType() != SignalServiceGroup.Type.REQUEST_INFO) {
ApplicationDependencies.getJobManager().add(new RequestGroupInfoJob(Recipient.externalHighTrustPush(context, content.getSender()).getId(), GroupId.v1(groupV1.getGroupId()))); ApplicationDependencies.getJobManager().add(new RequestGroupInfoJob(Recipient.externalHighTrustPush(context, content.getSender()).getId(), GroupId.v1(groupV1.getGroupId())));
} else { } else {
Log.w(TAG, "Received a REQUEST_INFO message for a group we don't know about. Ignoring."); warn(TAG, String.valueOf(content.getTimestamp()), "Received a REQUEST_INFO message for a group we don't know about. Ignoring.");
} }
} else { } else {
Log.w(TAG, "Received a message for a group we don't know about without a GV1 context. Ignoring."); warn(TAG, String.valueOf(content.getTimestamp()), "Received a message for a group we don't know about without a GV1 context. Ignoring.");
} }
} }
@ -713,7 +712,7 @@ public final class PushProcessMessageJob extends BaseJob {
throws StorageFailedException, BadGroupIdException throws StorageFailedException, BadGroupIdException
{ {
if (groupId.isPresent() && groupId.get().isV2()) { if (groupId.isPresent() && groupId.get().isV2()) {
Log.w(TAG, "Expiration update received for GV2. Ignoring."); warn(TAG, String.valueOf(content.getTimestamp()), "Expiration update received for GV2. Ignoring.");
return; return;
} }
@ -722,7 +721,7 @@ public final class PushProcessMessageJob extends BaseJob {
Recipient recipient = getMessageDestination(content, groupContext); Recipient recipient = getMessageDestination(content, groupContext);
if (recipient.getExpireMessages() == expiresInSeconds) { if (recipient.getExpireMessages() == expiresInSeconds) {
Log.i(TAG, "No change in message expiry for group. Ignoring."); log(TAG, String.valueOf(content.getTimestamp()), "No change in message expiry for group. Ignoring.");
return; return;
} }
@ -777,9 +776,9 @@ public final class PushProcessMessageJob extends BaseJob {
ApplicationDependencies.getMessageNotifier().updateNotification(context, targetMessage.getThreadId(), false); ApplicationDependencies.getMessageNotifier().updateNotification(context, targetMessage.getThreadId(), false);
} }
} else if (targetMessage != null) { } else if (targetMessage != null) {
Log.w(TAG, "[handleReaction] Found a matching message, but it's flagged as remotely deleted. timestamp: " + reaction.getTargetSentTimestamp() + " author: " + targetAuthor.getId()); warn(TAG, String.valueOf(content.getTimestamp()), "[handleReaction] Found a matching message, but it's flagged as remotely deleted. timestamp: " + reaction.getTargetSentTimestamp() + " author: " + targetAuthor.getId());
} else { } else {
Log.w(TAG, "[handleReaction] Could not find matching message! timestamp: " + reaction.getTargetSentTimestamp() + " author: " + targetAuthor.getId()); warn(TAG, String.valueOf(content.getTimestamp()), "[handleReaction] Could not find matching message! timestamp: " + reaction.getTargetSentTimestamp() + " author: " + targetAuthor.getId());
ApplicationDependencies.getEarlyMessageCache().store(targetAuthor.getId(), reaction.getTargetSentTimestamp(), content); ApplicationDependencies.getEarlyMessageCache().store(targetAuthor.getId(), reaction.getTargetSentTimestamp(), content);
} }
} }
@ -795,11 +794,11 @@ public final class PushProcessMessageJob extends BaseJob {
db.markAsRemoteDelete(targetMessage.getId()); db.markAsRemoteDelete(targetMessage.getId());
ApplicationDependencies.getMessageNotifier().updateNotification(context, targetMessage.getThreadId(), false); ApplicationDependencies.getMessageNotifier().updateNotification(context, targetMessage.getThreadId(), false);
} else if (targetMessage == null) { } else if (targetMessage == null) {
Log.w(TAG, "[handleRemoteDelete] Could not find matching message! timestamp: " + delete.getTargetSentTimestamp() + " author: " + sender.getId()); warn(TAG, String.valueOf(content.getTimestamp()), "[handleRemoteDelete] Could not find matching message! timestamp: " + delete.getTargetSentTimestamp() + " author: " + sender.getId());
ApplicationDependencies.getEarlyMessageCache().store(sender.getId(), delete.getTargetSentTimestamp(), content); ApplicationDependencies.getEarlyMessageCache().store(sender.getId(), delete.getTargetSentTimestamp(), content);
} else { } else {
Log.w(TAG, String.format(Locale.ENGLISH, "[handleRemoteDelete] Invalid remote delete! deleteTime: %d, targetTime: %d, deleteAuthor: %s, targetAuthor: %s", warn(TAG, String.valueOf(content.getTimestamp()), String.format(Locale.ENGLISH, "[handleRemoteDelete] Invalid remote delete! deleteTime: %d, targetTime: %d, deleteAuthor: %s, targetAuthor: %s",
content.getServerReceivedTimestamp(), targetMessage.getServerTimestamp(), sender.getId(), targetMessage.getRecipient().getId())); content.getServerReceivedTimestamp(), targetMessage.getServerTimestamp(), sender.getId(), targetMessage.getRecipient().getId()));
} }
} }
@ -824,7 +823,7 @@ public final class PushProcessMessageJob extends BaseJob {
break; break;
} }
} else { } else {
Log.w(TAG, "Received incomplete sticker pack operation sync."); warn(TAG, "Received incomplete sticker pack operation sync.");
} }
} }
} }
@ -851,8 +850,8 @@ public final class PushProcessMessageJob extends BaseJob {
DatabaseFactory.getRecipientDatabase(context).applyBlockedUpdate(blockMessage.getAddresses(), blockMessage.getGroupIds()); DatabaseFactory.getRecipientDatabase(context).applyBlockedUpdate(blockMessage.getAddresses(), blockMessage.getGroupIds());
} }
private static void handleSynchronizeFetchMessage(@NonNull SignalServiceSyncMessage.FetchType fetchType) { private void handleSynchronizeFetchMessage(@NonNull SignalServiceSyncMessage.FetchType fetchType) {
Log.i(TAG, "Received fetch request with type: " + fetchType); log(TAG, "Received fetch request with type: " + fetchType);
switch (fetchType) { switch (fetchType) {
case LOCAL_PROFILE: case LOCAL_PROFILE:
@ -880,7 +879,7 @@ public final class PushProcessMessageJob extends BaseJob {
GroupId groupId = GroupId.v1(response.getGroupId().get()); GroupId groupId = GroupId.v1(response.getGroupId().get());
recipient = Recipient.externalGroup(context, groupId); recipient = Recipient.externalGroup(context, groupId);
} else { } else {
Log.w(TAG, "Message request response was missing a thread recipient! Skipping."); warn(TAG, "Message request response was missing a thread recipient! Skipping.");
return; return;
} }
@ -905,7 +904,7 @@ public final class PushProcessMessageJob extends BaseJob {
if (threadId > 0) threadDatabase.deleteConversation(threadId); if (threadId > 0) threadDatabase.deleteConversation(threadId);
break; break;
default: default:
Log.w(TAG, "Got an unknown response type! Skipping"); warn(TAG, "Got an unknown response type! Skipping");
break; break;
} }
} }
@ -914,6 +913,8 @@ public final class PushProcessMessageJob extends BaseJob {
@NonNull SentTranscriptMessage message) @NonNull SentTranscriptMessage message)
throws StorageFailedException, BadGroupIdException, IOException, GroupChangeBusyException throws StorageFailedException, BadGroupIdException, IOException, GroupChangeBusyException
{ {
log(TAG, String.valueOf(content.getTimestamp()), "Processing sent transcript for message with ID " + message.getTimestamp());
try { try {
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context); GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
@ -973,7 +974,7 @@ public final class PushProcessMessageJob extends BaseJob {
GroupId.V2 groupIdV2 = GroupId.v2(signalServiceGroupV2.getMasterKey()); GroupId.V2 groupIdV2 = GroupId.v2(signalServiceGroupV2.getMasterKey());
if (!updateGv2GroupFromServerOrP2PChange(content, signalServiceGroupV2)) { if (!updateGv2GroupFromServerOrP2PChange(content, signalServiceGroupV2)) {
Log.i(TAG, "Ignoring GV2 message for group we are not currently in " + groupIdV2); log(TAG, String.valueOf(content.getTimestamp()), "Ignoring GV2 message for group we are not currently in " + groupIdV2);
} }
} }
@ -1221,7 +1222,7 @@ public final class PushProcessMessageJob extends BaseJob {
Recipient recipient = getSyncMessageDestination(message); Recipient recipient = getSyncMessageDestination(message);
if (!recipient.isGroup()) { if (!recipient.isGroup()) {
Log.w(TAG, "Got recipient update for a non-group message! Skipping."); warn(TAG, "Got recipient update for a non-group message! Skipping.");
return; return;
} }
@ -1229,12 +1230,12 @@ public final class PushProcessMessageJob extends BaseJob {
MessageRecord record = database.getMessageFor(message.getTimestamp(), Recipient.self().getId()); MessageRecord record = database.getMessageFor(message.getTimestamp(), Recipient.self().getId());
if (record == null) { if (record == null) {
Log.w(TAG, "Got recipient update for non-existing message! Skipping."); warn(TAG, "Got recipient update for non-existing message! Skipping.");
return; return;
} }
if (!record.isMms()) { if (!record.isMms()) {
Log.w(TAG, "Recipient update matched a non-MMS message! Skipping."); warn(TAG, "Recipient update matched a non-MMS message! Skipping.");
return; return;
} }
@ -1477,22 +1478,6 @@ public final class PushProcessMessageJob extends BaseJob {
} }
} }
@SuppressWarnings("unused")
private void handleDuplicateMessage(@NonNull String sender, int senderDeviceId, long timestamp,
@NonNull Optional<Long> smsMessageId)
{
// Let's start ignoring these now
// SmsDatabase smsDatabase = DatabaseFactory.getEncryptingSmsDatabase(context);
//
// if (smsMessageId <= 0) {
// Pair<Long, Long> messageAndThreadId = insertPlaceholder(masterSecret, envelope);
// smsDatabase.markAsDecryptDuplicate(messageAndThreadId.first);
// ApplicationDependencies.getMessageNotifier().updateNotification(context, masterSecret, messageAndThreadId.second);
// } else {
// smsDatabase.markAsDecryptDuplicate(smsMessageId);
// }
}
private void handleProfileKey(@NonNull SignalServiceContent content, private void handleProfileKey(@NonNull SignalServiceContent content,
@NonNull byte[] messageProfileKeyBytes) @NonNull byte[] messageProfileKeyBytes)
{ {
@ -1505,7 +1490,7 @@ public final class PushProcessMessageJob extends BaseJob {
ApplicationDependencies.getJobManager().add(RetrieveProfileJob.forRecipient(recipient.getId())); ApplicationDependencies.getJobManager().add(RetrieveProfileJob.forRecipient(recipient.getId()));
} }
} else { } else {
Log.w(TAG, "Ignored invalid profile key seen in message"); warn(TAG, String.valueOf(content.getTimestamp()), "Ignored invalid profile key seen in message");
} }
} }
@ -1520,7 +1505,7 @@ public final class PushProcessMessageJob extends BaseJob {
@NonNull SignalServiceReceiptMessage message) @NonNull SignalServiceReceiptMessage message)
{ {
for (long timestamp : message.getTimestamps()) { for (long timestamp : message.getTimestamps()) {
Log.i(TAG, String.format("Received encrypted delivery receipt: (XXXXX, %d)", timestamp)); log(TAG, String.format("Received encrypted delivery receipt: (XXXXX, %d)", timestamp));
DatabaseFactory.getMmsSmsDatabase(context) DatabaseFactory.getMmsSmsDatabase(context)
.incrementDeliveryReceiptCount(new SyncMessageId(RecipientId.fromHighTrust(content.getSender()), timestamp), System.currentTimeMillis()); .incrementDeliveryReceiptCount(new SyncMessageId(RecipientId.fromHighTrust(content.getSender()), timestamp), System.currentTimeMillis());
} }
@ -1532,7 +1517,7 @@ public final class PushProcessMessageJob extends BaseJob {
{ {
if (TextSecurePreferences.isReadReceiptsEnabled(context)) { if (TextSecurePreferences.isReadReceiptsEnabled(context)) {
for (long timestamp : message.getTimestamps()) { for (long timestamp : message.getTimestamps()) {
Log.i(TAG, String.format("Received encrypted read receipt: (XXXXX, %d)", timestamp)); log(TAG, String.format("Received encrypted read receipt: (XXXXX, %d)", timestamp));
Recipient sender = Recipient.externalHighTrustPush(context, content.getSender()); Recipient sender = Recipient.externalHighTrustPush(context, content.getSender());
SyncMessageId id = new SyncMessageId(sender.getId(), timestamp); SyncMessageId id = new SyncMessageId(sender.getId(), timestamp);
@ -1540,7 +1525,7 @@ public final class PushProcessMessageJob extends BaseJob {
.incrementReadReceiptCount(id, content.getTimestamp()); .incrementReadReceiptCount(id, content.getTimestamp());
if (!handled) { if (!handled) {
Log.w(TAG, "[handleReadReceipt] Could not find matching message! timestamp: " + timestamp + " author: " + sender.getId()); warn(TAG, String.valueOf(content.getTimestamp()), "[handleReadReceipt] Could not find matching message! timestamp: " + timestamp + " author: " + sender.getId());
ApplicationDependencies.getEarlyMessageCache().store(sender.getId(), timestamp, content); ApplicationDependencies.getEarlyMessageCache().store(sender.getId(), timestamp, content);
} }
} }
@ -1563,7 +1548,7 @@ public final class PushProcessMessageJob extends BaseJob {
GroupId.Push groupId = GroupId.push(typingMessage.getGroupId().get()); GroupId.Push groupId = GroupId.push(typingMessage.getGroupId().get());
if (!DatabaseFactory.getGroupDatabase(context).isCurrentMember(groupId, author.getId())) { if (!DatabaseFactory.getGroupDatabase(context).isCurrentMember(groupId, author.getId())) {
Log.w(TAG, "Seen typing indicator for non-member"); warn(TAG, String.valueOf(content.getTimestamp()), "Seen typing indicator for non-member");
return; return;
} }
@ -1575,7 +1560,7 @@ public final class PushProcessMessageJob extends BaseJob {
} }
if (threadId <= 0) { if (threadId <= 0) {
Log.w(TAG, "Couldn't find a matching thread for a typing message."); warn(TAG, String.valueOf(content.getTimestamp()), "Couldn't find a matching thread for a typing message.");
return; return;
} }
@ -1607,12 +1592,12 @@ public final class PushProcessMessageJob extends BaseJob {
if (!quote.isPresent()) return Optional.absent(); if (!quote.isPresent()) return Optional.absent();
if (quote.get().getId() <= 0) { if (quote.get().getId() <= 0) {
Log.w(TAG, "Received quote without an ID! Ignoring..."); warn(TAG, "Received quote without an ID! Ignoring...");
return Optional.absent(); return Optional.absent();
} }
if (quote.get().getAuthor() == null) { if (quote.get().getAuthor() == null) {
Log.w(TAG, "Received quote without an author! Ignoring..."); warn(TAG, "Received quote without an author! Ignoring...");
return Optional.absent(); return Optional.absent();
} }
@ -1620,7 +1605,7 @@ public final class PushProcessMessageJob extends BaseJob {
MessageRecord message = DatabaseFactory.getMmsSmsDatabase(context).getMessageFor(quote.get().getId(), author); MessageRecord message = DatabaseFactory.getMmsSmsDatabase(context).getMessageFor(quote.get().getId(), author);
if (message != null && !message.isRemoteDelete()) { if (message != null && !message.isRemoteDelete()) {
Log.i(TAG, "Found matching message record..."); log(TAG, "Found matching message record...");
List<Attachment> attachments = new LinkedList<>(); List<Attachment> attachments = new LinkedList<>();
List<Mention> mentions = new LinkedList<>(); List<Mention> mentions = new LinkedList<>();
@ -1646,10 +1631,10 @@ public final class PushProcessMessageJob extends BaseJob {
return Optional.of(new QuoteModel(quote.get().getId(), author, message.getBody(), false, attachments, mentions)); return Optional.of(new QuoteModel(quote.get().getId(), author, message.getBody(), false, attachments, mentions));
} else if (message != null) { } else if (message != null) {
Log.w(TAG, "Found the target for the quote, but it's flagged as remotely deleted."); warn(TAG, "Found the target for the quote, but it's flagged as remotely deleted.");
} }
Log.w(TAG, "Didn't find matching message record..."); warn(TAG, "Didn't find matching message record...");
return Optional.of(new QuoteModel(quote.get().getId(), return Optional.of(new QuoteModel(quote.get().getId(),
author, author,
@ -1665,7 +1650,7 @@ public final class PushProcessMessageJob extends BaseJob {
} }
if (sticker.get().getPackId() == null || sticker.get().getPackKey() == null || sticker.get().getAttachment() == null) { if (sticker.get().getPackId() == null || sticker.get().getPackKey() == null || sticker.get().getAttachment() == null) {
Log.w(TAG, "Malformed sticker!"); warn(TAG, "Malformed sticker!");
return Optional.absent(); return Optional.absent();
} }
@ -1711,7 +1696,7 @@ public final class PushProcessMessageJob extends BaseJob {
return Optional.of(contacts); return Optional.of(contacts);
} }
private static Optional<List<LinkPreview>> getLinkPreviews(Optional<List<Preview>> previews, @NonNull String message) { private Optional<List<LinkPreview>> getLinkPreviews(Optional<List<Preview>> previews, @NonNull String message) {
if (!previews.isPresent()) return Optional.absent(); if (!previews.isPresent()) return Optional.absent();
List<LinkPreview> linkPreviews = new ArrayList<>(previews.get().size()); List<LinkPreview> linkPreviews = new ArrayList<>(previews.get().size());
@ -1729,7 +1714,7 @@ public final class PushProcessMessageJob extends BaseJob {
LinkPreview linkPreview = new LinkPreview(url.get(), title.or(""), description.or(""), preview.getDate(), thumbnail); LinkPreview linkPreview = new LinkPreview(url.get(), title.or(""), description.or(""), preview.getDate(), thumbnail);
linkPreviews.add(linkPreview); linkPreviews.add(linkPreview);
} else { } else {
Log.w(TAG, String.format("Discarding an invalid link preview. hasTitle: %b presentInBody: %b validDomain: %b", hasTitle, presentInBody, validDomain)); warn(TAG, String.format("Discarding an invalid link preview. hasTitle: %b presentInBody: %b validDomain: %b", hasTitle, presentInBody, validDomain));
} }
} }
@ -1813,7 +1798,7 @@ public final class PushProcessMessageJob extends BaseJob {
throws BadGroupIdException throws BadGroupIdException
{ {
if (content == null) { if (content == null) {
Log.w(TAG, "Got a message with null content."); warn(TAG, "Got a message with null content.");
return true; return true;
} }
@ -1880,7 +1865,7 @@ public final class PushProcessMessageJob extends BaseJob {
downloadJob.setContext(context); downloadJob.setContext(context);
downloadJob.doWork(); downloadJob.doWork();
} catch (Exception e) { } catch (Exception e) {
Log.w(TAG, "Failed to download sticker inline. Scheduling."); warn(TAG, "Failed to download sticker inline. Scheduling.");
ApplicationDependencies.getJobManager().add(downloadJob); ApplicationDependencies.getJobManager().add(downloadJob);
} }
} }