commit 2d970fdb60f8b6378d663c967f877194efcabd38 Author: Karsten Loesing karsten.loesing@gmx.net Date: Mon Feb 24 10:12:49 2014 +0100
Include bridges when filtering by flag.
Fixes #10908. --- src/org/torproject/onionoo/ResponseBuilder.java | 29 ++++++++++++++++++-- .../torproject/onionoo/ResourceServletTest.java | 4 +-- 2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/src/org/torproject/onionoo/ResponseBuilder.java b/src/org/torproject/onionoo/ResponseBuilder.java index 898f957..502b928 100644 --- a/src/org/torproject/onionoo/ResponseBuilder.java +++ b/src/org/torproject/onionoo/ResponseBuilder.java @@ -28,7 +28,7 @@ public class ResponseBuilder { private static Map<String, String> relayFingerprintSummaryLines = null, bridgeFingerprintSummaryLines = null; private static Map<String, Set<String>> relaysByCountryCode = null, - relaysByASNumber = null, relaysByFlag = null, + relaysByASNumber = null, relaysByFlag = null, bridgesByFlag = null, relaysByContact = null; private static SortedMap<Integer, Set<String>> relaysByFirstSeenDays = null, bridgesByFirstSeenDays = null, @@ -84,6 +84,7 @@ public class ResponseBuilder { newRelaysByCountryCode = new HashMap<String, Set<String>>(), newRelaysByASNumber = new HashMap<String, Set<String>>(), newRelaysByFlag = new HashMap<String, Set<String>>(), + newBridgesByFlag = new HashMap<String, Set<String>>(), newRelaysByContact = new HashMap<String, Set<String>>(); SortedMap<Integer, Set<String>> newRelaysByFirstSeenDays = new TreeMap<Integer, Set<String>>(), @@ -200,6 +201,15 @@ public class ResponseBuilder { newBridgeFingerprintSummaryLines.put(hashedFingerprint, line); newBridgeFingerprintSummaryLines.put(hashedHashedFingerprint, line); + for (String flag : entry.getRelayFlags()) { + String flagLowerCase = flag.toLowerCase(); + if (!newBridgesByFlag.containsKey(flagLowerCase)) { + newBridgesByFlag.put(flagLowerCase, new HashSet<String>()); + } + newBridgesByFlag.get(flagLowerCase).add(hashedFingerprint); + newBridgesByFlag.get(flagLowerCase).add( + hashedHashedFingerprint); + } int daysSinceFirstSeen = (int) ((newSummaryFileLastModified - entry.getFirstSeenMillis()) / 86400000L); if (!newBridgesByFirstSeenDays.containsKey(daysSinceFirstSeen)) { @@ -227,6 +237,7 @@ public class ResponseBuilder { relaysByCountryCode = newRelaysByCountryCode; relaysByASNumber = newRelaysByASNumber; relaysByFlag = newRelaysByFlag; + bridgesByFlag = newBridgesByFlag; relaysByContact = newRelaysByContact; relaysByFirstSeenDays = newRelaysByFirstSeenDays; relaysByLastSeenDays = newRelaysByLastSeenDays; @@ -569,7 +580,21 @@ public class ResponseBuilder { filteredRelays.remove(fingerprint); } } - filteredBridges.clear(); + if (!this.bridgesByFlag.containsKey(flag)) { + filteredBridges.clear(); + } else { + Set<String> bridgesWithFlag = bridgesByFlag.get(flag); + Set<String> removeBridges = new HashSet<String>(); + for (Map.Entry<String, String> e : filteredBridges.entrySet()) { + String fingerprint = e.getKey(); + if (!bridgesWithFlag.contains(fingerprint)) { + removeBridges.add(fingerprint); + } + } + for (String fingerprint : removeBridges) { + filteredBridges.remove(fingerprint); + } + } }
private void filterNodesByFirstSeenDays( diff --git a/test/org/torproject/onionoo/ResourceServletTest.java b/test/org/torproject/onionoo/ResourceServletTest.java index 51ea1b5..37963c8 100644 --- a/test/org/torproject/onionoo/ResourceServletTest.java +++ b/test/org/torproject/onionoo/ResourceServletTest.java @@ -819,13 +819,13 @@ public class ResourceServletTest { @Test() public void testFlagRunning() { this.assertSummaryDocument( - "/summary?flag=Running", 3, null, 0, null); + "/summary?flag=Running", 3, null, 1, null); }
@Test() public void testFlagValid() { this.assertSummaryDocument( - "/summary?flag=Valid", 3, null, 0, null); + "/summary?flag=Valid", 3, null, 3, null); }
@Test()
tor-commits@lists.torproject.org