diff --git a/pom.xml b/pom.xml
index 4ae9367e5..6b7a9b74a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,6 @@
1.3.7
2.9.6
- 1.5.12
UTF-8
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java b/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java
index ab27504e5..a53b1507c 100644
--- a/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java
+++ b/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysController.java
@@ -118,15 +118,15 @@ public class KeysController {
throw new WebApplicationException(Response.Status.UNAUTHORIZED);
}
- if (account.isPresent()) {
- rateLimiters.getPreKeysLimiter().validate(account.get().getNumber() + "__" + number + "." + deviceId);
- }
-
Optional target = accounts.get(number);
OptionalAccess.verify(account, accessKey, target, deviceId);
assert(target.isPresent());
+ if (account.isPresent()) {
+ rateLimiters.getPreKeysLimiter().validate(account.get().getNumber() + "__" + number + "." + deviceId);
+ }
+
Optional> targetKeys = getLocalKeys(target.get(), deviceId);
List devices = new LinkedList<>();
diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java b/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java
index 8766e3b7f..ce9317554 100644
--- a/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java
+++ b/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java
@@ -16,6 +16,9 @@
*/
package org.whispersystems.textsecuregcm.controllers;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.SharedMetricRegistries;
import com.codahale.metrics.annotation.Timed;
import com.google.protobuf.ByteString;
import org.slf4j.Logger;
@@ -41,6 +44,7 @@ import org.whispersystems.textsecuregcm.storage.AccountsManager;
import org.whispersystems.textsecuregcm.storage.Device;
import org.whispersystems.textsecuregcm.storage.MessagesManager;
import org.whispersystems.textsecuregcm.util.Base64;
+import org.whispersystems.textsecuregcm.util.Constants;
import org.whispersystems.textsecuregcm.util.Util;
import org.whispersystems.textsecuregcm.websocket.WebSocketConnection;
@@ -64,13 +68,17 @@ import java.util.Optional;
import java.util.Set;
import java.util.UUID;
+import static com.codahale.metrics.MetricRegistry.name;
import io.dropwizard.auth.Auth;
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
@Path("/v1/messages")
public class MessageController {
- private final Logger logger = LoggerFactory.getLogger(MessageController.class);
+ private final Logger logger = LoggerFactory.getLogger(MessageController.class);
+ private final MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME);
+ private final Meter unidentifiedMeter = metricRegistry.meter(name(getClass(), "delivery", "unidentified"));
+ private final Meter identifiedMeter = metricRegistry.meter(name(getClass(), "delivery", "identified" ));
private final RateLimiters rateLimiters;
private final PushSender pushSender;
@@ -113,6 +121,12 @@ public class MessageController {
rateLimiters.getMessagesLimiter().validate(source.get().getNumber() + "__" + destinationName);
}
+ if (source.isPresent() && !source.get().getNumber().equals(destinationName)) {
+ identifiedMeter.mark();
+ } else {
+ unidentifiedMeter.mark();
+ }
+
try {
boolean isSyncMessage = source.isPresent() && source.get().getNumber().equals(destinationName);
@@ -122,6 +136,8 @@ public class MessageController {
else destination = source;
OptionalAccess.verify(source, accessKey, destination);
+ assert(destination.isPresent());
+
validateCompleteDeviceList(destination.get(), messages.getMessages(), isSyncMessage);
validateRegistrationIds(destination.get(), messages.getMessages());