From 7cf50a15d0c50ea5c07c6c71e9b5711b33bd63b0 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Tue, 10 Nov 2020 11:30:32 -0500 Subject: [PATCH] Include client age/UA string when closing due to a spurious keepalive request. --- .../textsecuregcm/controllers/KeepAliveController.java | 6 +++++- .../java/org/whispersystems/websocket/WebSocketClient.java | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java index c81e2abe6..1f0b240b4 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java @@ -45,7 +45,11 @@ public class KeepAliveController { { if (account != null) { if (!clientPresenceManager.isLocallyPresent(account.getUuid(), account.getAuthenticatedDevice().get().getId())) { - logger.warn("***** No local subscription found for {}::{}", account.getUuid(), account.getAuthenticatedDevice().get().getId()); + logger.warn("***** No local subscription found for {}::{}; age = {}ms, User-Agent = {}", + account.getUuid(), account.getAuthenticatedDevice().get().getId(), + System.currentTimeMillis() - context.getClient().getCreatedTimestamp(), + context.getClient().getUserAgent()); + context.getClient().close(1000, "OK"); String platform; diff --git a/websocket-resources/src/main/java/org/whispersystems/websocket/WebSocketClient.java b/websocket-resources/src/main/java/org/whispersystems/websocket/WebSocketClient.java index 0e2376436..43e50ab7f 100644 --- a/websocket-resources/src/main/java/org/whispersystems/websocket/WebSocketClient.java +++ b/websocket-resources/src/main/java/org/whispersystems/websocket/WebSocketClient.java @@ -31,6 +31,7 @@ public class WebSocketClient { private final RemoteEndpoint remoteEndpoint; private final WebSocketMessageFactory messageFactory; private final Map> pendingRequestMapper; + private final long created; public WebSocketClient(Session session, RemoteEndpoint remoteEndpoint, WebSocketMessageFactory messageFactory, @@ -40,6 +41,7 @@ public class WebSocketClient { this.remoteEndpoint = remoteEndpoint; this.messageFactory = messageFactory; this.pendingRequestMapper = pendingRequestMapper; + this.created = System.currentTimeMillis(); } public CompletableFuture sendRequest(String verb, String path, @@ -78,6 +80,10 @@ public class WebSocketClient { return session.getUpgradeRequest().getHeader("User-Agent"); } + public long getCreatedTimestamp() { + return this.created; + } + public void close(int code, String message) { session.close(code, message); }