Add Small Group Ringing support.

This commit is contained in:
Cody Henthorne
2021-08-24 10:18:39 -04:00
committed by Alex Hart
parent 5787a5f68a
commit db7272730e
39 changed files with 1597 additions and 609 deletions

View File

@@ -273,6 +273,27 @@ public class SignalServiceMessageSender {
sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), envelopeContent, false, null);
}
public List<SendMessageResult> sendCallMessage(List<SignalServiceAddress> recipients,
List<Optional<UnidentifiedAccessPair>> unidentifiedAccess,
SignalServiceCallMessage message)
throws IOException
{
Content content = createCallContent(message);
EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.DEFAULT, Optional.absent());
return sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), envelopeContent, false, null, null);
}
public List<SendMessageResult> sendCallMessage(DistributionId distributionId,
List<SignalServiceAddress> recipients,
List<UnidentifiedAccess> unidentifiedAccess,
SignalServiceCallMessage message)
throws IOException, UntrustedIdentityException, InvalidKeyException, NoSessionException
{
Content content = createCallContent(message);
return sendGroupMessage(distributionId, recipients, unidentifiedAccess, message.getTimestamp().get(), content, ContentHint.IMPLICIT, message.getGroupId().get(), false);
}
/**
* Send an http request on behalf of the calling infrastructure.
*

View File

@@ -15,6 +15,8 @@ public class SignalServiceCallMessage {
private final Optional<OpaqueMessage> opaqueMessage;
private final Optional<Integer> destinationDeviceId;
private final boolean isMultiRing;
private final Optional<byte[]> groupId;
private final Optional<Long> timestamp;
private SignalServiceCallMessage(Optional<OfferMessage> offerMessage,
Optional<AnswerMessage> answerMessage,
@@ -24,6 +26,20 @@ public class SignalServiceCallMessage {
Optional<OpaqueMessage> opaqueMessage,
boolean isMultiRing,
Optional<Integer> destinationDeviceId)
{
this(offerMessage, answerMessage, iceUpdateMessages, hangupMessage, busyMessage, opaqueMessage, isMultiRing, destinationDeviceId, Optional.absent(), Optional.absent());
}
private SignalServiceCallMessage(Optional<OfferMessage> offerMessage,
Optional<AnswerMessage> answerMessage,
Optional<List<IceUpdateMessage>> iceUpdateMessages,
Optional<HangupMessage> hangupMessage,
Optional<BusyMessage> busyMessage,
Optional<OpaqueMessage> opaqueMessage,
boolean isMultiRing,
Optional<Integer> destinationDeviceId,
Optional<byte[]> groupId,
Optional<Long> timestamp)
{
this.offerMessage = offerMessage;
this.answerMessage = answerMessage;
@@ -33,6 +49,8 @@ public class SignalServiceCallMessage {
this.opaqueMessage = opaqueMessage;
this.isMultiRing = isMultiRing;
this.destinationDeviceId = destinationDeviceId;
this.groupId = groupId;
this.timestamp = timestamp;
}
public static SignalServiceCallMessage forOffer(OfferMessage offerMessage, boolean isMultiRing, Integer destinationDeviceId) {
@@ -115,6 +133,19 @@ public class SignalServiceCallMessage {
Optional.fromNullable(destinationDeviceId));
}
public static SignalServiceCallMessage forOutgoingGroupOpaque(byte[] groupId, long timestamp, OpaqueMessage opaqueMessage, boolean isMultiRing, Integer destinationDeviceId) {
return new SignalServiceCallMessage(Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.of(opaqueMessage),
isMultiRing,
Optional.fromNullable(destinationDeviceId),
Optional.of(groupId),
Optional.of(timestamp));
}
public static SignalServiceCallMessage empty() {
return new SignalServiceCallMessage(Optional.absent(),
@@ -122,7 +153,8 @@ public class SignalServiceCallMessage {
Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.absent(), false,
Optional.absent(),
false,
Optional.absent());
}
@@ -157,4 +189,12 @@ public class SignalServiceCallMessage {
public Optional<Integer> getDestinationDeviceId() {
return destinationDeviceId;
}
public Optional<byte[]> getGroupId() {
return groupId;
}
public Optional<Long> getTimestamp() {
return timestamp;
}
}

View File

@@ -97,7 +97,8 @@ message CallMessage {
}
message Opaque {
optional bytes data = 1;
optional bytes data = 1;
reserved /* urgency */ 2;
}
optional Offer offer = 1;