mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-31 12:26:14 +00:00
feat: added basic call functionality
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
package org.session.libsession.messaging.messages.control
|
||||
|
||||
import org.session.libsignal.protos.SignalServiceProtos
|
||||
import org.session.libsignal.utilities.Log
|
||||
|
||||
class CallMessage(): ControlMessage() {
|
||||
var type: SignalServiceProtos.CallMessage.Type? = null
|
||||
var sdps: List<String> = listOf()
|
||||
var sdpMLineIndexes: List<Int> = listOf()
|
||||
var sdpMids: List<String> = listOf()
|
||||
|
||||
override val isSelfSendValid: Boolean = false
|
||||
|
||||
override fun isValid(): Boolean = super.isValid() && type != null && !sdps.isNullOrEmpty()
|
||||
|
||||
constructor(type: SignalServiceProtos.CallMessage.Type,
|
||||
sdps: List<String>,
|
||||
sdpMLineIndexes: List<Int>,
|
||||
sdpMids: List<String>) : this() {
|
||||
this.type = type
|
||||
this.sdps = sdps
|
||||
this.sdpMLineIndexes = sdpMLineIndexes
|
||||
this.sdpMids = sdpMids
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val TAG = "CallMessage"
|
||||
|
||||
fun fromProto(proto: SignalServiceProtos.Content): CallMessage? {
|
||||
val callMessageProto = if (proto.hasCallMessage()) proto.callMessage else return null
|
||||
val type = callMessageProto.type
|
||||
val sdps = callMessageProto.sdpsList
|
||||
val sdpMLineIndexes = callMessageProto.sdpMLineIndexesList
|
||||
val sdpMids = callMessageProto.sdpMidsList
|
||||
return CallMessage(type,sdps, sdpMLineIndexes, sdpMids)
|
||||
}
|
||||
}
|
||||
|
||||
override fun toProto(): SignalServiceProtos.Content? {
|
||||
val nonNullType = type ?: run {
|
||||
Log.w(TAG,"Couldn't construct call message request proto from: $this")
|
||||
return null
|
||||
}
|
||||
|
||||
val callMessage = SignalServiceProtos.CallMessage.newBuilder()
|
||||
.setType(nonNullType)
|
||||
.addAllSdps(sdps)
|
||||
.addAllSdpMLineIndexes(sdpMLineIndexes)
|
||||
.addAllSdpMids(sdpMids)
|
||||
|
||||
return SignalServiceProtos.Content.newBuilder()
|
||||
.setCallMessage(
|
||||
callMessage
|
||||
)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
@@ -95,6 +95,7 @@ object MessageReceiver {
|
||||
ExpirationTimerUpdate.fromProto(proto) ?:
|
||||
ConfigurationMessage.fromProto(proto) ?:
|
||||
UnsendRequest.fromProto(proto) ?:
|
||||
CallMessage.fromProto(proto) ?:
|
||||
VisibleMessage.fromProto(proto) ?: throw Error.UnknownMessage
|
||||
// Ignore self send if needed
|
||||
if (!message.isSelfSendValid && sender == userPublicKey) throw Error.SelfSend
|
||||
|
||||
@@ -14,24 +14,20 @@ import org.session.libsession.messaging.sending_receiving.link_preview.LinkPrevi
|
||||
import org.session.libsession.messaging.sending_receiving.notifications.PushNotificationAPI
|
||||
import org.session.libsession.messaging.sending_receiving.pollers.ClosedGroupPollerV2
|
||||
import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel
|
||||
import org.session.libsession.messaging.utilities.WebRtcUtils
|
||||
import org.session.libsession.snode.SnodeAPI
|
||||
import org.session.libsession.utilities.Address
|
||||
import org.session.libsession.utilities.GroupRecord
|
||||
import org.session.libsession.utilities.*
|
||||
import org.session.libsession.utilities.recipients.Recipient
|
||||
import org.session.libsession.utilities.GroupUtil
|
||||
import org.session.libsession.utilities.SSKEnvironment
|
||||
import org.session.libsession.utilities.TextSecurePreferences
|
||||
import org.session.libsession.utilities.ProfileKeyUtil
|
||||
import org.session.libsignal.crypto.ecc.DjbECPrivateKey
|
||||
import org.session.libsignal.crypto.ecc.DjbECPublicKey
|
||||
import org.session.libsignal.crypto.ecc.ECKeyPair
|
||||
import org.session.libsignal.utilities.guava.Optional
|
||||
import org.session.libsignal.messages.SignalServiceGroup
|
||||
import org.session.libsignal.protos.SignalServiceProtos
|
||||
import org.session.libsignal.utilities.removing05PrefixIfNeeded
|
||||
import org.session.libsignal.utilities.toHexString
|
||||
import org.session.libsignal.utilities.Base64
|
||||
import org.session.libsignal.utilities.Log
|
||||
import org.session.libsignal.utilities.guava.Optional
|
||||
import org.session.libsignal.utilities.removing05PrefixIfNeeded
|
||||
import org.session.libsignal.utilities.toHexString
|
||||
import java.security.MessageDigest
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
@@ -52,6 +48,7 @@ fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content,
|
||||
is ConfigurationMessage -> handleConfigurationMessage(message)
|
||||
is UnsendRequest -> handleUnsendRequest(message)
|
||||
is VisibleMessage -> handleVisibleMessage(message, proto, openGroupID)
|
||||
is CallMessage -> handleCallMessage(message)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,6 +58,11 @@ private fun MessageReceiver.handleReadReceipt(message: ReadReceipt) {
|
||||
SSKEnvironment.shared.readReceiptManager.processReadReceipts(context, message.sender!!, message.timestamps!!, message.receivedTimestamp!!)
|
||||
}
|
||||
|
||||
private fun MessageReceiver.handleCallMessage(message: CallMessage) {
|
||||
// TODO: refactor this out to persistence, just to help debug the flow and send/receive in synchronous testing
|
||||
WebRtcUtils.SIGNAL_QUEUE.offer(message)
|
||||
}
|
||||
|
||||
private fun MessageReceiver.handleTypingIndicator(message: TypingIndicator) {
|
||||
when (message.kind!!) {
|
||||
TypingIndicator.Kind.STARTED -> showTypingIndicatorIfNeeded(message.sender!!)
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package org.session.libsession.messaging.utilities
|
||||
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import org.session.libsession.messaging.messages.control.CallMessage
|
||||
|
||||
object WebRtcUtils {
|
||||
|
||||
// TODO: move this to a better place that is persistent
|
||||
val SIGNAL_QUEUE = Channel<CallMessage>(Channel.UNLIMITED)
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user