From 18884ea06b305c7ebc8072904dc1b7c792c437e2 Mon Sep 17 00:00:00 2001 From: jubb Date: Mon, 7 Mar 2022 17:47:35 +1100 Subject: [PATCH] feat: check new session based off current state --- .../org/thoughtcrime/securesms/service/WebRtcCallService.kt | 3 ++- .../java/org/thoughtcrime/securesms/webrtc/CallManager.kt | 6 ++++-- .../org/thoughtcrime/securesms/webrtc/data/StateMachine.kt | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/WebRtcCallService.kt b/app/src/main/java/org/thoughtcrime/securesms/service/WebRtcCallService.kt index 323829041..393f3f3d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/WebRtcCallService.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/WebRtcCallService.kt @@ -550,9 +550,10 @@ class WebRtcCallService: Service(), CallManager.WebRtcListener { handleLocalHangup(intent) return } + val isNewSession = callManager.currentConnectionState == CallState.Reconnecting val callId = getCallId(intent) val description = intent.getStringExtra(EXTRA_REMOTE_DESCRIPTION) - callManager.handleResponseMessage(recipient, callId, SessionDescription(SessionDescription.Type.ANSWER, description)) + callManager.handleResponseMessage(recipient, callId, SessionDescription(SessionDescription.Type.ANSWER, description), isNewSession) } catch (e: PeerConnectionException) { terminate() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallManager.kt b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallManager.kt index ff40a3728..fe03794f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallManager.kt @@ -631,13 +631,15 @@ class CallManager(context: Context, audioManager: AudioManagerCompat, private va } } - fun handleResponseMessage(recipient: Recipient, callId: UUID, answer: SessionDescription) { + fun handleResponseMessage(recipient: Recipient, callId: UUID, answer: SessionDescription, isNewSession: Boolean) { if (recipient != this.recipient || callId != this.callId) { Log.w(TAG,"Got answer for recipient and call ID we're not currently dialing") return } - stateProcessor.processEvent(Event.ReceiveAnswer) { + val event = if (isNewSession) Event.Connect else Event.ReceiveAnswer + + stateProcessor.processEvent(event) { val connection = peerConnection ?: throw AssertionError("assert") connection.setRemoteDescription(answer) diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/data/StateMachine.kt b/app/src/main/java/org/thoughtcrime/securesms/webrtc/data/StateMachine.kt index 9fbf26c20..8d3a590f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/data/StateMachine.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/data/StateMachine.kt @@ -57,7 +57,7 @@ sealed class Event(vararg val expectedStates: State, val outputState: State) { object Connect : Event(State.Connecting, outputState = State.Connected) object IceFailed : Event(State.Connecting, outputState = State.Disconnected) object IceDisconnect : Event(State.Connected, outputState = State.Reconnecting) - object NetworkReconnect : Event(State.Reconnecting, outputState = State.Connecting) + object NetworkReconnect : Event(State.Reconnecting, outputState = State.LocalRing) object TimeOut : Event(State.Connecting, State.LocalRing, State.RemoteRing, outputState = State.Disconnected) object Error : Event(*State.ALL_STATES, outputState = State.Disconnected)