+ static JsonCallMessage from(MessageEnvelope.Call callMessage) {
+ return new JsonCallMessage(callMessage.offer().map(Offer::from).orElse(null),
+ callMessage.answer().map(Answer::from).orElse(null),
+ callMessage.busy().map(Busy::from).orElse(null),
+ callMessage.hangup().map(Hangup::from).orElse(null),
+ callMessage.iceUpdate().stream().map(IceUpdate::from).toList());
+ }
+
+ record Offer(long id, String sdp, String type, String opaque) {
+
+ public static Offer from(final MessageEnvelope.Call.Offer offer) {
+ return new Offer(offer.id(),
+ offer.sdp(),
+ offer.type().name(),
+ Base64.getEncoder().encodeToString(offer.opaque()));
+ }
+ }
+
+ public record Answer(long id, String sdp, String opaque) {