From daca3e2531d1dffa2572c82f8317750cb152e4d4 Mon Sep 17 00:00:00 2001 From: Harris Date: Wed, 15 Jun 2022 16:54:45 +1000 Subject: [PATCH] Use current time + offset in snode message timestamps (#904) * fix: use current time in message sender's snode message timestamps to prevent 406 from repeat failed message sends * build: update build number --- app/build.gradle | 4 ++-- .../messaging/sending_receiving/MessageSender.kt | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e10b42e9dc..67bfbb56b7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -159,8 +159,8 @@ dependencies { testImplementation 'org.robolectric:shadows-multidex:4.4' } -def canonicalVersionCode = 283 -def canonicalVersionName = "1.13.4" +def canonicalVersionCode = 285 +def canonicalVersionName = "1.13.5" def postFixSize = 10 def abiPostFix = ['armeabi-v7a' : 1, 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 75b6e68d83..2209c7e40e 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 @@ -79,6 +79,9 @@ object MessageSender { if (message.sentTimestamp == null) { message.sentTimestamp = System.currentTimeMillis() // Visible messages will already have their sent timestamp set } + + val messageSendTime = System.currentTimeMillis() + message.sender = userPublicKey val isSelfSend = (message.recipient == userPublicKey) // Set the failure handler (need it here already for precondition failure handling) @@ -159,14 +162,14 @@ object MessageSender { 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", message.sentTimestamp!!) + SnodeModule.shared.broadcaster.broadcast("calculatingPoW", messageSendTime) } val base64EncodedData = Base64.encodeBytes(wrappedMessage) // Send the result - val timestamp = message.sentTimestamp!! + SnodeAPI.clockOffset + val timestamp = messageSendTime + SnodeAPI.clockOffset val snodeMessage = SnodeMessage(message.recipient!!, base64EncodedData, message.ttl, timestamp) if (destination is Destination.Contact && message is VisibleMessage && !isSelfSend) { - SnodeModule.shared.broadcaster.broadcast("sendingMessage", message.sentTimestamp!!) + SnodeModule.shared.broadcaster.broadcast("sendingMessage", messageSendTime) } namespaces.map { namespace -> SnodeAPI.sendMessage(snodeMessage, requiresAuth = false, namespace = namespace) }.let { promises -> var isSuccess = false @@ -177,7 +180,7 @@ object MessageSender { if (isSuccess) { return@success } // Succeed as soon as the first promise succeeds isSuccess = true if (destination is Destination.Contact && message is VisibleMessage && !isSelfSend) { - SnodeModule.shared.broadcaster.broadcast("messageSent", message.sentTimestamp!!) + SnodeModule.shared.broadcaster.broadcast("messageSent", messageSendTime) } val hash = it["hash"] as? String message.serverHash = hash