From 34443b059c061355d886ebdfc311faeecceca73a Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Wed, 12 Jul 2017 10:59:10 -0700 Subject: [PATCH] Revert "We can now send trickle ice candidates immediately" Need to hold off on this for some iOS changes. This reverts commit 338f8de7874c31b862af7da1bea0a4cd8472e6af. --- .../securesms/service/WebRtcCallService.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/org/thoughtcrime/securesms/service/WebRtcCallService.java b/src/org/thoughtcrime/securesms/service/WebRtcCallService.java index 1e03b498f6..ef665ae106 100644 --- a/src/org/thoughtcrime/securesms/service/WebRtcCallService.java +++ b/src/org/thoughtcrime/securesms/service/WebRtcCallService.java @@ -170,6 +170,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo @Nullable private Recipient recipient; @Nullable private PeerConnectionWrapper peerConnection; @Nullable private DataChannel dataChannel; + @Nullable private List pendingIceUpdates; @Nullable public static SurfaceViewRenderer localRenderer; @Nullable public static SurfaceViewRenderer remoteRenderer; @@ -382,6 +383,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo this.callState = CallState.STATE_DIALING; this.recipient = getRemoteRecipient(intent); this.callId = SecureRandom.getInstance("SHA1PRNG").nextLong(); + this.pendingIceUpdates = new LinkedList<>(); initializeVideo(); @@ -449,11 +451,26 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo return; } - if (peerConnection == null) { + if (peerConnection == null || pendingIceUpdates == null) { throw new AssertionError("assert"); } + if (!pendingIceUpdates.isEmpty()) { + ListenableFutureTask listenableFutureTask = sendMessage(recipient, SignalServiceCallMessage.forIceUpdates(pendingIceUpdates)); + + listenableFutureTask.addListener(new FailureListener(callState, callId) { + @Override + public void onFailureContinue(Throwable error) { + Log.w(TAG, error); + sendMessage(WebRtcViewModel.State.NETWORK_FAILURE, recipient, localVideoEnabled, remoteVideoEnabled, bluetoothAvailable, microphoneEnabled); + + terminate(); + } + }); + } + this.peerConnection.setRemoteDescription(new SessionDescription(SessionDescription.Type.ANSWER, intent.getStringExtra(EXTRA_REMOTE_DESCRIPTION))); + this.pendingIceUpdates = null; } catch (PeerConnectionException e) { Log.w(TAG, e); terminate(); @@ -484,6 +501,12 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo intent.getIntExtra(EXTRA_ICE_SDP_LINE_INDEX, 0), intent.getStringExtra(EXTRA_ICE_SDP)); + if (pendingIceUpdates != null) { + Log.w(TAG, "Adding to pending ice candidates..."); + this.pendingIceUpdates.add(iceUpdateMessage); + return; + } + ListenableFutureTask listenableFutureTask = sendMessage(recipient, SignalServiceCallMessage.forIceUpdate(iceUpdateMessage)); listenableFutureTask.addListener(new FailureListener(callState, callId) { @@ -863,6 +886,7 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo this.microphoneEnabled = true; this.localVideoEnabled = false; this.remoteVideoEnabled = false; + this.pendingIceUpdates = null; lockManager.updatePhoneState(LockManager.PhoneState.IDLE); }