From 871b73c48d9688969181363a7b53cb12d670e572 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 24 Nov 2014 20:10:02 -0800 Subject: [PATCH] Fix PC duplication issue when multiple machines report the same remote IP address --- .../computers/ComputerManagerService.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/limelight/computers/ComputerManagerService.java b/app/src/main/java/com/limelight/computers/ComputerManagerService.java index b38ff473..5110c77d 100644 --- a/app/src/main/java/com/limelight/computers/ComputerManagerService.java +++ b/app/src/main/java/com/limelight/computers/ComputerManagerService.java @@ -332,12 +332,22 @@ public class ComputerManagerService extends Service { } } - private ComputerDetails tryPollIp(InetAddress ipAddr) { + private ComputerDetails tryPollIp(ComputerDetails details, InetAddress ipAddr) { try { NvHTTP http = new NvHTTP(ipAddr, idManager.getUniqueId(), null, PlatformBinding.getCryptoProvider(ComputerManagerService.this)); - return http.getComputerDetails(); + ComputerDetails newDetails = http.getComputerDetails(); + + // Check if this is the PC we expected + if (details.uuid != null && newDetails.uuid != null && + !details.uuid.equals(newDetails.uuid)) { + // We got the wrong PC! + LimeLog.info("Polling returned the wrong PC!"); + return null; + } + + return newDetails; } catch (Exception e) { return null; } @@ -347,19 +357,19 @@ public class ComputerManagerService extends Service { ComputerDetails polledDetails; if (localFirst) { - polledDetails = tryPollIp(details.localIp); + polledDetails = tryPollIp(details, details.localIp); } else { - polledDetails = tryPollIp(details.remoteIp); + polledDetails = tryPollIp(details, details.remoteIp); } if (polledDetails == null && !details.localIp.equals(details.remoteIp)) { // Failed, so let's try the fallback if (!localFirst) { - polledDetails = tryPollIp(details.localIp); + polledDetails = tryPollIp(details, details.localIp); } else { - polledDetails = tryPollIp(details.remoteIp); + polledDetails = tryPollIp(details, details.remoteIp); } // The fallback poll worked @@ -417,8 +427,8 @@ public class ComputerManagerService extends Service { } for (ComputerDetails computer : dbManager.getAllComputers()) { - // Add this computer without a thread - pollingTuples.add(new PollingTuple(computer, null)); + // Add tuples for each computer + addTuple(computer); } releaseLocalDatabaseReference();