Signal-Android/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/calls/SignalServiceCallMessage.java

137 lines
6.0 KiB
Java

package org.whispersystems.signalservice.api.messages.calls;
import org.whispersystems.libsignal.util.guava.Optional;
import java.util.LinkedList;
import java.util.List;
public class SignalServiceCallMessage {
private final Optional<OfferMessage> offerMessage;
private final Optional<AnswerMessage> answerMessage;
private final Optional<HangupMessage> hangupMessage;
private final Optional<BusyMessage> busyMessage;
private final Optional<List<IceUpdateMessage>> iceUpdateMessages;
private final Optional<Integer> destinationDeviceId;
private final boolean isMultiRing;
private SignalServiceCallMessage(Optional<OfferMessage> offerMessage,
Optional<AnswerMessage> answerMessage,
Optional<List<IceUpdateMessage>> iceUpdateMessages,
Optional<HangupMessage> hangupMessage,
Optional<BusyMessage> busyMessage,
boolean isMultiRing,
Optional<Integer> destinationDeviceId)
{
this.offerMessage = offerMessage;
this.answerMessage = answerMessage;
this.iceUpdateMessages = iceUpdateMessages;
this.hangupMessage = hangupMessage;
this.busyMessage = busyMessage;
this.isMultiRing = isMultiRing;
this.destinationDeviceId = destinationDeviceId;
}
public static SignalServiceCallMessage forOffer(OfferMessage offerMessage, boolean isMultiRing, Integer destinationDeviceId) {
return new SignalServiceCallMessage(Optional.of(offerMessage),
Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.absent(),
isMultiRing,
Optional.fromNullable(destinationDeviceId));
}
public static SignalServiceCallMessage forAnswer(AnswerMessage answerMessage, boolean isMultiRing, Integer destinationDeviceId) {
return new SignalServiceCallMessage(Optional.absent(),
Optional.of(answerMessage),
Optional.absent(),
Optional.absent(),
Optional.absent(),
isMultiRing,
Optional.fromNullable(destinationDeviceId));
}
public static SignalServiceCallMessage forIceUpdates(List<IceUpdateMessage> iceUpdateMessages, boolean isMultiRing, Integer destinationDeviceId) {
return new SignalServiceCallMessage(Optional.absent(),
Optional.absent(),
Optional.of(iceUpdateMessages),
Optional.absent(),
Optional.absent(),
isMultiRing,
Optional.fromNullable(destinationDeviceId));
}
public static SignalServiceCallMessage forIceUpdate(final IceUpdateMessage iceUpdateMessage, boolean isMultiRing, Integer destinationDeviceId) {
List<IceUpdateMessage> iceUpdateMessages = new LinkedList<>();
iceUpdateMessages.add(iceUpdateMessage);
return new SignalServiceCallMessage(Optional.absent(),
Optional.absent(),
Optional.of(iceUpdateMessages),
Optional.absent(),
Optional.absent(),
isMultiRing,
Optional.fromNullable(destinationDeviceId));
}
public static SignalServiceCallMessage forHangup(HangupMessage hangupMessage, boolean isMultiRing, Integer destinationDeviceId) {
return new SignalServiceCallMessage(Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.of(hangupMessage),
Optional.absent(),
isMultiRing,
Optional.fromNullable(destinationDeviceId));
}
public static SignalServiceCallMessage forBusy(BusyMessage busyMessage, boolean isMultiRing, Integer destinationDeviceId) {
return new SignalServiceCallMessage(Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.of(busyMessage),
isMultiRing,
Optional.fromNullable(destinationDeviceId));
}
public static SignalServiceCallMessage empty() {
return new SignalServiceCallMessage(Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.absent(),
Optional.absent(),
false,
Optional.absent());
}
public Optional<List<IceUpdateMessage>> getIceUpdateMessages() {
return iceUpdateMessages;
}
public Optional<AnswerMessage> getAnswerMessage() {
return answerMessage;
}
public Optional<OfferMessage> getOfferMessage() {
return offerMessage;
}
public Optional<HangupMessage> getHangupMessage() {
return hangupMessage;
}
public Optional<BusyMessage> getBusyMessage() {
return busyMessage;
}
public boolean isMultiRing() {
return isMultiRing;
}
public Optional<Integer> getDestinationDeviceId() {
return destinationDeviceId;
}
}