From e0f7ff325afa8c90d0095bf82f2071d1b8988d15 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Wed, 25 Mar 2015 15:59:52 -0700 Subject: [PATCH] Add voip push support in communication with push server. // FREEBIE --- .../textsecuregcm/entities/ApnMessage.java | 8 +++++++- .../textsecuregcm/entities/ApnRegistrationId.java | 2 +- .../whispersystems/textsecuregcm/push/PushSender.java | 9 +++++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ApnMessage.java b/src/main/java/org/whispersystems/textsecuregcm/entities/ApnMessage.java index 2842d5b1c..77b8504bb 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/entities/ApnMessage.java +++ b/src/main/java/org/whispersystems/textsecuregcm/entities/ApnMessage.java @@ -5,6 +5,7 @@ import com.google.common.annotations.VisibleForTesting; import org.hibernate.validator.constraints.NotEmpty; import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; public class ApnMessage { @JsonProperty @@ -23,12 +24,17 @@ public class ApnMessage { @NotEmpty private String message; + @JsonProperty + @NotNull + private boolean voip; + public ApnMessage() {} - public ApnMessage(String apnId, String number, int deviceId, String message) { + public ApnMessage(String apnId, String number, int deviceId, String message, boolean voip) { this.apnId = apnId; this.number = number; this.deviceId = deviceId; this.message = message; + this.voip = voip; } } diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ApnRegistrationId.java b/src/main/java/org/whispersystems/textsecuregcm/entities/ApnRegistrationId.java index f64a7b73b..ce214ed04 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/entities/ApnRegistrationId.java +++ b/src/main/java/org/whispersystems/textsecuregcm/entities/ApnRegistrationId.java @@ -26,7 +26,7 @@ public class ApnRegistrationId { private String apnRegistrationId; @JsonProperty - String voipRegistrationId; + private String voipRegistrationId; public String getApnRegistrationId() { return apnRegistrationId; diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java b/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java index e9adb5f3f..feda80cd1 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java +++ b/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java @@ -25,6 +25,7 @@ import org.whispersystems.textsecuregcm.entities.GcmMessage; import org.whispersystems.textsecuregcm.push.WebsocketSender.DeliveryStatus; import org.whispersystems.textsecuregcm.storage.Account; import org.whispersystems.textsecuregcm.storage.Device; +import org.whispersystems.textsecuregcm.util.Util; import static org.whispersystems.textsecuregcm.entities.MessageProtos.OutgoingMessageSignal; @@ -99,8 +100,12 @@ public class PushSender { DeliveryStatus deliveryStatus = webSocketSender.sendMessage(account, device, outgoingMessage, WebsocketSender.Type.APN); if (!deliveryStatus.isDelivered() && outgoingMessage.getType() != OutgoingMessageSignal.Type.RECEIPT_VALUE) { - ApnMessage apnMessage = new ApnMessage(device.getApnId(), account.getNumber(), (int)device.getId(), - String.format(APN_PAYLOAD, deliveryStatus.getMessageQueueDepth())); + String apnId = Util.isEmpty(device.getVoipApnId()) ? device.getApnId() : device.getVoipApnId(); + boolean isVoip = !Util.isEmpty(device.getVoipApnId()); + + ApnMessage apnMessage = new ApnMessage(apnId, account.getNumber(), (int)device.getId(), + String.format(APN_PAYLOAD, deliveryStatus.getMessageQueueDepth()), + isVoip); pushServiceClient.send(apnMessage); } }