|
|
@ -3,26 +3,20 @@ package org.thoughtcrime.securesms.loki.protocol
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.Context
|
|
|
|
import com.google.protobuf.ByteString
|
|
|
|
import com.google.protobuf.ByteString
|
|
|
|
import org.session.libsession.messaging.MessagingConfiguration
|
|
|
|
import org.session.libsession.messaging.MessagingConfiguration
|
|
|
|
|
|
|
|
import org.session.libsession.messaging.messages.Destination
|
|
|
|
import org.session.libsession.messaging.messages.control.ConfigurationMessage
|
|
|
|
import org.session.libsession.messaging.messages.control.ConfigurationMessage
|
|
|
|
|
|
|
|
import org.session.libsession.messaging.sending_receiving.MessageSender
|
|
|
|
import org.session.libsession.messaging.threads.Address
|
|
|
|
import org.session.libsession.messaging.threads.Address
|
|
|
|
import org.session.libsession.messaging.threads.recipients.Recipient
|
|
|
|
|
|
|
|
import org.session.libsession.utilities.TextSecurePreferences
|
|
|
|
import org.session.libsession.utilities.TextSecurePreferences
|
|
|
|
import org.session.libsignal.libsignal.util.guava.Optional
|
|
|
|
|
|
|
|
import org.session.libsignal.service.api.push.SignalServiceAddress
|
|
|
|
|
|
|
|
import org.session.libsignal.service.internal.push.SignalServiceProtos
|
|
|
|
import org.session.libsignal.service.internal.push.SignalServiceProtos
|
|
|
|
import org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage
|
|
|
|
import org.session.libsignal.service.internal.push.SignalServiceProtos.DataMessage
|
|
|
|
import org.session.libsignal.service.loki.utilities.removing05PrefixIfNeeded
|
|
|
|
import org.session.libsignal.service.loki.utilities.removing05PrefixIfNeeded
|
|
|
|
import org.session.libsignal.utilities.Hex
|
|
|
|
import org.session.libsignal.utilities.Hex
|
|
|
|
import org.session.libsignal.utilities.logging.Log
|
|
|
|
|
|
|
|
import org.thoughtcrime.securesms.ApplicationContext
|
|
|
|
|
|
|
|
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil
|
|
|
|
|
|
|
|
import org.thoughtcrime.securesms.loki.utilities.ContactUtilities
|
|
|
|
import org.thoughtcrime.securesms.loki.utilities.ContactUtilities
|
|
|
|
import org.thoughtcrime.securesms.loki.utilities.OpenGroupUtilities
|
|
|
|
import org.thoughtcrime.securesms.loki.utilities.OpenGroupUtilities
|
|
|
|
import java.util.*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
object MultiDeviceProtocol {
|
|
|
|
object MultiDeviceProtocol {
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: refactor this to use new message sending job
|
|
|
|
|
|
|
|
@JvmStatic
|
|
|
|
@JvmStatic
|
|
|
|
fun syncConfigurationIfNeeded(context: Context) {
|
|
|
|
fun syncConfigurationIfNeeded(context: Context) {
|
|
|
|
val userPublicKey = TextSecurePreferences.getLocalNumber(context) ?: return
|
|
|
|
val userPublicKey = TextSecurePreferences.getLocalNumber(context) ?: return
|
|
|
@ -35,22 +29,10 @@ object MultiDeviceProtocol {
|
|
|
|
ConfigurationMessage.Contact(recipient.address.serialize(), recipient.name!!, recipient.profileAvatar, recipient.profileKey)
|
|
|
|
ConfigurationMessage.Contact(recipient.address.serialize(), recipient.name!!, recipient.profileAvatar, recipient.profileKey)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val configurationMessage = ConfigurationMessage.getCurrent(contacts) ?: return
|
|
|
|
val configurationMessage = ConfigurationMessage.getCurrent(contacts) ?: return
|
|
|
|
val serializedMessage = configurationMessage.toProto()!!.toByteArray()
|
|
|
|
MessageSender.send(configurationMessage, Address.fromSerialized(userPublicKey))
|
|
|
|
val messageSender = ApplicationContext.getInstance(context).communicationModule.provideSignalMessageSender()
|
|
|
|
TextSecurePreferences.setLastConfigurationSyncTime(context, now)
|
|
|
|
val address = SignalServiceAddress(userPublicKey)
|
|
|
|
|
|
|
|
val recipient = Recipient.from(context, Address.fromSerialized(userPublicKey), false)
|
|
|
|
|
|
|
|
val udAccess = UnidentifiedAccessUtil.getAccessFor(context, recipient)
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
messageSender.sendMessage(0, address, udAccess,
|
|
|
|
|
|
|
|
Date().time, serializedMessage, false, configurationMessage.ttl.toInt(),
|
|
|
|
|
|
|
|
true, false, false, Optional.absent())
|
|
|
|
|
|
|
|
TextSecurePreferences.setLastConfigurationSyncTime(context, now)
|
|
|
|
|
|
|
|
} catch (e: Exception) {
|
|
|
|
|
|
|
|
Log.d("Loki", "Failed to send configuration message due to error: $e.")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: refactor this to use new message sending job
|
|
|
|
|
|
|
|
fun forceSyncConfigurationNowIfNeeded(context: Context) {
|
|
|
|
fun forceSyncConfigurationNowIfNeeded(context: Context) {
|
|
|
|
val userPublicKey = TextSecurePreferences.getLocalNumber(context) ?: return
|
|
|
|
val userPublicKey = TextSecurePreferences.getLocalNumber(context) ?: return
|
|
|
|
val contacts = ContactUtilities.getAllContacts(context).filter { recipient ->
|
|
|
|
val contacts = ContactUtilities.getAllContacts(context).filter { recipient ->
|
|
|
@ -59,18 +41,7 @@ object MultiDeviceProtocol {
|
|
|
|
ConfigurationMessage.Contact(recipient.address.serialize(), recipient.name!!, recipient.profileAvatar, recipient.profileKey)
|
|
|
|
ConfigurationMessage.Contact(recipient.address.serialize(), recipient.name!!, recipient.profileAvatar, recipient.profileKey)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val configurationMessage = ConfigurationMessage.getCurrent(contacts) ?: return
|
|
|
|
val configurationMessage = ConfigurationMessage.getCurrent(contacts) ?: return
|
|
|
|
val serializedMessage = configurationMessage.toProto()!!.toByteArray()
|
|
|
|
MessageSender.send(configurationMessage, Destination.from(Address.fromSerialized(userPublicKey)))
|
|
|
|
val messageSender = ApplicationContext.getInstance(context).communicationModule.provideSignalMessageSender()
|
|
|
|
|
|
|
|
val address = SignalServiceAddress(userPublicKey)
|
|
|
|
|
|
|
|
val recipient = Recipient.from(context, Address.fromSerialized(userPublicKey), false)
|
|
|
|
|
|
|
|
val udAccess = UnidentifiedAccessUtil.getAccessFor(context, recipient)
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
messageSender.sendMessage(0, address, udAccess,
|
|
|
|
|
|
|
|
Date().time, serializedMessage, false, configurationMessage.ttl.toInt(),
|
|
|
|
|
|
|
|
true, false, false, Optional.absent())
|
|
|
|
|
|
|
|
} catch (e: Exception) {
|
|
|
|
|
|
|
|
Log.d("Loki", "Failed to send configuration message due to error: $e.")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: remove this after we migrate to new message receiving pipeline
|
|
|
|
// TODO: remove this after we migrate to new message receiving pipeline
|
|
|
|