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.NO_SUCH_USER;
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.content.Context;
@ -589,10 +590,10 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall.
}
@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():");
OpaqueMessage opaqueMessage = new OpaqueMessage(bytes);
OpaqueMessage opaqueMessage = new OpaqueMessage(bytes, getUrgencyFromCallUrgency(urgency));
SignalServiceCallMessage callMessage = SignalServiceCallMessage.forOpaque(opaqueMessage, true, null);
networkExecutor.execute(() -> {
@ -616,7 +617,7 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall.
}
@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():");
networkExecutor.execute(() -> {
@ -629,7 +630,7 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall.
.filter(r -> !r.isBlocked())
.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);
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.signalservice.api.messages.calls.HangupMessage;
import org.whispersystems.signalservice.api.messages.calls.OfferMessage;
import org.whispersystems.signalservice.api.messages.calls.OpaqueMessage;
/**
* 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) {
if (!enable) {
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.IceUpdateMessage;
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.multidevice.BlockedListMessage;
import org.whispersystems.signalservice.api.messages.multidevice.ConfigurationMessage;
@ -976,7 +977,11 @@ public class SignalServiceMessageSender {
} else if (callMessage.getBusyMessage().isPresent()) {
builder.setBusy(CallMessage.Busy.newBuilder().setId(callMessage.getBusyMessage().get().getId()));
} 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());

Wyświetl plik

@ -848,7 +848,7 @@ public final class SignalServiceContent {
return SignalServiceCallMessage.forBusy(new BusyMessage(busy.getId()), isMultiRing, destinationDeviceId);
} else if (content.hasOpaque()) {
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();

Wyświetl plik

@ -1,14 +1,34 @@
package org.whispersystems.signalservice.api.messages.calls;
import org.whispersystems.signalservice.internal.push.SignalServiceProtos;
public class OpaqueMessage {
private final byte[] opaque;
private final byte[] opaque;
private final Urgency urgency;
public OpaqueMessage(byte[] opaque) {
this.opaque = opaque;
public OpaqueMessage(byte[] opaque, Urgency urgency) {
this.opaque = opaque;
this.urgency = urgency == null ? Urgency.DROPPABLE : urgency;
}
public byte[] getOpaque() {
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 {
optional bytes data = 1;
reserved /* urgency */ 2;
enum Urgency {
DROPPABLE = 0;
HANDLE_IMMEDIATELY = 1;
}
optional bytes data = 1;
optional Urgency urgency = 2;
}
optional Offer offer = 1;