From b50a3fa2b80fc26d214596b4331724b4922b565e Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Thu, 1 Jun 2017 13:11:48 -0700 Subject: [PATCH] Actually handle busy signal correctly // FREEBIE --- .../thoughtcrime/securesms/jobs/PushDecryptJob.java | 12 ++++++++++++ .../securesms/service/WebRtcCallService.java | 11 ++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index bcb3d8f59f..9b2f18aa42 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -66,6 +66,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; import org.whispersystems.signalservice.api.messages.SignalServiceGroup; import org.whispersystems.signalservice.api.messages.calls.AnswerMessage; +import org.whispersystems.signalservice.api.messages.calls.BusyMessage; import org.whispersystems.signalservice.api.messages.calls.HangupMessage; import org.whispersystems.signalservice.api.messages.calls.IceUpdateMessage; import org.whispersystems.signalservice.api.messages.calls.OfferMessage; @@ -176,6 +177,7 @@ public class PushDecryptJob extends ContextJob { else if (message.getAnswerMessage().isPresent()) handleCallAnswerMessage(envelope, message.getAnswerMessage().get()); else if (message.getIceUpdateMessages().isPresent()) handleCallIceUpdateMessage(envelope, message.getIceUpdateMessages().get()); else if (message.getHangupMessage().isPresent()) handleCallHangupMessage(envelope, message.getHangupMessage().get(), smsMessageId); + else if (message.getBusyMessage().isPresent()) handleCallBusyMessage(envelope, message.getBusyMessage().get()); } else { Log.w(TAG, "Got unrecognized message..."); } @@ -268,6 +270,16 @@ public class PushDecryptJob extends ContextJob { } } + private void handleCallBusyMessage(@NonNull SignalServiceEnvelope envelope, + @NonNull BusyMessage message) + { + Intent intent = new Intent(context, WebRtcCallService.class); + intent.setAction(WebRtcCallService.ACTION_REMOTE_BUSY); + intent.putExtra(WebRtcCallService.EXTRA_CALL_ID, message.getId()); + intent.putExtra(WebRtcCallService.EXTRA_REMOTE_NUMBER, envelope.getSource()); + context.startService(intent); + } + private void handleEndSessionMessage(@NonNull MasterSecretUnion masterSecret, @NonNull SignalServiceEnvelope envelope, @NonNull SignalServiceDataMessage message, diff --git a/src/org/thoughtcrime/securesms/service/WebRtcCallService.java b/src/org/thoughtcrime/securesms/service/WebRtcCallService.java index bcc5617b19..7e952ea5db 100644 --- a/src/org/thoughtcrime/securesms/service/WebRtcCallService.java +++ b/src/org/thoughtcrime/securesms/service/WebRtcCallService.java @@ -600,8 +600,8 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo private void handleBusyMessage(Intent intent) { Log.w(TAG, "handleBusyMessage..."); - Recipient recipient = getRemoteRecipient(intent); - long callId = getCallId(intent); + final Recipient recipient = getRemoteRecipient(intent); + final long callId = getCallId(intent); if (callState != CallState.STATE_DIALING || !Util.isEquals(this.callId, callId) || !recipient.equals(this.recipient)) { Log.w(TAG, "Got busy message for inactive session..."); @@ -614,7 +614,12 @@ public class WebRtcCallService extends Service implements InjectableType, PeerCo serviceHandler.postDelayed(new Runnable() { @Override public void run() { - WebRtcCallService.this.terminate(); + Intent intent = new Intent(WebRtcCallService.this, WebRtcCallService.class); + intent.setAction(ACTION_LOCAL_HANGUP); + intent.putExtra(EXTRA_CALL_ID, intent.getLongExtra(EXTRA_CALL_ID, -1)); + intent.putExtra(EXTRA_REMOTE_NUMBER, intent.getStringExtra(EXTRA_REMOTE_NUMBER)); + + startService(intent); } }, WebRtcCallActivity.BUSY_SIGNAL_DELAY_FINISH); }