Include urgency in opaque call message sends.

fork-5.53.8
Cody Henthorne 2021-08-25 09:28:16 -04:00 zatwierdzone przez GitHub
rodzic 6179c087fb
commit c1fb4f9421
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
6 zmienionych plików z 50 dodań i 11 usunięć

Wyświetl plik

@ -5,6 +5,7 @@ import static org.thoughtcrime.securesms.events.WebRtcViewModel.State.CALL_INCOM
import static org.thoughtcrime.securesms.events.WebRtcViewModel.State.NETWORK_FAILURE; import static org.thoughtcrime.securesms.events.WebRtcViewModel.State.NETWORK_FAILURE;
import static org.thoughtcrime.securesms.events.WebRtcViewModel.State.NO_SUCH_USER; import static org.thoughtcrime.securesms.events.WebRtcViewModel.State.NO_SUCH_USER;
import static org.thoughtcrime.securesms.events.WebRtcViewModel.State.UNTRUSTED_IDENTITY; import static org.thoughtcrime.securesms.events.WebRtcViewModel.State.UNTRUSTED_IDENTITY;
import static org.thoughtcrime.securesms.service.webrtc.WebRtcUtil.getUrgencyFromCallUrgency;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
@ -589,10 +590,10 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall.
} }
@Override @Override
public void onSendCallMessage(@NonNull UUID uuid, @NonNull byte[] bytes, @NonNull CallManager.CallMessageUrgency unused) { public void onSendCallMessage(@NonNull UUID uuid, @NonNull byte[] bytes, @NonNull CallManager.CallMessageUrgency urgency) {
Log.i(TAG, "onSendCallMessage():"); Log.i(TAG, "onSendCallMessage():");
OpaqueMessage opaqueMessage = new OpaqueMessage(bytes); OpaqueMessage opaqueMessage = new OpaqueMessage(bytes, getUrgencyFromCallUrgency(urgency));
SignalServiceCallMessage callMessage = SignalServiceCallMessage.forOpaque(opaqueMessage, true, null); SignalServiceCallMessage callMessage = SignalServiceCallMessage.forOpaque(opaqueMessage, true, null);
networkExecutor.execute(() -> { networkExecutor.execute(() -> {
@ -616,7 +617,7 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall.
} }
@Override @Override
public void onSendCallMessageToGroup(@NonNull byte[] groupIdBytes, @NonNull byte[] message, @NonNull CallManager.CallMessageUrgency unused) { public void onSendCallMessageToGroup(@NonNull byte[] groupIdBytes, @NonNull byte[] message, @NonNull CallManager.CallMessageUrgency urgency) {
Log.i(TAG, "onSendCallMessageToGroup():"); Log.i(TAG, "onSendCallMessageToGroup():");
networkExecutor.execute(() -> { networkExecutor.execute(() -> {
@ -629,7 +630,7 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall.
.filter(r -> !r.isBlocked()) .filter(r -> !r.isBlocked())
.collect(Collectors.toList()))); .collect(Collectors.toList())));
OpaqueMessage opaqueMessage = new OpaqueMessage(message); OpaqueMessage opaqueMessage = new OpaqueMessage(message, getUrgencyFromCallUrgency(urgency));
SignalServiceCallMessage callMessage = SignalServiceCallMessage.forOutgoingGroupOpaque(groupId.getDecodedId(), System.currentTimeMillis(), opaqueMessage, true, null); SignalServiceCallMessage callMessage = SignalServiceCallMessage.forOutgoingGroupOpaque(groupId.getDecodedId(), System.currentTimeMillis(), opaqueMessage, true, null);
RecipientAccessList accessList = new RecipientAccessList(recipients); RecipientAccessList accessList = new RecipientAccessList(recipients);

Wyświetl plik

@ -17,6 +17,7 @@ import org.whispersystems.libsignal.ecc.Curve;
import org.whispersystems.libsignal.ecc.ECPublicKey; import org.whispersystems.libsignal.ecc.ECPublicKey;
import org.whispersystems.signalservice.api.messages.calls.HangupMessage; import org.whispersystems.signalservice.api.messages.calls.HangupMessage;
import org.whispersystems.signalservice.api.messages.calls.OfferMessage; import org.whispersystems.signalservice.api.messages.calls.OfferMessage;
import org.whispersystems.signalservice.api.messages.calls.OpaqueMessage;
/** /**
* Calling specific helpers. * Calling specific helpers.
@ -64,6 +65,13 @@ public final class WebRtcUtil {
} }
} }
public static OpaqueMessage.Urgency getUrgencyFromCallUrgency(@NonNull CallManager.CallMessageUrgency urgency) {
if (urgency == CallManager.CallMessageUrgency.HANDLE_IMMEDIATELY) {
return OpaqueMessage.Urgency.HANDLE_IMMEDIATELY;
}
return OpaqueMessage.Urgency.DROPPABLE;
}
public static void enableSpeakerPhoneIfNeeded(@NonNull Context context, boolean enable) { public static void enableSpeakerPhoneIfNeeded(@NonNull Context context, boolean enable) {
if (!enable) { if (!enable) {
return; return;

Wyświetl plik

@ -46,6 +46,7 @@ import org.whispersystems.signalservice.api.messages.calls.AnswerMessage;
import org.whispersystems.signalservice.api.messages.calls.CallingResponse; import org.whispersystems.signalservice.api.messages.calls.CallingResponse;
import org.whispersystems.signalservice.api.messages.calls.IceUpdateMessage; import org.whispersystems.signalservice.api.messages.calls.IceUpdateMessage;
import org.whispersystems.signalservice.api.messages.calls.OfferMessage; import org.whispersystems.signalservice.api.messages.calls.OfferMessage;
import org.whispersystems.signalservice.api.messages.calls.OpaqueMessage;
import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage; import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage;
import org.whispersystems.signalservice.api.messages.multidevice.BlockedListMessage; import org.whispersystems.signalservice.api.messages.multidevice.BlockedListMessage;
import org.whispersystems.signalservice.api.messages.multidevice.ConfigurationMessage; import org.whispersystems.signalservice.api.messages.multidevice.ConfigurationMessage;
@ -976,7 +977,11 @@ public class SignalServiceMessageSender {
} else if (callMessage.getBusyMessage().isPresent()) { } else if (callMessage.getBusyMessage().isPresent()) {
builder.setBusy(CallMessage.Busy.newBuilder().setId(callMessage.getBusyMessage().get().getId())); builder.setBusy(CallMessage.Busy.newBuilder().setId(callMessage.getBusyMessage().get().getId()));
} else if (callMessage.getOpaqueMessage().isPresent()) { } else if (callMessage.getOpaqueMessage().isPresent()) {
builder.setOpaque(CallMessage.Opaque.newBuilder().setData(ByteString.copyFrom(callMessage.getOpaqueMessage().get().getOpaque()))); OpaqueMessage opaqueMessage = callMessage.getOpaqueMessage().get();
ByteString data = ByteString.copyFrom(opaqueMessage.getOpaque());
CallMessage.Opaque.Urgency urgency = opaqueMessage.getUrgency().toProto();
builder.setOpaque(CallMessage.Opaque.newBuilder().setData(data).setUrgency(urgency));
} }
builder.setMultiRing(callMessage.isMultiRing()); builder.setMultiRing(callMessage.isMultiRing());

Wyświetl plik

@ -848,7 +848,7 @@ public final class SignalServiceContent {
return SignalServiceCallMessage.forBusy(new BusyMessage(busy.getId()), isMultiRing, destinationDeviceId); return SignalServiceCallMessage.forBusy(new BusyMessage(busy.getId()), isMultiRing, destinationDeviceId);
} else if (content.hasOpaque()) { } else if (content.hasOpaque()) {
SignalServiceProtos.CallMessage.Opaque opaque = content.getOpaque(); SignalServiceProtos.CallMessage.Opaque opaque = content.getOpaque();
return SignalServiceCallMessage.forOpaque(new OpaqueMessage(opaque.getData().toByteArray()), isMultiRing, destinationDeviceId); return SignalServiceCallMessage.forOpaque(new OpaqueMessage(opaque.getData().toByteArray(), null), isMultiRing, destinationDeviceId);
} }
return SignalServiceCallMessage.empty(); return SignalServiceCallMessage.empty();

Wyświetl plik

@ -1,14 +1,34 @@
package org.whispersystems.signalservice.api.messages.calls; package org.whispersystems.signalservice.api.messages.calls;
import org.whispersystems.signalservice.internal.push.SignalServiceProtos;
public class OpaqueMessage { public class OpaqueMessage {
private final byte[] opaque; private final byte[] opaque;
private final Urgency urgency;
public OpaqueMessage(byte[] opaque) { public OpaqueMessage(byte[] opaque, Urgency urgency) {
this.opaque = opaque; this.opaque = opaque;
this.urgency = urgency == null ? Urgency.DROPPABLE : urgency;
} }
public byte[] getOpaque() { public byte[] getOpaque() {
return opaque; return opaque;
} }
public Urgency getUrgency() {
return urgency;
}
public enum Urgency {
DROPPABLE,
HANDLE_IMMEDIATELY;
public SignalServiceProtos.CallMessage.Opaque.Urgency toProto() {
if (this == HANDLE_IMMEDIATELY) {
return SignalServiceProtos.CallMessage.Opaque.Urgency.HANDLE_IMMEDIATELY;
}
return SignalServiceProtos.CallMessage.Opaque.Urgency.DROPPABLE;
}
}
} }

Wyświetl plik

@ -97,8 +97,13 @@ message CallMessage {
} }
message Opaque { message Opaque {
optional bytes data = 1; enum Urgency {
reserved /* urgency */ 2; DROPPABLE = 0;
HANDLE_IMMEDIATELY = 1;
}
optional bytes data = 1;
optional Urgency urgency = 2;
} }
optional Offer offer = 1; optional Offer offer = 1;