]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/json/JsonCallMessage.java
Update libsignal-service-java
[signal-cli] / src / main / java / org / asamk / signal / json / JsonCallMessage.java
1 package org.asamk.signal.json;
2
3 import com.fasterxml.jackson.annotation.JsonInclude;
4
5 import org.asamk.signal.manager.api.MessageEnvelope;
6
7 import java.util.Base64;
8 import java.util.List;
9
10 record JsonCallMessage(
11 @JsonInclude(JsonInclude.Include.NON_NULL) Offer offerMessage,
12 @JsonInclude(JsonInclude.Include.NON_NULL) Answer answerMessage,
13 @JsonInclude(JsonInclude.Include.NON_NULL) Busy busyMessage,
14 @JsonInclude(JsonInclude.Include.NON_NULL) Hangup hangupMessage,
15 @JsonInclude(JsonInclude.Include.NON_EMPTY) List<IceUpdate> iceUpdateMessages
16 ) {
17
18 static JsonCallMessage from(MessageEnvelope.Call callMessage) {
19 return new JsonCallMessage(callMessage.offer().map(Offer::from).orElse(null),
20 callMessage.answer().map(Answer::from).orElse(null),
21 callMessage.busy().map(Busy::from).orElse(null),
22 callMessage.hangup().map(Hangup::from).orElse(null),
23 callMessage.iceUpdate().stream().map(IceUpdate::from).toList());
24 }
25
26 record Offer(long id, String type, String opaque) {
27
28 public static Offer from(final MessageEnvelope.Call.Offer offer) {
29 return new Offer(offer.id(), offer.type().name(), Base64.getEncoder().encodeToString(offer.opaque()));
30 }
31 }
32
33 public record Answer(long id, String opaque) {
34
35 public static Answer from(final MessageEnvelope.Call.Answer answer) {
36 return new Answer(answer.id(), Base64.getEncoder().encodeToString(answer.opaque()));
37 }
38 }
39
40 public record Busy(long id) {
41
42 public static Busy from(final MessageEnvelope.Call.Busy busy) {
43 return new Busy(busy.id());
44 }
45 }
46
47 public record Hangup(long id, String type, int deviceId) {
48
49 public static Hangup from(final MessageEnvelope.Call.Hangup hangup) {
50 return new Hangup(hangup.id(), hangup.type().name(), hangup.deviceId());
51 }
52 }
53
54 public record IceUpdate(long id, String opaque) {
55
56 public static IceUpdate from(final MessageEnvelope.Call.IceUpdate iceUpdate) {
57 return new IceUpdate(iceUpdate.id(), Base64.getEncoder().encodeToString(iceUpdate.opaque()));
58 }
59 }
60 }