kopia lustrzana https://github.com/ryukoposting/Signal-Android
Include urgency in opaque call message sends.
rodzic
6179c087fb
commit
c1fb4f9421
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Ładowanie…
Reference in New Issue