commit adf2c042a50f92e3e4991568a5e3d118c570b79f Author: Karsten Loesing karsten.loesing@gmx.net Date: Sun Feb 26 00:45:13 2012 +0100
Include country/region/city names in details documents.
Implements #5250.
It's unclear if the Unicode-to-UTF-8 conversion works correctly on non-UTF-8 systems. A quick test with a file written on Mac OS X and read on Linux resulted in a <?> instead of a u-umlaut. Someone should run Tomcat on Mac OS X and find out. --- src/org/torproject/onionoo/CurrentNodes.java | 5 +++++ src/org/torproject/onionoo/DetailDataWriter.java | 12 ++++++++++++ src/org/torproject/onionoo/Node.java | 21 +++++++++++++++++++++ src/org/torproject/onionoo/ResourceServlet.java | 1 + 4 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/src/org/torproject/onionoo/CurrentNodes.java b/src/org/torproject/onionoo/CurrentNodes.java index 0721ec4..33e048a 100644 --- a/src/org/torproject/onionoo/CurrentNodes.java +++ b/src/org/torproject/onionoo/CurrentNodes.java @@ -29,6 +29,7 @@ import org.torproject.descriptor.RelayNetworkStatusConsensus;
import com.maxmind.geoip.Location; import com.maxmind.geoip.LookupService; +import com.maxmind.geoip.regionName;
/* Store relays and bridges that have been running in the past seven * days. */ @@ -240,6 +241,10 @@ public class CurrentNodes { relay.setLongitude(String.format(Locale.US, "%.6f", location.longitude)); relay.setCountryCode(location.countryCode); + relay.setCountryName(location.countryName); + relay.setRegionName(regionName.regionNameByCode( + location.countryCode, location.region)); + relay.setCityName(location.city); } } ls.close(); diff --git a/src/org/torproject/onionoo/DetailDataWriter.java b/src/org/torproject/onionoo/DetailDataWriter.java index a0d3a4f..5af8688 100644 --- a/src/org/torproject/onionoo/DetailDataWriter.java +++ b/src/org/torproject/onionoo/DetailDataWriter.java @@ -306,6 +306,9 @@ public class DetailDataWriter { String countryCode = entry.getCountryCode(); String latitude = entry.getLatitude(); String longitude = entry.getLongitude(); + String countryName = entry.getCountryName(); + String regionName = entry.getRegionName(); + String cityName = entry.getCityName(); StringBuilder sb = new StringBuilder(); sb.append("{"version":1,\n" + ""nickname":"" + nickname + "",\n" @@ -334,6 +337,15 @@ public class DetailDataWriter { if (longitude != null) { sb.append(",\n"longitude":" + longitude); } + if (countryName != null) { + sb.append(",\n"country_name":"" + countryName + """); + } + if (regionName != null) { + sb.append(",\n"region_name":"" + regionName + """); + } + if (cityName != null) { + sb.append(",\n"city_name":"" + cityName + """); + }
/* Add exit addresses if at least one of them is distinct from the * onion-routing addresses. */ diff --git a/src/org/torproject/onionoo/Node.java b/src/org/torproject/onionoo/Node.java index 5dc3131..dd4fc8e 100644 --- a/src/org/torproject/onionoo/Node.java +++ b/src/org/torproject/onionoo/Node.java @@ -13,6 +13,9 @@ public class Node { private String latitude; private String longitude; private String countryCode; + private String countryName; + private String regionName; + private String cityName; private long lastSeenMillis; private int orPort; private int dirPort; @@ -56,6 +59,24 @@ public class Node { public String getCountryCode() { return this.countryCode; } + public void setCountryName(String countryName) { + this.countryName = countryName; + } + public String getCountryName() { + return this.countryName; + } + public void setRegionName(String regionName) { + this.regionName = regionName; + } + public String getRegionName() { + return this.regionName; + } + public void setCityName(String cityName) { + this.cityName = cityName; + } + public String getCityName() { + return this.cityName; + } public long getLastSeenMillis() { return this.lastSeenMillis; } diff --git a/src/org/torproject/onionoo/ResourceServlet.java b/src/org/torproject/onionoo/ResourceServlet.java index 4da06a2..529ed2b 100644 --- a/src/org/torproject/onionoo/ResourceServlet.java +++ b/src/org/torproject/onionoo/ResourceServlet.java @@ -126,6 +126,7 @@ public class ResourceServlet extends HttpServlet { /* Set response headers and start writing the response. */ response.setHeader("Access-Control-Allow-Origin", "*"); response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); PrintWriter pw = response.getWriter(); if (uri.equals("/" + resourceType + "/all")) { this.writeHeader(pw);
tor-commits@lists.torproject.org