tor-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
June 2014
- 21 participants
- 1212 discussions

[metrics-lib/master] Avoid parsing descriptor contents to Lists or Sets.
by karsten@torproject.org 18 Jun '14
by karsten@torproject.org 18 Jun '14
18 Jun '14
commit c439d346b9201032c118e0cadf2e4230bb9d7dca
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Tue Jun 17 20:26:47 2014 +0200
Avoid parsing descriptor contents to Lists or Sets.
If we can easily determine the number of List or Set elements, we can as
well store their contents in arrays and convert those to List or Set
instances when requested. This can save us some memory and doesn't cost
much performance.
---
.../descriptor/impl/ExtraInfoDescriptorImpl.java | 30 +++----
.../descriptor/impl/MicrodescriptorImpl.java | 19 +++--
.../descriptor/impl/NetworkStatusImpl.java | 20 +++++
.../torproject/descriptor/impl/ParseHelper.java | 28 +++----
.../impl/RelayNetworkStatusConsensusImpl.java | 38 +++------
.../descriptor/impl/RelayNetworkStatusImpl.java | 38 +++------
.../impl/RelayNetworkStatusVoteImpl.java | 47 ++++-------
.../descriptor/impl/ServerDescriptorImpl.java | 82 ++++++++++----------
.../descriptor/impl/TorperfResultImpl.java | 55 +++++++------
9 files changed, 163 insertions(+), 194 deletions(-)
diff --git a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
index 68cb850..13fdfa8 100644
--- a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
+++ b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
@@ -425,7 +425,7 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
String[] partsNoOpt) throws DescriptorParseException {
this.cellProcessedCells = ParseHelper.
parseCommaSeparatedIntegerValueList(line, partsNoOpt, 1);
- if (this.cellProcessedCells.size() != 10) {
+ if (this.cellProcessedCells.length != 10) {
throw new DescriptorParseException("There must be exact ten values "
+ "in line '" + line + "'.");
}
@@ -435,7 +435,7 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
String[] partsNoOpt) throws DescriptorParseException {
this.cellQueuedCells = ParseHelper.parseCommaSeparatedDoubleValueList(
line, partsNoOpt, 1);
- if (this.cellQueuedCells.size() != 10) {
+ if (this.cellQueuedCells.length != 10) {
throw new DescriptorParseException("There must be exact ten values "
+ "in line '" + line + "'.");
}
@@ -445,7 +445,7 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
String[] partsNoOpt) throws DescriptorParseException {
this.cellTimeInQueue = ParseHelper.
parseCommaSeparatedIntegerValueList(line, partsNoOpt, 1);
- if (this.cellTimeInQueue.size() != 10) {
+ if (this.cellTimeInQueue.length != 10) {
throw new DescriptorParseException("There must be exact ten values "
+ "in line '" + line + "'.");
}
@@ -474,16 +474,16 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
6);
this.connBiDirectStatsEndMillis = parsedStatsEndData[0];
this.connBiDirectStatsIntervalLength = parsedStatsEndData[1];
- List<Integer> parsedConnBiDirectStats = ParseHelper.
+ Integer[] parsedConnBiDirectStats = ParseHelper.
parseCommaSeparatedIntegerValueList(line, partsNoOpt, 5);
- if (parsedConnBiDirectStats.size() != 4) {
+ if (parsedConnBiDirectStats.length != 4) {
throw new DescriptorParseException("Illegal line '" + line + "' in "
+ "extra-info descriptor.");
}
- this.connBiDirectBelow = parsedConnBiDirectStats.get(0);
- this.connBiDirectRead = parsedConnBiDirectStats.get(1);
- this.connBiDirectWrite = parsedConnBiDirectStats.get(2);
- this.connBiDirectBoth = parsedConnBiDirectStats.get(3);
+ this.connBiDirectBelow = parsedConnBiDirectStats[0];
+ this.connBiDirectRead = parsedConnBiDirectStats[1];
+ this.connBiDirectWrite = parsedConnBiDirectStats[2];
+ this.connBiDirectBoth = parsedConnBiDirectStats[3];
}
private void parseExitStatsEndLine(String line, String lineNoOpt,
@@ -818,22 +818,22 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
return this.cellStatsIntervalLength;
}
- private List<Integer> cellProcessedCells;
+ private Integer[] cellProcessedCells;
public List<Integer> getCellProcessedCells() {
return this.cellProcessedCells == null ? null :
- new ArrayList<Integer>(this.cellProcessedCells);
+ Arrays.asList(this.cellProcessedCells);
}
- private List<Double> cellQueuedCells;
+ private Double[] cellQueuedCells;
public List<Double> getCellQueuedCells() {
return this.cellQueuedCells == null ? null :
- new ArrayList<Double>(this.cellQueuedCells);
+ Arrays.asList(this.cellQueuedCells);
}
- private List<Integer> cellTimeInQueue;
+ private Integer[] cellTimeInQueue;
public List<Integer> getCellTimeInQueue() {
return this.cellTimeInQueue == null ? null :
- new ArrayList<Integer>(this.cellTimeInQueue);
+ Arrays.asList(this.cellTimeInQueue);
}
private int cellCircuitsPerDecile = -1;
diff --git a/src/org/torproject/descriptor/impl/MicrodescriptorImpl.java b/src/org/torproject/descriptor/impl/MicrodescriptorImpl.java
index c27e946..12cbdd5 100644
--- a/src/org/torproject/descriptor/impl/MicrodescriptorImpl.java
+++ b/src/org/torproject/descriptor/impl/MicrodescriptorImpl.java
@@ -135,7 +135,7 @@ public class MicrodescriptorImpl extends DescriptorImpl
private void parseFamilyLine(String line, String[] parts)
throws DescriptorParseException {
- this.familyEntries = new ArrayList<String>();
+ String[] familyEntries = new String[parts.length - 1];
for (int i = 1; i < parts.length; i++) {
if (parts[i].startsWith("$")) {
if (parts[i].contains("=") ^ parts[i].contains("~")) {
@@ -143,19 +143,18 @@ public class MicrodescriptorImpl extends DescriptorImpl
String fingerprint = ParseHelper.parseTwentyByteHexString(line,
parts[i].substring(1, parts[i].indexOf(separator)));
String nickname = ParseHelper.parseNickname(line,
- parts[i].substring(parts[i].indexOf(
- separator) + 1));
- this.familyEntries.add("$" + fingerprint + separator
- + nickname);
+ parts[i].substring(parts[i].indexOf(separator) + 1));
+ familyEntries[i - 1] = "$" + fingerprint + separator + nickname;
} else {
- this.familyEntries.add("$"
+ familyEntries[i - 1] = "$"
+ ParseHelper.parseTwentyByteHexString(line,
- parts[i].substring(1)));
+ parts[i].substring(1));
}
} else {
- this.familyEntries.add(ParseHelper.parseNickname(line, parts[i]));
+ familyEntries[i - 1] = ParseHelper.parseNickname(line, parts[i]);
}
}
+ this.familyEntries = familyEntries;
}
private void parsePLine(String line, String[] parts)
@@ -234,10 +233,10 @@ public class MicrodescriptorImpl extends DescriptorImpl
return new ArrayList<String>(this.orAddresses);
}
- private List<String> familyEntries;
+ private String[] familyEntries;
public List<String> getFamilyEntries() {
return this.familyEntries == null ? null :
- new ArrayList<String>(this.familyEntries);
+ Arrays.asList(this.familyEntries);
}
private String defaultPolicy;
public String getDefaultPolicy() {
diff --git a/src/org/torproject/descriptor/impl/NetworkStatusImpl.java b/src/org/torproject/descriptor/impl/NetworkStatusImpl.java
index 6358ca3..d57128e 100644
--- a/src/org/torproject/descriptor/impl/NetworkStatusImpl.java
+++ b/src/org/torproject/descriptor/impl/NetworkStatusImpl.java
@@ -173,6 +173,26 @@ public abstract class NetworkStatusImpl extends DescriptorImpl {
}
}
+ protected String[] parseClientOrServerVersions(String line,
+ String[] parts) throws DescriptorParseException {
+ String[] result = null;
+ if (parts.length > 2) {
+ throw new DescriptorParseException("Illegal versions line '" + line
+ + "'.");
+ } else if (parts.length == 2) {
+ result = parts[1].split(",", -1);
+ for (String version : result) {
+ if (version.length() < 1) {
+ throw new DescriptorParseException("Illegal versions line '"
+ + line + "'.");
+ }
+ }
+ } else if (parts.length == 1) {
+ result = new String[0];
+ }
+ return result;
+ }
+
protected void parseStatusEntry(byte[] statusEntryBytes)
throws DescriptorParseException {
NetworkStatusEntryImpl statusEntry = new NetworkStatusEntryImpl(
diff --git a/src/org/torproject/descriptor/impl/ParseHelper.java b/src/org/torproject/descriptor/impl/ParseHelper.java
index 8b314fd..4fbe34a 100644
--- a/src/org/torproject/descriptor/impl/ParseHelper.java
+++ b/src/org/torproject/descriptor/impl/ParseHelper.java
@@ -5,9 +5,7 @@ package org.torproject.descriptor.impl;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TimeZone;
@@ -364,54 +362,56 @@ public class ParseHelper {
return result;
}
- public static List<Integer> parseCommaSeparatedIntegerValueList(
+ public static Integer[] parseCommaSeparatedIntegerValueList(
String line, String[] partsNoOpt, int index)
throws DescriptorParseException {
- List<Integer> result = new ArrayList<Integer>();
+ Integer[] result = null;
if (partsNoOpt.length < index) {
throw new DescriptorParseException("Line '" + line + "' does not "
+ "contain a comma-separated value list at index " + index
+ ".");
- } else if (partsNoOpt.length > index + 1 ) {
+ } else if (partsNoOpt.length > index + 1) {
throw new DescriptorParseException("Line '" + line + "' contains "
+ "unrecognized values beyond the expected comma-separated "
+ "value list at index " + index + ".");
} else if (partsNoOpt.length > index) {
String[] listElements = partsNoOpt[index].split(",", -1);
- for (String listElement : listElements) {
+ result = new Integer[listElements.length];
+ for (int i = 0; i < listElements.length; i++) {
try {
- result.add(Integer.parseInt(listElement));
+ result[i] = Integer.parseInt(listElements[i]);
} catch (NumberFormatException e) {
throw new DescriptorParseException("Line '" + line + "' "
+ "contains an illegal value in list element '"
- + listElement + "'.");
+ + listElements[i] + "'.");
}
}
}
return result;
}
- public static List<Double> parseCommaSeparatedDoubleValueList(
+ public static Double[] parseCommaSeparatedDoubleValueList(
String line, String[] partsNoOpt, int index)
throws DescriptorParseException {
- List<Double> result = new ArrayList<Double>();
+ Double[] result = null;
if (partsNoOpt.length < index) {
throw new DescriptorParseException("Line '" + line + "' does not "
+ "contain a comma-separated value list at index " + index
+ ".");
- } else if (partsNoOpt.length > index + 1 ) {
+ } else if (partsNoOpt.length > index + 1) {
throw new DescriptorParseException("Line '" + line + "' contains "
+ "unrecognized values beyond the expected comma-separated "
+ "value list at index " + index + ".");
} else if (partsNoOpt.length > index) {
String[] listElements = partsNoOpt[index].split(",", -1);
- for (String listElement : listElements) {
+ result = new Double[listElements.length];
+ for (int i = 0; i < listElements.length; i++) {
try {
- result.add(Double.parseDouble(listElement));
+ result[i] = Double.parseDouble(listElements[i]);
} catch (NumberFormatException e) {
throw new DescriptorParseException("Line '" + line + "' "
+ "contains an illegal value in list element '"
- + listElement + "'.");
+ + listElements[i] + "'.");
}
}
}
diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
index faad733..3eb69b5 100644
--- a/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
+++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java
@@ -249,37 +249,17 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
line, parts);
}
- private List<String> parseClientOrServerVersions(String line,
- String[] parts) throws DescriptorParseException {
- List<String> result = new ArrayList<String>();
- if (parts.length == 1) {
- return result;
- } else if (parts.length > 2) {
- throw new DescriptorParseException("Illegal versions line '" + line
- + "'.");
- }
- String[] versions = parts[1].split(",", -1);
- for (int i = 0; i < versions.length; i++) {
- String version = versions[i];
- if (version.length() < 1) {
- throw new DescriptorParseException("Illegal versions line '"
- + line + "'.");
- }
- result.add(version);
- }
- return result;
- }
-
private void parseKnownFlagsLine(String line, String[] parts)
throws DescriptorParseException {
if (parts.length < 2) {
throw new DescriptorParseException("No known flags in line '" + line
+ "'.");
}
- this.knownFlags = new TreeSet<String>();
+ String[] knownFlags = new String[parts.length - 1];
for (int i = 1; i < parts.length; i++) {
- this.knownFlags.add(parts[i]);
+ knownFlags[i - 1] = parts[i];
}
+ this.knownFlags = knownFlags;
}
private void parseParamsLine(String line, String[] parts)
@@ -339,21 +319,21 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl
return this.distSeconds;
}
- private List<String> recommendedClientVersions;
+ private String[] recommendedClientVersions;
public List<String> getRecommendedClientVersions() {
return this.recommendedClientVersions == null ? null :
- new ArrayList<String>(this.recommendedClientVersions);
+ Arrays.asList(this.recommendedClientVersions);
}
- private List<String> recommendedServerVersions;
+ private String[] recommendedServerVersions;
public List<String> getRecommendedServerVersions() {
return this.recommendedServerVersions == null ? null :
- new ArrayList<String>(this.recommendedServerVersions);
+ Arrays.asList(this.recommendedServerVersions);
}
- private SortedSet<String> knownFlags;
+ private String[] knownFlags;
public SortedSet<String> getKnownFlags() {
- return new TreeSet<String>(this.knownFlags);
+ return new TreeSet<String>(Arrays.asList(this.knownFlags));
}
private SortedMap<String, Integer> consensusParams;
diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
index 8f0d984..ab86327 100644
--- a/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
+++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java
@@ -246,27 +246,6 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl
line, parts);
}
- private List<String> parseClientOrServerVersions(String line,
- String[] parts) throws DescriptorParseException {
- List<String> result = new ArrayList<String>();
- if (parts.length == 1) {
- return result;
- } else if (parts.length > 2) {
- throw new DescriptorParseException("Illegal versions line '" + line
- + "'.");
- }
- String[] versions = parts[1].split(",", -1);
- for (int i = 0; i < versions.length; i++) {
- String version = versions[i];
- if (version.length() < 1) {
- throw new DescriptorParseException("Illegal versions line '"
- + line + "'.");
- }
- result.add(version);
- }
- return result;
- }
-
private void parsePublishedLine(String line, String[] parts)
throws DescriptorParseException {
this.publishedMillis = ParseHelper.parseTimestampAtIndex(line, parts,
@@ -275,10 +254,11 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl
private void parseDirOptionsLine(String line, String[] parts)
throws DescriptorParseException {
- this.dirOptions = new TreeSet<String>();
+ String[] dirOptions = new String[parts.length - 1];
for (int i = 1; i < parts.length; i++) {
- this.dirOptions.add(parts[i]);
+ dirOptions[i - 1] = parts[i];
}
+ this.dirOptions = dirOptions;
}
private void parseDirectorySignatureLine(String line, String[] parts)
@@ -329,16 +309,16 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl
return this.dirSigningKey;
}
- private List<String> recommendedClientVersions;
+ private String[] recommendedClientVersions;
public List<String> getRecommendedClientVersions() {
return this.recommendedClientVersions == null ? null :
- new ArrayList<String>(this.recommendedClientVersions);
+ Arrays.asList(this.recommendedClientVersions);
}
- private List<String> recommendedServerVersions;
+ private String[] recommendedServerVersions;
public List<String> getRecommendedServerVersions() {
return this.recommendedServerVersions == null ? null :
- new ArrayList<String>(this.recommendedServerVersions);
+ Arrays.asList(this.recommendedServerVersions);
}
private long publishedMillis;
@@ -346,9 +326,9 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl
return this.publishedMillis;
}
- private SortedSet<String> dirOptions;
+ private String[] dirOptions;
public SortedSet<String> getDirOptions() {
- return new TreeSet<String>(this.dirOptions);
+ return new TreeSet<String>(Arrays.asList(this.dirOptions));
}
private String nickname;
diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
index 9dbc1f0..c5c867e 100644
--- a/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
+++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java
@@ -165,7 +165,7 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
throw new DescriptorParseException("Illegal line '" + line
+ "' in vote.");
}
- this.consensusMethods = new ArrayList<Integer>();
+ Integer[] consensusMethods = new Integer[parts.length - 1];
for (int i = 1; i < parts.length; i++) {
int consensusMethod = -1;
try {
@@ -177,8 +177,9 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
throw new DescriptorParseException("Illegal consensus method "
+ "number in line '" + line + "'.");
}
- this.consensusMethods.add(Integer.parseInt(parts[i]));
+ consensusMethods[i - 1] = consensusMethod;
}
+ this.consensusMethods = consensusMethods;
}
private void parsePublishedLine(String line, String[] parts)
@@ -232,37 +233,17 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
line, parts);
}
- private List<String> parseClientOrServerVersions(String line,
- String[] parts) throws DescriptorParseException {
- List<String> result = new ArrayList<String>();
- if (parts.length == 1) {
- return result;
- } else if (parts.length > 2) {
- throw new DescriptorParseException("Illegal versions line '" + line
- + "'.");
- }
- String[] versions = parts[1].split(",", -1);
- for (int i = 0; i < versions.length; i++) {
- String version = versions[i];
- if (version.length() < 1) {
- throw new DescriptorParseException("Illegal versions line '"
- + line + "'.");
- }
- result.add(version);
- }
- return result;
- }
-
private void parseKnownFlagsLine(String line, String[] parts)
throws DescriptorParseException {
if (parts.length < 2) {
throw new DescriptorParseException("No known flags in line '" + line
+ "'.");
}
- this.knownFlags = new TreeSet<String>();
+ String[] knownFlags = new String[parts.length - 1];
for (int i = 1; i < parts.length; i++) {
- this.knownFlags.add(parts[i]);
+ knownFlags[i - 1] = parts[i];
}
+ this.knownFlags = knownFlags;
}
private void parseFlagThresholdsLine(String line, String[] parts)
@@ -468,9 +449,9 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
return this.networkStatusVersion;
}
- private List<Integer> consensusMethods;
+ private Integer[] consensusMethods;
public List<Integer> getConsensusMethods() {
- return new ArrayList<Integer>(this.consensusMethods);
+ return Arrays.asList(this.consensusMethods);
}
private long publishedMillis;
@@ -503,21 +484,21 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl
return this.distSeconds;
}
- private List<String> recommendedClientVersions;
+ private String[] recommendedClientVersions;
public List<String> getRecommendedClientVersions() {
return this.recommendedClientVersions == null ? null :
- new ArrayList<String>(this.recommendedClientVersions);
+ Arrays.asList(this.recommendedClientVersions);
}
- private List<String> recommendedServerVersions;
+ private String[] recommendedServerVersions;
public List<String> getRecommendedServerVersions() {
return this.recommendedServerVersions == null ? null :
- new ArrayList<String>(this.recommendedServerVersions);
+ Arrays.asList(this.recommendedServerVersions);
}
- private SortedSet<String> knownFlags;
+ private String[] knownFlags;
public SortedSet<String> getKnownFlags() {
- return new TreeSet<String>(this.knownFlags);
+ return new TreeSet<String>(Arrays.asList(this.knownFlags));
}
private long stableUptime;
diff --git a/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java b/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java
index 6adc689..6a59038 100644
--- a/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java
+++ b/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java
@@ -330,7 +330,7 @@ public class ServerDescriptorImpl extends DescriptorImpl
private void parseFamilyLine(String line, String lineNoOpt,
String[] partsNoOpt) throws DescriptorParseException {
- this.familyEntries = new ArrayList<String>();
+ String[] familyEntries = new String[partsNoOpt.length - 1];
for (int i = 1; i < partsNoOpt.length; i++) {
if (partsNoOpt[i].startsWith("$")) {
if (partsNoOpt[i].contains("=") ^ partsNoOpt[i].contains("~")) {
@@ -341,18 +341,18 @@ public class ServerDescriptorImpl extends DescriptorImpl
String nickname = ParseHelper.parseNickname(line,
partsNoOpt[i].substring(partsNoOpt[i].indexOf(
separator) + 1));
- this.familyEntries.add("$" + fingerprint + separator
- + nickname);
+ familyEntries[i - 1] = "$" + fingerprint + separator + nickname;
} else {
- this.familyEntries.add("$"
+ familyEntries[i - 1] = "$"
+ ParseHelper.parseTwentyByteHexString(line,
- partsNoOpt[i].substring(1)));
+ partsNoOpt[i].substring(1));
}
} else {
- this.familyEntries.add(ParseHelper.parseNickname(line,
- partsNoOpt[i]));
+ familyEntries[i - 1] = ParseHelper.parseNickname(line,
+ partsNoOpt[i]);
}
}
+ this.familyEntries = familyEntries;
}
private void parseReadHistoryLine(String line, String lineNoOpt,
@@ -400,15 +400,15 @@ public class ServerDescriptorImpl extends DescriptorImpl
private void parseHiddenServiceDirLine(String line, String lineNoOpt,
String[] partsNoOpt) throws DescriptorParseException {
- this.hiddenServiceDirVersions = new ArrayList<Integer>();
if (partsNoOpt.length == 1) {
- this.hiddenServiceDirVersions.add(2);
+ this.hiddenServiceDirVersions = new Integer[] { 2 };
} else {
try {
+ Integer[] result = new Integer[partsNoOpt.length - 1];
for (int i = 1; i < partsNoOpt.length; i++) {
- this.hiddenServiceDirVersions.add(Integer.parseInt(
- partsNoOpt[i]));
+ result[i - 1] = Integer.parseInt(partsNoOpt[i]);
}
+ this.hiddenServiceDirVersions = result;
} catch (NumberFormatException e) {
throw new DescriptorParseException("Illegal value in line '"
+ line + "'.");
@@ -418,32 +418,32 @@ public class ServerDescriptorImpl extends DescriptorImpl
private void parseProtocolsLine(String line, String lineNoOpt,
String[] partsNoOpt) throws DescriptorParseException {
- boolean isValid = true;
- this.linkProtocolVersions = new ArrayList<Integer>();
- this.circuitProtocolVersions = new ArrayList<Integer>();
- List<Integer> protocolVersions = null;
+ int linkIndex = -1, circuitIndex = -1;
for (int i = 1; i < partsNoOpt.length; i++) {
- String part = partsNoOpt[i];
- if (part.equals("Link")) {
- protocolVersions = this.linkProtocolVersions;
- } else if (part.equals("Circuit")) {
- protocolVersions = this.circuitProtocolVersions;
- } else if (protocolVersions == null) {
- isValid = false;
- break;
- } else {
- try {
- protocolVersions.add(Integer.parseInt(part));
- } catch (NumberFormatException e) {
- isValid = false;
- break;
- }
+ if (partsNoOpt[i].equals("Link")) {
+ linkIndex = i;
+ } else if (partsNoOpt[i].equals("Circuit")) {
+ circuitIndex = i;
}
}
- if (protocolVersions != this.circuitProtocolVersions) {
- isValid = false;
+ if (linkIndex < 0 || circuitIndex < 0 || circuitIndex < linkIndex) {
+ throw new DescriptorParseException("Illegal line '" + line + "'.");
}
- if (!isValid) {
+ try {
+ Integer[] linkProtocolVersions =
+ new Integer[circuitIndex - linkIndex - 1];
+ for (int i = linkIndex + 1, j = 0; i < circuitIndex; i++, j++) {
+ linkProtocolVersions[j] = Integer.parseInt(partsNoOpt[i]);
+ }
+ Integer[] circuitProtocolVersions =
+ new Integer[partsNoOpt.length - circuitIndex - 1];
+ for (int i = circuitIndex + 1, j = 0; i < partsNoOpt.length;
+ i++, j++) {
+ circuitProtocolVersions[j] = Integer.parseInt(partsNoOpt[i]);
+ }
+ this.linkProtocolVersions = linkProtocolVersions;
+ this.circuitProtocolVersions = circuitProtocolVersions;
+ } catch (NumberFormatException e) {
throw new DescriptorParseException("Illegal line '" + line + "'.");
}
}
@@ -639,10 +639,10 @@ public class ServerDescriptorImpl extends DescriptorImpl
return this.contact;
}
- private List<String> familyEntries;
+ private String[] familyEntries;
public List<String> getFamilyEntries() {
return this.familyEntries == null ? null :
- new ArrayList<String>(this.familyEntries);
+ Arrays.asList(this.familyEntries);
}
private BandwidthHistory readHistory;
@@ -670,22 +670,22 @@ public class ServerDescriptorImpl extends DescriptorImpl
return this.extraInfoDigest;
}
- private List<Integer> hiddenServiceDirVersions;
+ private Integer[] hiddenServiceDirVersions;
public List<Integer> getHiddenServiceDirVersions() {
return this.hiddenServiceDirVersions == null ? null :
- new ArrayList<Integer>(this.hiddenServiceDirVersions);
+ Arrays.asList(this.hiddenServiceDirVersions);
}
- private List<Integer> linkProtocolVersions;
+ private Integer[] linkProtocolVersions;
public List<Integer> getLinkProtocolVersions() {
return this.linkProtocolVersions == null ? null :
- new ArrayList<Integer>(this.linkProtocolVersions);
+ Arrays.asList(this.linkProtocolVersions);
}
- private List<Integer> circuitProtocolVersions;
+ private Integer[] circuitProtocolVersions;
public List<Integer> getCircuitProtocolVersions() {
return this.circuitProtocolVersions == null ? null :
- new ArrayList<Integer>(this.circuitProtocolVersions);
+ Arrays.asList(this.circuitProtocolVersions);
}
private boolean allowSingleHopExits;
diff --git a/src/org/torproject/descriptor/impl/TorperfResultImpl.java b/src/org/torproject/descriptor/impl/TorperfResultImpl.java
index 6a8c1c7..9045498 100644
--- a/src/org/torproject/descriptor/impl/TorperfResultImpl.java
+++ b/src/org/torproject/descriptor/impl/TorperfResultImpl.java
@@ -241,17 +241,14 @@ public class TorperfResultImpl extends DescriptorImpl
String line) throws DescriptorParseException {
String percentileString = keyValue.substring("DATAPERC".length(),
keyValue.indexOf("="));
- if (!unparsedPercentiles.contains(percentileString)) {
+ if (!this.unparsedPercentiles.contains(percentileString)) {
throw new DescriptorParseException("Illegal value in '" + keyValue
+ "' in line '" + line + "'.");
}
- unparsedPercentiles.remove(percentileString);
- if (this.dataPercentiles == null) {
- this.dataPercentiles = new TreeMap<Integer, Long>();
- }
- int percentile = Integer.parseInt(percentileString);
+ this.unparsedPercentiles.remove(percentileString);
+ int decileIndex = (Integer.parseInt(percentileString) / 10) - 1;
long timestamp = this.parseTimestamp(value, keyValue, line);
- this.dataPercentiles.put(percentile, timestamp);
+ this.dataDeciles[decileIndex] = timestamp;
}
private void parseLaunch(String value, String keyValue, String line)
@@ -266,24 +263,27 @@ public class TorperfResultImpl extends DescriptorImpl
private void parsePath(String value, String keyValue, String line)
throws DescriptorParseException {
- this.path = new ArrayList<String>();
- for (String fingerprint : value.split(",")) {
- if (fingerprint.length() != 41) {
+ String[] valueParts = value.split(",");
+ String[] result = new String[valueParts.length];
+ for (int i = 0; i < valueParts.length; i++) {
+ if (valueParts[i].length() != 41) {
throw new DescriptorParseException("Illegal value in '" + keyValue
+ "' in line '" + line + "'.");
}
- this.path.add(ParseHelper.parseTwentyByteHexString(line,
- fingerprint.substring(1)));
+ result[i] = ParseHelper.parseTwentyByteHexString(line,
+ valueParts[i].substring(1));
}
+ this.path = result;
}
private void parseBuildTimes(String value, String keyValue, String line)
throws DescriptorParseException {
- this.buildTimes = new ArrayList<Long>();
- for (String buildTimeString : value.split(",")) {
- this.buildTimes.add(this.parseTimestamp(buildTimeString, keyValue,
- line));
+ String[] valueParts = value.split(",");
+ Long[] result = new Long[valueParts.length];
+ for (int i = 0; i < valueParts.length; i++) {
+ result[i] = this.parseTimestamp(valueParts[i], keyValue, line);
}
+ this.buildTimes = result;
}
private void parseTimeout(String value, String keyValue, String line)
@@ -417,10 +417,18 @@ public class TorperfResultImpl extends DescriptorImpl
return this.didTimeout;
}
- private SortedMap<Integer, Long> dataPercentiles;
+ private Long[] dataDeciles = new Long[9];
public SortedMap<Integer, Long> getDataPercentiles() {
- return this.dataPercentiles == null ? null :
- new TreeMap<Integer, Long>(this.dataPercentiles);
+ if (this.dataDeciles == null) {
+ return null;
+ }
+ SortedMap<Integer, Long> result = new TreeMap<Integer, Long>();
+ for (int i = 0; i < dataDeciles.length; i++) {
+ if (dataDeciles[i] > 0L) {
+ result.put(10 * (i + 1), dataDeciles[i]);
+ }
+ }
+ return result;
}
private long launchMillis = -1L;
@@ -433,14 +441,15 @@ public class TorperfResultImpl extends DescriptorImpl
return this.usedAtMillis;
}
- private List<String> path;
+ private String[] path;
public List<String> getPath() {
- return new ArrayList<String>(this.path);
+ return this.path == null ? null : Arrays.asList(this.path);
}
- private List<Long> buildTimes;
+ private Long[] buildTimes;
public List<Long> getBuildTimes() {
- return new ArrayList<Long>(this.buildTimes);
+ return this.buildTimes == null ? null :
+ Arrays.asList(this.buildTimes);
}
private long timeout = -1L;
1
0

[metrics-lib/master] Avoid parsing descriptor contents to Maps.
by karsten@torproject.org 18 Jun '14
by karsten@torproject.org 18 Jun '14
18 Jun '14
commit 73e5a6989df19923775978428cd9bb21e0a96dc4
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Wed Jun 18 11:38:07 2014 +0200
Avoid parsing descriptor contents to Maps.
Extra-info descriptors contain lots of comma-separated key=value lists
that we store in SortedMap instances. But those occupy a lot of memory,
and it's not certain that we'll ever want to use the contained keys or
values.
New approach: when parsing a descriptor, use regular expressions to check
if lines are valid, and delay parsing into maps until needed.
---
.../descriptor/impl/ExtraInfoDescriptorImpl.java | 90 ++++++++++----------
.../torproject/descriptor/impl/ParseHelper.java | 59 ++++++++-----
2 files changed, 81 insertions(+), 68 deletions(-)
diff --git a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
index 13fdfa8..836551a 100644
--- a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
+++ b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
@@ -712,28 +712,28 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
return this.dirreqStatsIntervalLength;
}
- private SortedMap<String, Integer> dirreqV2Ips;
+ private String dirreqV2Ips;
public SortedMap<String, Integer> getDirreqV2Ips() {
- return this.dirreqV2Ips == null ? null :
- new TreeMap<String, Integer>(this.dirreqV2Ips);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV2Ips);
}
- private SortedMap<String, Integer> dirreqV3Ips;
+ private String dirreqV3Ips;
public SortedMap<String, Integer> getDirreqV3Ips() {
- return this.dirreqV3Ips == null ? null :
- new TreeMap<String, Integer>(this.dirreqV3Ips);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV3Ips);
}
- private SortedMap<String, Integer> dirreqV2Reqs;
+ private String dirreqV2Reqs;
public SortedMap<String, Integer> getDirreqV2Reqs() {
- return this.dirreqV2Reqs == null ? null :
- new TreeMap<String, Integer>(this.dirreqV2Reqs);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV2Reqs);
}
- private SortedMap<String, Integer> dirreqV3Reqs;
+ private String dirreqV3Reqs;
public SortedMap<String, Integer> getDirreqV3Reqs() {
- return this.dirreqV3Reqs == null ? null :
- new TreeMap<String, Integer>(this.dirreqV3Reqs);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV3Reqs);
}
private double dirreqV2Share = -1.0;
@@ -746,40 +746,40 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
return this.dirreqV3Share;
}
- private SortedMap<String, Integer> dirreqV2Resp;
+ private String dirreqV2Resp;
public SortedMap<String, Integer> getDirreqV2Resp() {
- return this.dirreqV2Resp == null ? null :
- new TreeMap<String, Integer>(this.dirreqV2Resp);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV2Resp);
}
- private SortedMap<String, Integer> dirreqV3Resp;
+ private String dirreqV3Resp;
public SortedMap<String, Integer> getDirreqV3Resp() {
- return this.dirreqV3Resp == null ? null :
- new TreeMap<String, Integer>(this.dirreqV3Resp);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV3Resp);
}
- private SortedMap<String, Integer> dirreqV2DirectDl;
+ private String dirreqV2DirectDl;
public SortedMap<String, Integer> getDirreqV2DirectDl() {
- return this.dirreqV2DirectDl == null ? null :
- new TreeMap<String, Integer>(this.dirreqV2DirectDl);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV2DirectDl);
}
- private SortedMap<String, Integer> dirreqV3DirectDl;
+ private String dirreqV3DirectDl;
public SortedMap<String, Integer> getDirreqV3DirectDl() {
- return this.dirreqV3DirectDl == null ? null :
- new TreeMap<String, Integer>(this.dirreqV3DirectDl);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV3DirectDl);
}
- private SortedMap<String, Integer> dirreqV2TunneledDl;
+ private String dirreqV2TunneledDl;
public SortedMap<String, Integer> getDirreqV2TunneledDl() {
- return this.dirreqV2TunneledDl == null ? null :
- new TreeMap<String, Integer>(this.dirreqV2TunneledDl);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV2TunneledDl);
}
- private SortedMap<String, Integer> dirreqV3TunneledDl;
+ private String dirreqV3TunneledDl;
public SortedMap<String, Integer> getDirreqV3TunneledDl() {
- return this.dirreqV3TunneledDl == null ? null :
- new TreeMap<String, Integer>(this.dirreqV3TunneledDl);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.dirreqV3TunneledDl);
}
private BandwidthHistory dirreqReadHistory;
@@ -802,10 +802,10 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
return this.entryStatsIntervalLength;
}
- private SortedMap<String, Integer> entryIps;
+ private String entryIps;
public SortedMap<String, Integer> getEntryIps() {
- return this.entryIps == null ? null :
- new TreeMap<String, Integer>(this.entryIps);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.entryIps);
}
private long cellStatsEndMillis = -1L;
@@ -904,10 +904,10 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
return this.geoipStartTimeMillis;
}
- private SortedMap<String, Integer> geoipClientOrigins;
+ private String geoipClientOrigins;
public SortedMap<String, Integer> getGeoipClientOrigins() {
- return this.geoipClientOrigins == null ? null :
- new TreeMap<String, Integer>(this.geoipClientOrigins);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.geoipClientOrigins);
}
private long bridgeStatsEndMillis = -1L;
@@ -920,22 +920,22 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
return this.bridgeStatsIntervalLength;
}
- private SortedMap<String, Integer> bridgeIps;
+ private String bridgeIps;
public SortedMap<String, Integer> getBridgeIps() {
- return this.bridgeIps == null ? null :
- new TreeMap<String, Integer>(this.bridgeIps);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.bridgeIps);
}
- private SortedMap<String, Integer> bridgeIpVersions;
+ private String bridgeIpVersions;
public SortedMap<String, Integer> getBridgeIpVersions() {
- return this.bridgeIpVersions == null ? null :
- new TreeMap<String, Integer>(this.bridgeIpVersions);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.bridgeIpVersions);
}
- private SortedMap<String, Integer> bridgeIpTransports;
+ private String bridgeIpTransports;
public SortedMap<String, Integer> getBridgeIpTransports() {
- return this.bridgeIpTransports == null ? null :
- new TreeMap<String, Integer>(this.bridgeIpTransports);
+ return ParseHelper.convertCommaSeparatedKeyIntegerValueList(
+ this.bridgeIpTransports);
}
private List<String> transports = new ArrayList<String>();
diff --git a/src/org/torproject/descriptor/impl/ParseHelper.java b/src/org/torproject/descriptor/impl/ParseHelper.java
index 4fbe34a..048225c 100644
--- a/src/org/torproject/descriptor/impl/ParseHelper.java
+++ b/src/org/torproject/descriptor/impl/ParseHelper.java
@@ -286,11 +286,13 @@ public class ParseHelper {
toUpperCase();
}
- public static SortedMap<String, Integer>
- parseCommaSeparatedKeyIntegerValueList(String line,
- String[] partsNoOpt, int index, int keyLength)
+ private static Map<Integer, Pattern>
+ commaSeparatedKeyValueListPatterns =
+ new HashMap<Integer, Pattern>();
+ public static String parseCommaSeparatedKeyIntegerValueList(
+ String line, String[] partsNoOpt, int index, int keyLength)
throws DescriptorParseException {
- SortedMap<String, Integer> result = new TreeMap<String, Integer>();
+ String result = "";
if (partsNoOpt.length < index) {
throw new DescriptorParseException("Line '" + line + "' does not "
+ "contain a key-value list at index " + index + ".");
@@ -299,26 +301,37 @@ public class ParseHelper {
+ "unrecognized values beyond the expected key-value list at "
+ "index " + index + ".");
} else if (partsNoOpt.length > index) {
- String[] listElements = partsNoOpt[index].split(",", -1);
- for (String listElement : listElements) {
- String[] keyAndValue = listElement.split("=");
- String key = null;
- int value = -1;
- if (keyAndValue.length == 2 && (keyLength == 0 ||
- keyAndValue[0].length() == keyLength)) {
- try {
- value = Integer.parseInt(keyAndValue[1]);
- key = keyAndValue[0];
- } catch (NumberFormatException e) {
- /* Handle below. */
- }
- }
- if (key == null) {
- throw new DescriptorParseException("Line '" + line + "' "
- + "contains an illegal key or value in list element '"
- + listElement + "'.");
+ if (!commaSeparatedKeyValueListPatterns.containsKey(keyLength)) {
+ String keyPattern = "[0-9a-zA-Z?<>-]"
+ + (keyLength == 0 ? "+" : "{" + keyLength + "}");
+ String valuePattern = "\\-?[0-9]{1,9}";
+ String patternString = String.format("^%s=%s(,%s=%s)*$",
+ keyPattern, valuePattern, keyPattern, valuePattern);
+ commaSeparatedKeyValueListPatterns.put(keyLength,
+ Pattern.compile(patternString));
+ }
+ Pattern pattern = commaSeparatedKeyValueListPatterns.get(
+ keyLength);
+ if (pattern.matcher(partsNoOpt[index]).matches()) {
+ result = partsNoOpt[index];
+ } else {
+ throw new DescriptorParseException("Line '" + line + "' "
+ + "contains an illegal key or value.");
+ }
+ }
+ return result;
+ }
+
+ public static SortedMap<String, Integer>
+ convertCommaSeparatedKeyIntegerValueList(String validatedString) {
+ SortedMap<String, Integer> result = null;
+ if (validatedString != null) {
+ result = new TreeMap<String, Integer>();
+ if (validatedString.contains("=")) {
+ for (String listElement : validatedString.split(",", -1)) {
+ String[] keyAndValue = listElement.split("=");
+ result.put(keyAndValue[0], Integer.parseInt(keyAndValue[1]));
}
- result.put(key, value);
}
}
return result;
1
0
commit b1478b8fb5bb2a96ba4367bc156b770d29baa7b8
Author: Karsten Loesing <karsten.loesing(a)gmx.net>
Date: Tue Jun 17 13:44:55 2014 +0200
Add unit tests for 2351cea.
---
.../descriptor/impl/ExtraInfoDescriptorImplTest.java | 11 +++++++++++
.../descriptor/impl/ServerDescriptorImplTest.java | 9 +++++++++
2 files changed, 20 insertions(+)
diff --git a/test/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java b/test/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
index cd23ab0..f73b4a1 100644
--- a/test/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
+++ b/test/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
@@ -745,6 +745,17 @@ public class ExtraInfoDescriptorImplTest {
descriptor.getFingerprint());
}
+ @Test()
+ public void testExtraInfoNicknameTwoSpaces()
+ throws DescriptorParseException {
+ ExtraInfoDescriptor descriptor = DescriptorBuilder.
+ createWithExtraInfoLine("opt extra-info chaoscomputerclub5 "
+ + "A9C039A5FD02FCA06303DCFAABE25C5912C63B26");
+ assertEquals("chaoscomputerclub5", descriptor.getNickname());
+ assertEquals("A9C039A5FD02FCA06303DCFAABE25C5912C63B26",
+ descriptor.getFingerprint());
+ }
+
@Test(expected = DescriptorParseException.class)
public void testExtraInfoLineNotFirst()
throws DescriptorParseException {
diff --git a/test/org/torproject/descriptor/impl/ServerDescriptorImplTest.java b/test/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
index b2160a5..85aa761 100644
--- a/test/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
+++ b/test/org/torproject/descriptor/impl/ServerDescriptorImplTest.java
@@ -402,6 +402,15 @@ public class ServerDescriptorImplTest {
+ "saberrider2008ReallyLongNickname 94.134.192.243 9001 0 0");
}
+ @Test()
+ public void testNicknameTwoSpaces() throws DescriptorParseException {
+ ServerDescriptor descriptor = DescriptorBuilder.
+ createWithRouterLine("router saberrider2008 "
+ + "94.134.192.243 9001 0 0");
+ assertEquals("saberrider2008", descriptor.getNickname());
+ assertEquals("94.134.192.243", descriptor.getAddress());
+ }
+
@Test(expected = DescriptorParseException.class)
public void testAddress24() throws DescriptorParseException {
DescriptorBuilder.createWithRouterLine("router saberrider2008 "
1
0

[tor-browser/tor-browser-24.6.0esr-4.x-1] fixup! Tor Browser's official .mozconfigs.
by mikeperry@torproject.org 18 Jun '14
by mikeperry@torproject.org 18 Jun '14
18 Jun '14
commit d15bdd2f437a8f6d8c83dbd20a81af01311cbf34
Author: Mike Perry <mikeperry-git(a)torproject.org>
Date: Wed Jun 18 06:41:00 2014 -0700
fixup! Tor Browser's official .mozconfigs.
Add .mozconfig-asan for #10599.
---
.mozconfig-asan | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/.mozconfig-asan b/.mozconfig-asan
new file mode 100644
index 0000000..32e3096
--- /dev/null
+++ b/.mozconfig-asan
@@ -0,0 +1,33 @@
+. $topsrcdir/browser/config/mozconfig
+
+export CFLAGS="-fsanitize=address -Dxmalloc=myxmalloc -fsanitize=undefined"
+# When compiling with GCC 4.9.0 we need the libstdc++ either shipped with the
+# bundles or link statically against it. We chose the latter as a) the
+# resulting size of the bundle is smaller and b) there would probably occur
+# issues with our Gitian setup as we compile GCC without LIBFAKETIME being set
+# due to bug 11459.
+export CXXFLAGS="-fsanitize=address -Dxmalloc=myxmalloc -fsanitize=undefined -static-libstdc++"
+export LDFLAGS="-fsanitize=address -fsanitize=undefined"
+
+mk_add_option sMOZ_OBJDIR=@TOPSRCDIR@/obj-@CONFIG_GUESS@
+mk_add_options MOZ_APP_DISPLAYNAME=TorBrowser
+mk_add_options MOZ_MAKE_FLAGS="-j4"
+mk_add_options MOZILLA_OFFICIAL=1
+mk_add_options BUILD_OFFICIAL=1
+
+ac_add_options --enable-address-sanitizer
+ac_add_options --disable-jemalloc
+ac_add_options --disable-elf-hack
+
+ac_add_options --enable-optimize
+#ac_add_options --disable-optimize
+ac_add_options --enable-official-branding
+ac_add_options --disable-strip
+ac_add_options --disable-install-strip
+ac_add_options --disable-tests
+ac_add_options --disable-debug
+ac_add_options --disable-maintenance-service
+ac_add_options --disable-updater
+ac_add_options --disable-crashreporter
+ac_add_options --disable-webrtc
+#ac_add_options --disable-ctypes
1
0

18 Jun '14
commit 43aadbf0465cb414843b43cc874434a8d377aa31
Author: Translation commit bot <translation(a)torproject.org>
Date: Wed Jun 18 07:45:46 2014 +0000
Update translations for tails-iuk
---
id.po | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/id.po b/id.po
index 7b0e99e..eb67c4d 100644
--- a/id.po
+++ b/id.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: Tails developers <tails(a)boum.org>\n"
"POT-Creation-Date: 2014-05-28 22:50+0200\n"
-"PO-Revision-Date: 2014-06-18 06:30+0000\n"
+"PO-Revision-Date: 2014-06-18 07:39+0000\n"
"Last-Translator: yogipriyo <yogipriyo.prayogo(a)gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/torproject/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -91,7 +91,7 @@ msgstr ""
#: ../lib/Tails/IUK/Frontend.pm:360
msgid "Error while detecting available upgrades"
-msgstr ""
+msgstr "Terjadi kesalahan dalam proses pengecekan pemutakhiran yang tersedia"
#: ../lib/Tails/IUK/Frontend.pm:370
#, perl-brace-format
@@ -139,7 +139,7 @@ msgstr "Versi baru telah tersedia"
#: ../lib/Tails/IUK/Frontend.pm:468
msgid "Downloading upgrade"
-msgstr ""
+msgstr "Mengunduh pemutakhiran"
#: ../lib/Tails/IUK/Frontend.pm:471
#, perl-brace-format
@@ -156,7 +156,7 @@ msgstr ""
#: ../lib/Tails/IUK/Frontend.pm:528 ../lib/Tails/IUK/Frontend.pm:547
msgid "Error while downloading the upgrade"
-msgstr ""
+msgstr "Terjadi kesalahan dalam proses pengunduhan pemutakhiran"
#: ../lib/Tails/IUK/Frontend.pm:540
#, perl-brace-format
@@ -167,7 +167,7 @@ msgstr ""
#: ../lib/Tails/IUK/Frontend.pm:559
msgid "Error while creating temporary downloading directory"
-msgstr ""
+msgstr "Terjadi kesalahan dalam proses pembuatan direktori pengunduhan sementara"
#: ../lib/Tails/IUK/Frontend.pm:562
msgid "Failed to create temporary download directory"
@@ -189,11 +189,11 @@ msgstr "Memulai kembali Tails"
#: ../lib/Tails/IUK/Frontend.pm:580
msgid "Restart now"
-msgstr ""
+msgstr "Memulai kembali sekarang"
#: ../lib/Tails/IUK/Frontend.pm:581
msgid "Restart later"
-msgstr ""
+msgstr "Memulai kembali nanti"
#: ../lib/Tails/IUK/Frontend.pm:592
msgid "Error while restarting the system"
1
0

18 Jun '14
commit b84970bcf28a4751595c40285de15519153d2a78
Author: Translation commit bot <translation(a)torproject.org>
Date: Wed Jun 18 06:45:45 2014 +0000
Update translations for tails-iuk
---
id.po | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/id.po b/id.po
index c7b4862..7b0e99e 100644
--- a/id.po
+++ b/id.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: Tails developers <tails(a)boum.org>\n"
"POT-Creation-Date: 2014-05-28 22:50+0200\n"
-"PO-Revision-Date: 2014-06-18 06:13+0000\n"
+"PO-Revision-Date: 2014-06-18 06:30+0000\n"
"Last-Translator: yogipriyo <yogipriyo.prayogo(a)gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/torproject/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -171,7 +171,7 @@ msgstr ""
#: ../lib/Tails/IUK/Frontend.pm:562
msgid "Failed to create temporary download directory"
-msgstr ""
+msgstr "Terjadi kegagalan dalam pembuatan direktori pengunduhan sementara"
#: ../lib/Tails/IUK/Frontend.pm:574
msgid ""
1
0

18 Jun '14
commit 0d84eba97e940348d345a26889015b94d25b6334
Author: Translation commit bot <translation(a)torproject.org>
Date: Wed Jun 18 06:15:44 2014 +0000
Update translations for tails-iuk
---
id.po | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/id.po b/id.po
index d7a712d..c7b4862 100644
--- a/id.po
+++ b/id.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# yogipriyo <yogipriyo.prayogo(a)gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: The Tor Project\n"
"Report-Msgid-Bugs-To: Tails developers <tails(a)boum.org>\n"
-"POT-Creation-Date: 2014-03-05 15:11+0100\n"
-"PO-Revision-Date: 2014-03-06 08:17+0000\n"
-"Last-Translator: runasand <runa.sandvik(a)gmail.com>\n"
+"POT-Creation-Date: 2014-05-28 22:50+0200\n"
+"PO-Revision-Date: 2014-06-18 06:13+0000\n"
+"Last-Translator: yogipriyo <yogipriyo.prayogo(a)gmail.com>\n"
"Language-Team: Indonesian (http://www.transifex.com/projects/p/torproject/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -134,7 +135,7 @@ msgstr ""
#: ../lib/Tails/IUK/Frontend.pm:411
msgid "New version available"
-msgstr ""
+msgstr "Versi baru telah tersedia"
#: ../lib/Tails/IUK/Frontend.pm:468
msgid "Downloading upgrade"
@@ -184,7 +185,7 @@ msgstr ""
#: ../lib/Tails/IUK/Frontend.pm:579
msgid "Restart Tails"
-msgstr ""
+msgstr "Memulai kembali Tails"
#: ../lib/Tails/IUK/Frontend.pm:580
msgid "Restart now"
1
0

18 Jun '14
Author: phobos
Date: 2014-06-18 04:07:39 +0000 (Wed, 18 Jun 2014)
New Revision: 26840
Modified:
website/trunk/include/mirrors-table.wmi
website/trunk/include/tor-mirrors.csv
Log:
update mirror status.
Modified: website/trunk/include/mirrors-table.wmi
===================================================================
--- website/trunk/include/mirrors-table.wmi 2014-06-17 07:47:13 UTC (rev 26839)
+++ website/trunk/include/mirrors-table.wmi 2014-06-18 04:07:39 UTC (rev 26840)
@@ -1,6 +1,23 @@
<tr>
+ <td>DK</td>
+
+ <td>Zentrum der Gesundheit</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://tor.idnr.ws/dist/">http</a></td>
+ <td><a href="http://tor.idnr.ws/">http</a></td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>NO</td>
<td>MultiNet AS</td>
@@ -120,6 +137,23 @@
<tr>
+ <td>RO</td>
+
+ <td>me0w.cc</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://tor.me0w.cc/dist/">http</a></td>
+ <td><a href="http://tor.me0w.cc/">http</a></td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>DE</td>
<td>borgmann.tv</td>
@@ -256,6 +290,40 @@
<tr>
+ <td>LT</td>
+
+ <td>Tor Supporter</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://tor.vesta.nu/dist/">http</a></td>
+ <td><a href="http://tor.vesta.nu/">http</a></td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
+ <td>MX</td>
+
+ <td>Tor Supporter</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://fbnaia.homelinux.net/torproject/dist/">http</a></td>
+ <td><a href="http://fbnaia.homelinux.net/torproject/">http</a></td>
+ <td><a href="https://fbnaia.homelinux.net/torproject/dist/">https</a></td>
+ <td><a href="https://fbnaia.homelinux.net/torproject/">https</a></td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>US</td>
<td>AskApache</td>
@@ -290,6 +358,23 @@
<tr>
+ <td>IN</td>
+
+ <td>India Tor Fans</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://www.torproject.org.in/dist/">http</a></td>
+ <td><a href="http://www.torproject.org.in/">http</a></td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>FR</td>
<td>Tor Supporter</td>
@@ -460,6 +545,23 @@
<tr>
+ <td>RU</td>
+
+ <td>Soviet Anonymous</td>
+
+ <td>Up to date</td>
+
+ <td><a href="ftp://creep.im/mirrors/tor">ftp</a></td>
+ <td><a href="http://creep.im/tor/dist/">http</a></td>
+ <td><a href="http://creep.im/tor">http</a></td>
+ <td><a href="https://creep.im/tor/dist/">https</a></td>
+ <td><a href="https://creep.im/tor">https</a></td>
+ <td><a href="rsync://creep.im/tor-dist">rsync</a></td>
+ <td><a href="rsync://creep.im/tor">rsync</a></td>
+</tr>
+
+<tr>
+
<td>DE</td>
<td>torservers</td>
@@ -562,6 +664,23 @@
<tr>
+ <td>US</td>
+
+ <td>EPRCI</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://tor.eprci.net/dist/">http</a></td>
+ <td><a href="http://tor.eprci.net/">http</a></td>
+ <td><a href="https://www.eprci.com/tor/dist/">https</a></td>
+ <td><a href="https://www.eprci.com/tor/">https</a></td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>CA</td>
<td>tor(a)les.net</td>
@@ -783,6 +902,23 @@
<tr>
+ <td>US</td>
+
+ <td>Evil Routers</td>
+
+ <td>Up to date</td>
+
+ <td> - </td>
+ <td><a href="http://tor1.evilrouters.net/dist/">http</a></td>
+ <td><a href="http://tor1.evilrouters.net/">http</a></td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+ <td> - </td>
+</tr>
+
+<tr>
+
<td>DE</td>
<td>Tor Supporter</td>
@@ -817,34 +953,34 @@
<tr>
- <td>PL</td>
+ <td>FR</td>
- <td>Sebastian M. Bobrecki</td>
+ <td>Tor Supporter</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.iv.net.pl/dist/">http</a></td>
- <td><a href="http://tor.iv.net.pl">http</a></td>
- <td><a href="https://tor.iv.net.pl/dist/">https</a></td>
- <td><a href="https://tor.iv.net.pl">https</a></td>
+ <td><a href="http://tor.fr33tux.org/dist/">http</a></td>
+ <td><a href="http://tor.fr33tux.org">http</a></td>
+ <td><a href="https://tor.fr33tux.org/dist/">https</a></td>
+ <td><a href="https://tor.fr33tux.org">https</a></td>
<td> - </td>
<td> - </td>
</tr>
<tr>
- <td>US</td>
+ <td>PL</td>
- <td>The Calyx Institute</td>
+ <td>Sebastian M. Bobrecki</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://tor.calyxinstitute.org/dist/">http</a></td>
- <td><a href="http://tor.calyxinstitute.org">http</a></td>
- <td><a href="https://tor.calyxinstitute.org/dist/">https</a></td>
- <td><a href="https://tor.calyxinstitute.org">https</a></td>
+ <td><a href="http://tor.iv.net.pl/dist/">http</a></td>
+ <td><a href="http://tor.iv.net.pl">http</a></td>
+ <td><a href="https://tor.iv.net.pl/dist/">https</a></td>
+ <td><a href="https://tor.iv.net.pl">https</a></td>
<td> - </td>
<td> - </td>
</tr>
@@ -885,57 +1021,6 @@
<tr>
- <td>RO</td>
-
- <td>me0w.cc</td>
-
- <td>Up to date</td>
-
- <td> - </td>
- <td><a href="http://tor.me0w.cc/dist/">http</a></td>
- <td><a href="http://tor.me0w.cc/">http</a></td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
-</tr>
-
-<tr>
-
- <td>RU</td>
-
- <td>Soviet Anonymous</td>
-
- <td>Up to date</td>
-
- <td><a href="ftp://creep.im/mirrors/tor">ftp</a></td>
- <td><a href="http://creep.im/tor/dist/">http</a></td>
- <td><a href="http://creep.im/tor">http</a></td>
- <td><a href="https://creep.im/tor/dist/">https</a></td>
- <td><a href="https://creep.im/tor">https</a></td>
- <td><a href="rsync://creep.im/tor-dist">rsync</a></td>
- <td><a href="rsync://creep.im/tor">rsync</a></td>
-</tr>
-
-<tr>
-
- <td>DK</td>
-
- <td>Zentrum der Gesundheit</td>
-
- <td>Up to date</td>
-
- <td> - </td>
- <td><a href="http://tor.idnr.ws/dist/">http</a></td>
- <td><a href="http://tor.idnr.ws/">http</a></td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
-</tr>
-
-<tr>
-
<td></td>
<td>Freedom of the Press Foundation</td>
@@ -953,34 +1038,17 @@
<tr>
- <td>IN</td>
+ <td>DE</td>
- <td>India Tor Fans</td>
+ <td>moparisthebest.com</td>
<td>Up to date</td>
<td> - </td>
- <td><a href="http://www.torproject.org.in/dist/">http</a></td>
- <td><a href="http://www.torproject.org.in/">http</a></td>
+ <td><a href="http://www.moparisthebest.com/tor/dist/">http</a></td>
+ <td><a href="http://www.moparisthebest.com/tor/">http</a></td>
+ <td><a href="https://www.moparisthebest.com/tor/dist/">https</a></td>
+ <td><a href="https://www.moparisthebest.com/tor/">https</a></td>
<td> - </td>
<td> - </td>
- <td> - </td>
- <td> - </td>
</tr>
-
-<tr>
-
- <td>LT</td>
-
- <td>Tor Supporter</td>
-
- <td>Up to date</td>
-
- <td> - </td>
- <td><a href="http://tor.vesta.nu/dist/">http</a></td>
- <td><a href="http://tor.vesta.nu/">http</a></td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
- <td> - </td>
-</tr>
Modified: website/trunk/include/tor-mirrors.csv
===================================================================
--- website/trunk/include/tor-mirrors.csv 2014-06-17 07:47:13 UTC (rev 26839)
+++ website/trunk/include/tor-mirrors.csv 2014-06-18 04:07:39 UTC (rev 26840)
@@ -1,97 +1,97 @@
adminContact, orgName, isoCC, subRegion, region, ipv4, ipv6, loadBalanced, httpWebsiteMirror, httpsWebsiteMirror, rsyncWebsiteMirror, ftpWebsiteMirror, httpDistMirror, httpsDistMirror, rsyncDistMirror, hiddenServiceMirror, updateDate
Tor Fan, Tor Supporter, US, United States, US, TRUE, TRUE, No, http://tor.loritsu.com/, , , , http://tor.loritsu.com/dist/, , , ,
-info AT zentrum-der-gesundheit DOT de, Zentrum der Gesundheit, DK, Denmark, Europe, TRUE, FALSE, No, http://tor.idnr.ws/, , , , http://tor.idnr.ws/dist/, , , , Thu Jun 5 14:22:46 2014
-http://www.multinet.no, MultiNet AS, NO, Trondheim, Trondheim, TRUE, TRUE, No, http://tor.multinet.no/, , , , http://tor.multinet.no/dist/, , , , Thu Jun 5 20:11:09 2014
-haskell at gmx.es, Tor Supporter, ES, Spain, Europe, TRUE, FALSE, No, http://tor.zilog.es/, , , , http://tor.zilog.es/dist/, , , , Thu Jun 5 20:11:09 2014
-webmaster AT bbln DOT nl, BBLN, NL, The Netherlands, Europe, TRUE, TRUE, No, http://mirror.ml/tor/, https://mirror.ml/tor/, , , http://mirror.ml/tor/dist/, https://mirror.ml/tor/dist/, , , Thu Jun 5 20:11:09 2014
-Tor Fan, Tor Supporter, US, United States, US, TRUE, FALSE, No, http://199.175.55.215/, , , , http://199.175.55.215/dist/, , , , Thu Jun 5 20:11:09 2014
-margus.random at mail.ee, CyberSIDE, EE, Estonia, EE, TRUE, FALSE, No, http://cyberside.planet.ee/tor/, , , , http://cyberside.net.ee/tor/, , , , Thu Jun 5 20:11:09 2014
-Tor Fan, torproject.is, IS, Iceland, IS, TRUE, FALSE, No, http://torproject.is/, , , , http://torproject.is/dist/, , , , Thu Jun 5 20:11:09 2014
-Tor Fan, spline, DE, Germany, DE, TRUE, FALSE, No, http://tor.spline.de/, https://tor.spline.inf.fu-berlin.de/, rsync://ftp.spline.de/tor, ftp://ftp.spline.de/pub/tor, http://tor.spline.de/dist/, https://tor.spline.inf.fu-berlin.de/dist/, rsync://ftp.spline.de/tor/dist, , Thu Jun 5 20:11:09 2014
-Tor Fan, me0w.cc, RO, Romania, RO, TRUE, FALSE, No, http://tor.me0w.cc/, , , , http://tor.me0w.cc/dist/, , , , Thu Jun 5 19:51:16 2014
-Tor Fan, borgmann.tv, DE, Germany, DE, TRUE, FALSE, No, http://tor.borgmann.tv/, , , , http://tor.borgmann.tv/dist/, , , , Thu Jun 5 20:11:09 2014
+info AT zentrum-der-gesundheit DOT de, Zentrum der Gesundheit, DK, Denmark, Europe, TRUE, FALSE, No, http://tor.idnr.ws/, , , , http://tor.idnr.ws/dist/, , , , Sun Jun 15 04:19:57 2014
+http://www.multinet.no, MultiNet AS, NO, Trondheim, Trondheim, TRUE, TRUE, No, http://tor.multinet.no/, , , , http://tor.multinet.no/dist/, , , , Sun Jun 15 04:19:57 2014
+haskell at gmx.es, Tor Supporter, ES, Spain, Europe, TRUE, FALSE, No, http://tor.zilog.es/, , , , http://tor.zilog.es/dist/, , , , Sun Jun 15 04:19:57 2014
+webmaster AT bbln DOT nl, BBLN, NL, The Netherlands, Europe, TRUE, TRUE, No, http://mirror.ml/tor/, https://mirror.ml/tor/, , , http://mirror.ml/tor/dist/, https://mirror.ml/tor/dist/, , , Sun Jun 15 04:19:57 2014
+Tor Fan, Tor Supporter, US, United States, US, TRUE, FALSE, No, http://199.175.55.215/, , , , http://199.175.55.215/dist/, , , , Sun Jun 15 04:19:57 2014
+margus.random at mail.ee, CyberSIDE, EE, Estonia, EE, TRUE, FALSE, No, http://cyberside.planet.ee/tor/, , , , http://cyberside.net.ee/tor/, , , , Sun Jun 15 04:19:57 2014
+Tor Fan, torproject.is, IS, Iceland, IS, TRUE, FALSE, No, http://torproject.is/, , , , http://torproject.is/dist/, , , , Sun Jun 15 04:19:57 2014
+Tor Fan, spline, DE, Germany, DE, TRUE, FALSE, No, http://tor.spline.de/, https://tor.spline.inf.fu-berlin.de/, rsync://ftp.spline.de/tor, ftp://ftp.spline.de/pub/tor, http://tor.spline.de/dist/, https://tor.spline.inf.fu-berlin.de/dist/, rsync://ftp.spline.de/tor/dist, , Sun Jun 15 04:19:57 2014
+Tor Fan, me0w.cc, RO, Romania, RO, TRUE, FALSE, No, http://tor.me0w.cc/, , , , http://tor.me0w.cc/dist/, , , , Sun Jun 15 04:19:57 2014
+Tor Fan, borgmann.tv, DE, Germany, DE, TRUE, FALSE, No, http://tor.borgmann.tv/, , , , http://tor.borgmann.tv/dist/, , , , Sun Jun 15 04:19:57 2014
security AT hostoffice DOT hu, Unknown, HU, Hungary, Europe, TRUE, FALSE, No, http://mirror.tor.hu/, , , , http://mirror.tor.hu/dist/, , , , Wed Apr 16 16:29:40 2014
Tor Fan, Tor Supporter, TN, Tunisia, TN, TRUE, FALSE, No, http://torproject.antagonism.org/, https://torproject.antagonism.org/, , , , , , , Sun Mar 2 06:08:00 2014
-webmaster AT ccc DOT de, CCC, NL, The Netherlands, Europe, TRUE, FALSE, No, http://tor.ccc.de/, , , , http://tor.ccc.de/dist/, , , , Thu Jun 5 20:11:09 2014
+webmaster AT ccc DOT de, CCC, NL, The Netherlands, Europe, TRUE, FALSE, No, http://tor.ccc.de/, , , , http://tor.ccc.de/dist/, , , , Sun Jun 15 04:19:57 2014
Tor Fan, searchprivate, US, TX, US, TRUE, FALSE, No, http://tor.searchprivate.com/, , , , http://tor.searchprivate.com/dist/, , , , Sun Jul 29 23:49:26 2012
-Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, TRUE, No, http://tor.dont-know-me.at/, , , , http://tor.dont-know-me.at/dist/, , , , Thu Jun 5 20:11:09 2014
+Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, TRUE, No, http://tor.dont-know-me.at/, , , , http://tor.dont-know-me.at/dist/, , , , Sun Jun 15 04:19:57 2014
Tor Fan, Tor Supporter, LU, Luxemborg, LU, TRUE, FALSE, No, http://torproject.adamas.ai/, , , , http://torproject.adamas.ai/dist/, , , ,
-mirror ntzk de, Netzkonstrukt Berlin, DE, Germany, Europe, TRUE, FALSE, No, http://mirror.ntzk.de/torproject.org/, , , , http://mirror.ntzk.de/torproject.org/dist/, , , , Thu Jun 5 14:22:46 2014
+mirror ntzk de, Netzkonstrukt Berlin, DE, Germany, Europe, TRUE, FALSE, No, http://mirror.ntzk.de/torproject.org/, , , , http://mirror.ntzk.de/torproject.org/dist/, , , , Sun Jun 15 04:19:57 2014
coralcdn.org, CoralCDN, INT, International, INT, TRUE, FALSE, Yes, http://www.torproject.org.nyud.net/, , , , http://www.torproject.org.nyud.net/dist/, , , , Fri May 30 11:31:25 2014
-Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, FALSE, No, http://torproject.ph3x.at/, , , , http://torproject.ph3x.at/dist/, , , , Thu Jun 5 20:11:09 2014
-info /AT enn /DOT lu, Frenn vun der Enn A.S.B.L., IS, Iceland, Europe, TRUE, FALSE, No, http://torproject.lu/, , , , http://torproject.lu/dist/, , , http://btn6gqzqevlhoryd.onion, Thu Jun 5 20:11:09 2014
-neutrino8 AT gmail DOT com, teambelgium, BE, Belgium, Europe, TRUE, FALSE, No, http://tor.teambelgium.net:8080/, , , ftp://tor.teambelgium.net:2121/torproject/, http://tor.teambelgium.net:8080/dist/, , , , Thu Jun 5 20:11:09 2014
+Tor Fan, Tor Supporter, AT, Austria, AT, TRUE, FALSE, No, http://torproject.ph3x.at/, , , , http://torproject.ph3x.at/dist/, , , , Sun Jun 15 04:19:57 2014
+info /AT enn /DOT lu, Frenn vun der Enn A.S.B.L., IS, Iceland, Europe, TRUE, FALSE, No, http://torproject.lu/, , , , http://torproject.lu/dist/, , , http://btn6gqzqevlhoryd.onion, Sun Jun 15 04:19:57 2014
+neutrino8 AT gmail DOT com, teambelgium, BE, Belgium, Europe, TRUE, FALSE, No, http://tor.teambelgium.net:8080/, , , ftp://tor.teambelgium.net:2121/torproject/, http://tor.teambelgium.net:8080/dist/, , , , Sun Jun 15 04:19:57 2014
tormaster AT xpdm DOT us, Xpdm, US, United States, North America, TRUE, FALSE, No, http://torproj.xpdm.us/, https://torproj.xpdm.us/, , , http://torproj.xpdm.us/dist/, https://torproj.xpdm.us/dist/, , http://h3prhz46uktgm4tt.onion/, Tue Feb 11 08:42:17 2014
Tor Fan, Tor Supporter, UA, Ukraine, UA, TRUE, FALSE, No, http://torua.reactor-xg.kiev.ua/, , , , http://torua.reactor-xg.kiev.ua/dist/, , , ,
- mail AT benjamin-meier DOT info, beme it, DE, Germany, DE, TRUE, FALSE, No, http://tor.beme-it.de/, https://tor.beme-it.de/, rsync://tor.beme-it.de/tor, , http://tor.beme-it.de/dist/, https://tor.beme-it.de/dist/, rsync://tor.beme-it.de/tor/dist, , Thu Jun 5 20:11:09 2014
-wollomatic at posteo.eu, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, No, http://tormirror.almnet.de/, https://tormirror.almnet.de/, , , http://tormirror.almnet.de/dist/, https://tormirror.almnet.de/dist/, , , Thu Jun 5 20:11:09 2014
-Tor Fan, Tor Supporter, LT, Lithuania, LT, TRUE, FALSE, No, http://tor.vesta.nu/, , , , http://tor.vesta.nu/dist/, , , , Thu Jun 5 02:28:45 2014
-Tor Fan, Tor Supporter, MX, Mexico, MX, TRUE, FALSE, No, http://fbnaia.homelinux.net/torproject/, https://fbnaia.homelinux.net/torproject/, , , http://fbnaia.homelinux.net/torproject/dist/, https://fbnaia.homelinux.net/torproject/dist/, , , Sun May 4 15:16:01 2014
+ mail AT benjamin-meier DOT info, beme it, DE, Germany, DE, TRUE, FALSE, No, http://tor.beme-it.de/, https://tor.beme-it.de/, rsync://tor.beme-it.de/tor, , http://tor.beme-it.de/dist/, https://tor.beme-it.de/dist/, rsync://tor.beme-it.de/tor/dist, , Sun Jun 15 04:19:57 2014
+wollomatic at posteo.eu, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, No, http://tormirror.almnet.de/, https://tormirror.almnet.de/, , , http://tormirror.almnet.de/dist/, https://tormirror.almnet.de/dist/, , , Sun Jun 15 04:19:57 2014
+Tor Fan, Tor Supporter, LT, Lithuania, LT, TRUE, FALSE, No, http://tor.vesta.nu/, , , , http://tor.vesta.nu/dist/, , , , Sun Jun 15 04:19:57 2014
+Tor Fan, Tor Supporter, MX, Mexico, MX, TRUE, FALSE, No, http://fbnaia.homelinux.net/torproject/, https://fbnaia.homelinux.net/torproject/, , , http://fbnaia.homelinux.net/torproject/dist/, https://fbnaia.homelinux.net/torproject/dist/, , , Sun Jun 15 04:19:57 2014
Tor Fan, Tor Supporter, FR, France, FR, TRUE, FALSE, No, http://37.187.0.127/tormirror/, , , , http://37.187.0.127/tormirror/dist/, , , ,
Tor Fan, Tor Supporter, US, United States, US, TRUE, FALSE, No, http://tor.minibofh.org/, , , , http://tor.minibofh.org/dist/, , , ,
Tor Fan, Tor Supporter, UK, United Kingdom, UK, TRUE, FALSE, No, http://tor.mage.me.uk/, , , , http://tor.mage.me.uk/dist/, , , ,
-webmaster AT askapache DOT com, AskApache, US, California, US, TRUE, FALSE, No, http://tor.askapache.com/, , , , http://tor.askapache.com/dist/, , , , Thu Jun 5 20:11:09 2014
+webmaster AT askapache DOT com, AskApache, US, California, US, TRUE, FALSE, No, http://tor.askapache.com/, , , , http://tor.askapache.com/dist/, , , , Sun Jun 15 04:19:57 2014
nsane2307 eml cc, tor-mirror.de, DE, Germany, Europe, TRUE, FALSE, No, http://tor-mirror.de/, https://tor-mirror.de/, , , http://tor-mirror.de/dist/, https://tor-mirror.de/dist/, , ,
-Tor Fan, hessmo, US, United States, US, TRUE, FALSE, No, http://mirror.hessmo.com/tor/, , , , http://mirror.hessmo.com/tor/dist/, , , , Thu Jun 5 20:11:09 2014
+Tor Fan, hessmo, US, United States, US, TRUE, FALSE, No, http://mirror.hessmo.com/tor/, , , , http://mirror.hessmo.com/tor/dist/, , , , Sun Jun 15 04:19:57 2014
Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, No, http://tor.dev-random.de/, https://tor.dev-random.de/, , , http://tor.dev-random.de/dist/, https://tor.dev-random.de/dist/, , , Sun Mar 2 06:08:00 2014
-Tor Fan, India Tor Fans, IN, India, IN, TRUE, FALSE, No, http://www.torproject.org.in/, , , , http://www.torproject.org.in/dist/, , , , Thu Jun 5 04:45:24 2014
+Tor Fan, India Tor Fans, IN, India, IN, TRUE, FALSE, No, http://www.torproject.org.in/, , , , http://www.torproject.org.in/dist/, , , , Sun Jun 15 04:19:57 2014
mirror-admin(a)linsrv.net, linsrv, FR, France, Europe, TRUE, FALSE, No, http://mirrors.linsrv.net/torproject/, , mirrors.linsrv.net::pub/torproject, ftp://ftp.linsrv.net/pub/torproject/, http://mirrors.linsrv.net/torproject/dist/, , mirrors.linsrv.net::pub/torproject/dist, , Sat Apr 26 16:04:13 2014
-Tor Fan, Tor Supporter, FR, France, FR, TRUE, FALSE, No, http://tor.mirror.chekanov.net/, , , , http://tor.mirror.chekanov.net/dist/, , , , Thu Jun 5 20:11:09 2014
-http://sebastian.pfeifer.or.at/, TechAsk.IT, AT, Favoriten, Wien, TRUE, TRUE, No, http://www.unicorncloud.org/public/torproject.org/, https://www.unicorncloud.org/public/torproject.org/, , , http://www.unicorncloud.org/public/torproject.org/dist, https://www.unicorncloud.org/public/torproject.org/dist, , , Thu Jun 5 20:11:09 2014
+Tor Fan, Tor Supporter, FR, France, FR, TRUE, FALSE, No, http://tor.mirror.chekanov.net/, , , , http://tor.mirror.chekanov.net/dist/, , , , Sun Jun 15 04:19:57 2014
+http://sebastian.pfeifer.or.at/, TechAsk.IT, AT, Favoriten, Wien, TRUE, TRUE, No, http://www.unicorncloud.org/public/torproject.org/, https://www.unicorncloud.org/public/torproject.org/, , , http://www.unicorncloud.org/public/torproject.org/dist, https://www.unicorncloud.org/public/torproject.org/dist, , , Sun Jun 15 04:19:57 2014
root AT amorphis DOT eu, Amorphis, NL, The Netherlands, Europe, TRUE, FALSE, No, http://tor.amorphis.eu/, , , , http://tor.amorphis.eu/dist/, , , , Thu Feb 6 17:28:24 2014
-hackthissite.org, HackThisSite.org, US, United States, US, TRUE, TRUE, No, http://tor.hackthissite.org/, https://tor.hackthissite.org/, , , http://mirror.hackthissite.org/tor, https://mirror.hackthissite.org/tor, , , Thu Jun 5 20:11:09 2014
+hackthissite.org, HackThisSite.org, US, United States, US, TRUE, TRUE, No, http://tor.hackthissite.org/, https://tor.hackthissite.org/, , , http://mirror.hackthissite.org/tor, https://mirror.hackthissite.org/tor, , , Sun Jun 15 04:19:57 2014
citizen428 AT gmail DOT com, [[:bbs:]], DE, Germany, Europe, TRUE, FALSE, No, http://tor.blingblingsquad.net/, https://tor.blingblingsquad.net/, , , http://tor.blingblingsquad.net/dist/, https://tor.blingblingsquad.net/dist/, , ,
-Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, No, http://tor.linuxlounge.net/, https://tor.linuxlounge.net/, , , http://tor.linuxlounge.net/dist/, https://tor.linuxlounge.net/dist/, , , Thu Jun 5 20:11:09 2014
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, No, http://tor.linuxlounge.net/, https://tor.linuxlounge.net/, , , http://tor.linuxlounge.net/dist/, https://tor.linuxlounge.net/dist/, , , Sun Jun 15 04:19:57 2014
Tor Fan, Tor Supporter, US, United States, US, TRUE, FALSE, No, , , , , http://www.netgull.com/torproject/, , , ,
-paul at coffswifi.net, CoffsWiFi, AU, Australia and New Zealand, APNIC, TRUE, FALSE, No, http://torproject.coffswifi.net, , , , http://torproject.coffswifi.net/dist, , , , Thu Jun 5 20:11:09 2014
-Tor Fan, cyberarmy, AT, Austria, AT, TRUE, FALSE, No, http://tor.cyberarmy.at/, , , , , , , , Thu Jun 5 20:11:09 2014
-Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, No, http://torproject.cryptowars.info/, https://torproject.cryptowars.info/, rsync://torproject.cryptowars.info/, , http://torproject.cryptowars.info/dist/, https://torproject.cryptowars.info/dist/, , , Thu Jun 5 20:11:09 2014
-hostmaster AT zombiewerks DOT com, TheOnionRouter, IS, Iceland, Iceland, TRUE, FALSE, No, http://theonionrouter.com/, , , , http://theonionrouter.com/dist/, , , , Thu Jun 5 20:11:09 2014
-Tor Fan, crazyhaze.de, DE, Germany, DE, TRUE, FALSE, No, http://tor.crazyhaze.de/, https://tor.crazyhaze.de/, , , http://tor.crazyhaze.de/dist/, https://tor.crazyhaze.de/dist/, , , Thu Jun 5 20:11:09 2014
-Tor Fan, chaos darmstadt, DE, Germany, Europe, TRUE, FALSE, No, http://mirrors.chaos-darmstadt.de/tor-mirror/, , , , http://mirrors.chaos-darmstadt.de/tor-mirror/dist/, , , , Thu Jun 5 20:11:09 2014
-Tor Fan, Soviet Anonymous, RU, Russia, RU, TRUE, FALSE, No, http://creep.im/tor, https://creep.im/tor, rsync://creep.im/tor, ftp://creep.im/mirrors/tor, http://creep.im/tor/dist/, https://creep.im/tor/dist/, rsync://creep.im/tor-dist, , Thu Jun 5 19:51:16 2014
+paul at coffswifi.net, CoffsWiFi, AU, Australia and New Zealand, APNIC, TRUE, FALSE, No, http://torproject.coffswifi.net, , , , http://torproject.coffswifi.net/dist, , , , Sun Jun 15 04:19:57 2014
+Tor Fan, cyberarmy, AT, Austria, AT, TRUE, FALSE, No, http://tor.cyberarmy.at/, , , , , , , , Sun Jun 15 04:19:57 2014
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, No, http://torproject.cryptowars.info/, https://torproject.cryptowars.info/, rsync://torproject.cryptowars.info/, , http://torproject.cryptowars.info/dist/, https://torproject.cryptowars.info/dist/, , , Sun Jun 15 04:19:57 2014
+hostmaster AT zombiewerks DOT com, TheOnionRouter, IS, Iceland, Iceland, TRUE, FALSE, No, http://theonionrouter.com/, , , , http://theonionrouter.com/dist/, , , , Sun Jun 15 04:19:57 2014
+Tor Fan, crazyhaze.de, DE, Germany, DE, TRUE, FALSE, No, http://tor.crazyhaze.de/, https://tor.crazyhaze.de/, , , http://tor.crazyhaze.de/dist/, https://tor.crazyhaze.de/dist/, , , Sun Jun 15 04:19:57 2014
+Tor Fan, chaos darmstadt, DE, Germany, Europe, TRUE, FALSE, No, http://mirrors.chaos-darmstadt.de/tor-mirror/, , , , http://mirrors.chaos-darmstadt.de/tor-mirror/dist/, , , , Sun Jun 15 04:19:57 2014
+Tor Fan, Soviet Anonymous, RU, Russia, RU, TRUE, FALSE, No, http://creep.im/tor, https://creep.im/tor, rsync://creep.im/tor, ftp://creep.im/mirrors/tor, http://creep.im/tor/dist/, https://creep.im/tor/dist/, rsync://creep.im/tor-dist, , Sun Jun 15 04:19:57 2014
Tor Fan, Tor Supporter, US, United States, US, TRUE, FALSE, No, , , , ftp://mirrors.go-parts.com/tor/, http://mirrors.go-parts.com/tor/dist/, , rsync://mirrors.go-parts.com/mirrors/tor/, , Wed Jan 8 16:41:17 2014
Tor Fan, NW Linux, US, WA, US, TRUE, FALSE, No, http://torproject.nwlinux.us/, , rsync://nwlinux.us/tor-web, , http://torproject.nwlinux.us/dist/, , rsync://nwlinux.us/tor-dist, ,
-Tor Fan, torservers, DE, Germany, DE, TRUE, FALSE, No, http://www.torservers.net/mirrors/torproject.org/, https://www.torservers.net/mirrors/torproject.org/, , , http://www.torservers.net/mirrors/torproject.org/dist/, https://www.torservers.net/mirrors/torproject.org/dist/, , http://hbpvnydyyjbmhx6b.onion/mirrors/torproject.org/, Thu Jun 5 20:11:09 2014
+Tor Fan, torservers, DE, Germany, DE, TRUE, FALSE, No, http://www.torservers.net/mirrors/torproject.org/, https://www.torservers.net/mirrors/torproject.org/, , , http://www.torservers.net/mirrors/torproject.org/dist/, https://www.torservers.net/mirrors/torproject.org/dist/, , http://hbpvnydyyjbmhx6b.onion/mirrors/torproject.org/, Sun Jun 15 04:19:57 2014
Tor Fan, Tor Supporter, NL, The Netherlands, NL, TRUE, FALSE, No, , , , , , https://www.coevoet.nl/tor/dist/, , ,
-Tor Fan, torland, GB, United Kingdom, GB, TRUE, FALSE, No, http://mirror.torland.me/torproject.org/, https://mirror.torland.me/torproject.org/, , , http://mirror.torland.me/torproject.org/dist/, https://mirror.torland.me/torproject.org/dist/, , , Thu Jun 5 20:11:09 2014
+Tor Fan, torland, GB, United Kingdom, GB, TRUE, FALSE, No, http://mirror.torland.me/torproject.org/, https://mirror.torland.me/torproject.org/, , , http://mirror.torland.me/torproject.org/dist/, https://mirror.torland.me/torproject.org/dist/, , , Sun Jun 15 04:19:57 2014
Tor Fan, Tor Supporter, FR, France, FR, TRUE, FALSE, No, http://torproject.c3l.lu/, , , , http://torproject.c3l.lu/dist/, , , , Wed Dec 25 05:35:51 2013
-Tor Fan, Lightning-bolt.net, CZ, Czech Republic, CZ, TRUE, FALSE, No, http://torproject.lightning-bolt.net/, , , , http://torproject.lightning-bolt.net/dist/, , , , Thu Jun 5 20:11:09 2014
+Tor Fan, Lightning-bolt.net, CZ, Czech Republic, CZ, TRUE, FALSE, No, http://torproject.lightning-bolt.net/, , , , http://torproject.lightning-bolt.net/dist/, , , , Sun Jun 15 04:19:57 2014
Tor Fan, LazyTiger, FR, France, FR, TRUE, FALSE, No, http://tor.taiga-san.net/, , , , http://tor.taiga-san.net/dist/, , , ,
Tor Fan, Tor Supporter, EE, Estonia, EE, TRUE, FALSE, No, http://tor.li/, https://tor.li/, , , http://tor.li/dist/, https://tor.li/dist/, , ,
-Tor Fan, homosu, SE, Sweden, SE, TRUE, FALSE, No, http://tor.homosu.net/, , , , http://tor.homosu.net/dist/, , , , Thu Jun 5 20:11:09 2014
-IceBear, myRL.net, IS, Iceland, IS, TRUE, FALSE, No, http://tor.myrl.net/, https://tor.myrl.net/, , , http://tor.myrl.net/dist/, https://tor.myrl.net/dist/, , , Thu Jun 5 20:11:09 2014
+Tor Fan, homosu, SE, Sweden, SE, TRUE, FALSE, No, http://tor.homosu.net/, , , , http://tor.homosu.net/dist/, , , , Sun Jun 15 04:19:57 2014
+IceBear, myRL.net, IS, Iceland, IS, TRUE, FALSE, No, http://tor.myrl.net/, https://tor.myrl.net/, , , http://tor.myrl.net/dist/, https://tor.myrl.net/dist/, , , Sun Jun 15 04:19:57 2014
Tor Fan, DevRandom, NL, The Netherlands, NL, TRUE, FALSE, No, http://devrandom.co/tor-mirror, https://devrandom.co/tor-mirror, , , http://devrandom.co/tor-mirror/dist, https://devrandom.co/tor-mirror/dist, , , Sun Feb 2 05:50:15 2014
-kiro AT userzap DOT de, Userzap, DE, Germany, DE, TRUE, FALSE, No, http://torprojekt.userzap.de, https://torprojekt.userzap.de, , , http://torprojekt.userzap.de/dist/, https://torprojekt.userzap.de/dist/, , , Thu Jun 5 20:11:09 2014
-tor(a)eprci.net, EPRCI, US, United States, US, TRUE, FALSE, NO, http://tor.eprci.net/, https://www.eprci.com/tor/, , , http://tor.eprci.net/dist/, https://www.eprci.com/tor/dist/, , , Thu Jun 5 20:11:09 2014
-tor(a)les.net, tor(a)les.net, CA, Canada, CA, TRUE, FALSE, NO, http://tor.les.net/, , , , http://tor.les.net/dist, , , , Thu Jun 5 20:11:09 2014
-Tor Fan, PW, DE, Germany, DE, TRUE, TRUE, NO, http://tor.pw.is/, , , , http://tor.pw.is/dist/, , , , Thu Jun 5 20:11:09 2014
-tor(a)stalkr.net, stalkr.net, FR, France, FR, TRUE, TRUE, NO, http://tor.stalkr.net/, https://tor.stalkr.net/, , , http://tor.stalkr.net/dist/, https://tor.stalkr.net/dist/, , , Thu Jun 5 20:11:09 2014
-maki(a)maki-chan.de, Maki Hoshisawa, DE, Germany, DE, TRUE, FALSE, NO, http://tor.mirrors.maki-chan.de/, , , , http://tor.mirrors.maki-chan.de/dist/, , , , Thu Jun 5 20:11:09 2014
-doemela[AT]cyberguerrilla[DOT]org, cYbergueRrilLa AnonyMous NeXus, DE, Germany, DE, TRUE, FALSE, NO, https://tor-mirror.cyberguerrilla.org, , , , https://tor-mirror.cyberguerrilla.org/dist/, , , http://6dvj6v5imhny3anf.onion, Thu Jun 5 20:11:09 2014
-contact(a)gtor.org, Gtor, DE, Germany, DE, TRUE, TRUE, NO, http://torproject.gtor.org/, https://torproject.gtor.org/, rsync://torproject.gtor.org/website-mirror/, , http://torproject.gtor.org/dist/, https://torproject.gtor.org/dist/, rsync://torproject.gtor.org/website-mirror/dist/, , Thu Jun 5 20:11:09 2014
+kiro AT userzap DOT de, Userzap, DE, Germany, DE, TRUE, FALSE, No, http://torprojekt.userzap.de, https://torprojekt.userzap.de, , , http://torprojekt.userzap.de/dist/, https://torprojekt.userzap.de/dist/, , , Sun Jun 15 04:19:57 2014
+tor(a)eprci.net, EPRCI, US, United States, US, TRUE, FALSE, NO, http://tor.eprci.net/, https://www.eprci.com/tor/, , , http://tor.eprci.net/dist/, https://www.eprci.com/tor/dist/, , , Sun Jun 15 04:19:57 2014
+tor(a)les.net, tor(a)les.net, CA, Canada, CA, TRUE, FALSE, NO, http://tor.les.net/, , , , http://tor.les.net/dist, , , , Sun Jun 15 04:19:57 2014
+Tor Fan, PW, DE, Germany, DE, TRUE, TRUE, NO, http://tor.pw.is/, , , , http://tor.pw.is/dist/, , , , Sun Jun 15 04:19:57 2014
+tor(a)stalkr.net, stalkr.net, FR, France, FR, TRUE, TRUE, NO, http://tor.stalkr.net/, https://tor.stalkr.net/, , , http://tor.stalkr.net/dist/, https://tor.stalkr.net/dist/, , , Sun Jun 15 04:19:57 2014
+maki(a)maki-chan.de, Maki Hoshisawa, DE, Germany, DE, TRUE, FALSE, NO, http://tor.mirrors.maki-chan.de/, , , , http://tor.mirrors.maki-chan.de/dist/, , , , Sun Jun 15 04:19:57 2014
+doemela[AT]cyberguerrilla[DOT]org, cYbergueRrilLa AnonyMous NeXus, DE, Germany, DE, TRUE, FALSE, NO, https://tor-mirror.cyberguerrilla.org, , , , https://tor-mirror.cyberguerrilla.org/dist/, , , http://6dvj6v5imhny3anf.onion, Sun Jun 15 04:19:57 2014
+contact(a)gtor.org, Gtor, DE, Germany, DE, TRUE, TRUE, NO, http://torproject.gtor.org/, https://torproject.gtor.org/, rsync://torproject.gtor.org/website-mirror/, , http://torproject.gtor.org/dist/, https://torproject.gtor.org/dist/, rsync://torproject.gtor.org/website-mirror/dist/, , Sun Jun 15 04:19:57 2014
mirrors(a)dev-null.io, dev-null.io, NL, The Netherlands, NL, TRUE, FALSE, NO, http://tor.dev-null.io/, https://tor.dev-null.io/, , , http://tor.dev-null.io/dist/, https://tor.dev-null.io/dist/, , , Thu Jan 30 02:50:25 2014
Tor Fan, Quintex Alliance Consulting, US, United States, US, TRUE, FALSE, NO, http://tor.mirror.quintex.com, , rsync://tor.mirror.quintex.com::tor, ftp://mirror.quintex.com/tor/, http://tor.mirror.quintex.com/dist, , rsync://mirror.quintex.com::tordist, , Sat Feb 1 14:21:23 2014
-SDL, SDL, US, United States, US, TRUE, TRUE, NO, http://torproject.nexiom.net, https://torproject.nexiom.net, , , http://torproject.nexiom.net, https://torproject.nexiom.net/dist, , , Thu Jun 5 20:11:09 2014
-MacLemon, MacLemon, AT, Austria, AT, TRUE, FALSE, NO, http://tor-anonymizer.maclemon.at/, https://tor-anonymizer.maclemon.at/, , , http://tor-anonymizer.maclemon.at/dist/, https://tor-anonymizer.maclemon.at/dist/, , , Fri May 30 11:31:25 2014
+SDL, SDL, US, United States, US, TRUE, TRUE, NO, http://torproject.nexiom.net, https://torproject.nexiom.net, , , http://torproject.nexiom.net, https://torproject.nexiom.net/dist, , , Sun Jun 15 04:19:57 2014
+MacLemon, MacLemon, AT, Austria, AT, TRUE, FALSE, NO, http://tor-anonymizer.maclemon.at/, https://tor-anonymizer.maclemon.at/, , , http://tor-anonymizer.maclemon.at/dist/, https://tor-anonymizer.maclemon.at/dist/, , , Tue Jun 10 16:15:38 2014
Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, NO, http://tor.externenprüfung-nichtschüler.de/, , , , http://tor.externenprüfung-nichtschüler.de/dist/, , , ,
-Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://mirror.velcommuta.de/tor/, https://mirror.velcommuta.de/tor/, , , http://mirror.velcommuta.de/tor/dist/, https://mirror.velcommuta.de/tor/dist/, , , Thu Jun 5 20:11:09 2014
-Piratenpartei Bayern, Piratenpartei Bayern, DE, Germany, DE, TRUE, FALSE, NO, http://tormirror.piratenpartei-bayern.de, https://tormirror.piratenpartei-bayern.de, , , http://tormirror.piratenpartei-bayern.de/dist/, http://tormirror.piratenpartei-bayern.de/dist/, , , Thu Jun 5 20:11:09 2014
-Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://tor.hoi-polloi.org, http://tor.hossi-polloiorg, , , http://tor.hoi-polloi.org/dist/, http://tor.hosi-polloi.or/dist/g, , , Thu Jun 5 20:11:09 2014
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://mirror.velcommuta.de/tor/, https://mirror.velcommuta.de/tor/, , , http://mirror.velcommuta.de/tor/dist/, https://mirror.velcommuta.de/tor/dist/, , , Sun Jun 15 04:19:57 2014
+Piratenpartei Bayern, Piratenpartei Bayern, DE, Germany, DE, TRUE, FALSE, NO, http://tormirror.piratenpartei-bayern.de, https://tormirror.piratenpartei-bayern.de, , , http://tormirror.piratenpartei-bayern.de/dist/, http://tormirror.piratenpartei-bayern.de/dist/, , , Sun Jun 15 04:19:57 2014
+Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, TRUE, NO, http://tor.hoi-polloi.org, http://tor.hossi-polloiorg, , , http://tor.hoi-polloi.org/dist/, http://tor.hosi-polloi.or/dist/g, , , Sun Jun 15 04:19:57 2014
Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, NO, http://tor-mirror.snurn.de, , , , http://tor-mirror.snurn.de/dist/, , , , Thu Mar 27 13:13:23 2014
-EFF, EFF, US, United States, US, TRUE, FALSE, NO, https://tor.eff.org, https://tor.eff.org, , , https://tor.eff.org/dist/, https://tor.eff.org/dist/, , , Thu Jun 5 20:11:09 2014
-Tor Fan, Tor Supporter, GR, Greece, GR, TRUE, TRUE, NO, https://tor.void.gr, https://tor.void.gr, , , https://tor.void.gr/dist/, https://tor.void.gr/dist/, , , Thu Jun 5 20:11:09 2014
-Ich Eben, Tor Supporter, DE, Germany, DE, TRUE, TRUE, No, http://reichster.de/mirrors/torproject.org/, https://reichster.de/mirrors/torproject.org, , , http://reichster.de/mirrors/torproject.org/dist/, https://reichster.de/mirrors/torproject.org/dist/, , , Thu Jun 5 20:11:09 2014
-jlgaddis AT gnu DOT org, Evil Routers, US, United States, US, TRUE, FALSE, No, http://tor1.evilrouters.net/, , , , http://tor1.evilrouters.net/dist/, , , , Fri May 30 11:31:25 2014
-tor AT miglix DOT eu, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, NO, http://tor.miglix.eu, https://tor.miglix.eu, , , http://tor.miglix.eu/dist/, https://tor.miglix.eu/dist/, , , Thu Jun 5 20:11:09 2014
-tor TA ninurta TOD name, TorNinurtaName, AT, Austria, AT, TRUE, TRUE, no, http://tor.ninurta.name/, , , , http://tor.ninurta.name/dist/, , , , Thu Jun 5 20:11:09 2014
+EFF, EFF, US, United States, US, TRUE, FALSE, NO, https://tor.eff.org, https://tor.eff.org, , , https://tor.eff.org/dist/, https://tor.eff.org/dist/, , , Sun Jun 15 04:19:57 2014
+Tor Fan, Tor Supporter, GR, Greece, GR, TRUE, TRUE, NO, https://tor.void.gr, https://tor.void.gr, , , https://tor.void.gr/dist/, https://tor.void.gr/dist/, , , Sun Jun 15 04:19:57 2014
+Ich Eben, Tor Supporter, DE, Germany, DE, TRUE, TRUE, No, http://reichster.de/mirrors/torproject.org/, https://reichster.de/mirrors/torproject.org, , , http://reichster.de/mirrors/torproject.org/dist/, https://reichster.de/mirrors/torproject.org/dist/, , , Sun Jun 15 04:19:57 2014
+jlgaddis AT gnu DOT org, Evil Routers, US, United States, US, TRUE, FALSE, No, http://tor1.evilrouters.net/, , , , http://tor1.evilrouters.net/dist/, , , , Sun Jun 15 04:19:57 2014
+tor AT miglix DOT eu, Tor Supporter, DE, Germany, Europe, TRUE, TRUE, NO, http://tor.miglix.eu, https://tor.miglix.eu, , , http://tor.miglix.eu/dist/, https://tor.miglix.eu/dist/, , , Sun Jun 15 04:19:57 2014
+tor TA ninurta TOD name, TorNinurtaName, AT, Austria, AT, TRUE, TRUE, no, http://tor.ninurta.name/, , , , http://tor.ninurta.name/dist/, , , , Sun Jun 15 04:19:57 2014
Tor Fan, Tor Supporter, DE, Germany, DE, TRUE, FALSE, no, http://tor.wasifmalik.com/, , , , http://tor.wasifmalik.com/dist/, , , , Sat Apr 26 16:04:13 2014
-fr33tux <AT> general-changelog-team.fr, Tor Supporter, FR, France, FR, TRUE, TRUE, No, http://tor.fr33tux.org, https://tor.fr33tux.org, , , http://tor.fr33tux.org/dist/, https://tor.fr33tux.org/dist/, , , Fri May 23 22:29:21 2014
+fr33tux <AT> general-changelog-team.fr, Tor Supporter, FR, France, FR, TRUE, TRUE, No, http://tor.fr33tux.org, https://tor.fr33tux.org, , , http://tor.fr33tux.org/dist/, https://tor.fr33tux.org/dist/, , , Sun Jun 15 04:19:57 2014
mirror-service(a)netcologne.de, NetCologne GmbH, DE, NRW, TRUE, TRUE, No, http://mirror.netcologne.de/torproject.org, , rsync://mirror.netcologne.de/torproject.org, ftp://mirror.netcologne.de/torproject.org/, http://mirror.netcologne.de/torproject.org/dist, , rsync://mirror.netcologne.de/torproject.org/dist, , ,
-sebastian(at)bobrecki(dot)pl, Sebastian M. Bobrecki, PL, Poland, Europe, TRUE, FALSE, No, http://tor.iv.net.pl, https://tor.iv.net.pl, , , http://tor.iv.net.pl/dist/, https://tor.iv.net.pl/dist/, , , Thu Jun 5 20:11:09 2014
+sebastian(at)bobrecki(dot)pl, Sebastian M. Bobrecki, PL, Poland, Europe, TRUE, FALSE, No, http://tor.iv.net.pl, https://tor.iv.net.pl, , , http://tor.iv.net.pl/dist/, https://tor.iv.net.pl/dist/, , , Sun Jun 15 04:19:57 2014
admin AT netgull DOT com, NetGull, US, United States, North America, TRUE, TRUE, No, , , , , http://www.netgull.com/torproject/, , , ,
nick at calyx dot com, The Calyx Institute, US, United States, North America, TRUE, FALSE, No, http://tor.calyxinstitute.org, https://tor.calyxinstitute.org, , , http://tor.calyxinstitute.org/dist/, https://tor.calyxinstitute.org/dist/, , http://tmdrhl4e4anhsjc5.onion, Thu Jun 5 20:11:09 2014
-tor-mirror AT rdns DOT cc, d0wn.biz, FR, France, Europe, TRUE, FALSE, No, http://tor.static.lu, https://tor.static.lu, , , http://tor.static.lu/dist/, https://tor.static.lu/dist/, , , Thu Jun 5 20:11:09 2014
-calebcenter(a)live.com, alebcay.tk, US, United States, US, TRUE, FALSE, NO, http://tor.alebcay.tk, , rsync://alebcay.tk/tor, ftp://ftp.alebcay.tk, http://tor.alebcay.tk/dist, , , , Thu Jun 5 20:11:09 2014
-kevinmg(a)pressfreedomfoundation.org, Freedom of the Press Foundation, , US, US, True, False, No, http://tor.pressfreedomfoundation.org, https://tor.pressfreedomfoundation.org, , , http://tor.pressfreedomfoundation.org/dist/, https://tor.pressfreedomfoundation.org/dist/, , , Thu Jun 5 07:52:22 2014
-tor(a)moparisthebest.com, moparisthebest.com, DE, Germany, Europe, TRUE, TRUE, No, http://www.moparisthebest.com/tor/, https://www.moparisthebest.com/tor/, , , http://www.moparisthebest.com/tor/dist/, https://www.moparisthebest.com/tor/dist/, , ,
+tor-mirror AT rdns DOT cc, d0wn.biz, FR, France, Europe, TRUE, FALSE, No, http://tor.static.lu, https://tor.static.lu, , , http://tor.static.lu/dist/, https://tor.static.lu/dist/, , , Sun Jun 15 04:19:57 2014
+calebcenter(a)live.com, alebcay.tk, US, United States, US, TRUE, FALSE, NO, http://tor.alebcay.tk, , rsync://alebcay.tk/tor, ftp://ftp.alebcay.tk, http://tor.alebcay.tk/dist, , , , Sun Jun 15 04:19:57 2014
+kevinmg(a)pressfreedomfoundation.org, Freedom of the Press Foundation, , US, US, True, False, No, http://tor.pressfreedomfoundation.org, https://tor.pressfreedomfoundation.org, , , http://tor.pressfreedomfoundation.org/dist/, https://tor.pressfreedomfoundation.org/dist/, , , Sun Jun 15 04:19:57 2014
+tor(a)moparisthebest.com, moparisthebest.com, DE, Germany, Europe, TRUE, TRUE, No, http://www.moparisthebest.com/tor/, https://www.moparisthebest.com/tor/, , , http://www.moparisthebest.com/tor/dist/, https://www.moparisthebest.com/tor/dist/, , , Sun Jun 15 04:19:57 2014
1
0

[orbot/master] fulfilles the wishes of #12413 by support --default-torrc and -f
by n8fr8@torproject.org 17 Jun '14
by n8fr8@torproject.org 17 Jun '14
17 Jun '14
commit 2eb79a51856b05fc2636d81ed15bd75755646972
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Tue Jun 17 16:32:49 2014 -0400
fulfilles the wishes of #12413 by support --default-torrc and -f
---
.../android/service/TorResourceInstaller.java | 29 +-------
src/org/torproject/android/service/TorService.java | 73 ++++++++++++++++----
2 files changed, 63 insertions(+), 39 deletions(-)
diff --git a/src/org/torproject/android/service/TorResourceInstaller.java b/src/org/torproject/android/service/TorResourceInstaller.java
index 9478384..3e91ea4 100644
--- a/src/org/torproject/android/service/TorResourceInstaller.java
+++ b/src/org/torproject/android/service/TorResourceInstaller.java
@@ -116,35 +116,12 @@ public class TorResourceInstaller implements TorServiceConstants {
return true;
}
- public boolean updateTorConfig (File fileTorRc, String extraLines) throws IOException, FileNotFoundException, TimeoutException
+ public boolean updateTorConfigCustom (File fileTorRcCustom, String extraLines) throws IOException, FileNotFoundException, TimeoutException
{
- InputStream is;
-
- Shell shell = Shell.startShell(new ArrayList<String>(),installFolder.getAbsolutePath());
-
- is = context.getResources().openRawResource(R.raw.torrc);
- shell.add(new SimpleCommand(COMMAND_RM_FORCE + fileTorRc.getAbsolutePath())).waitForFinish();
- streamToFile(is,fileTorRc, false, false);
- if (extraLines != null && extraLines.length() > 0)
- {
- StringBufferInputStream sbis = new StringBufferInputStream('\n' + extraLines + '\n');
- streamToFile(sbis,fileTorRc,true,false);
- }
-
- is = context.getResources().openRawResource(R.raw.torrcdiag);
- fileTorRc = new File(installFolder, TORRCDIAG_ASSET_KEY);
- shell.add(new SimpleCommand(COMMAND_RM_FORCE + fileTorRc.getAbsolutePath())).waitForFinish();
- streamToFile(is,fileTorRc, false, false);
-
- if (extraLines != null && extraLines.length() > 0)
- {
- StringBufferInputStream sbis = new StringBufferInputStream('\n' + extraLines + '\n');
- streamToFile(sbis,fileTorRc,true,false);
- }
-
- shell.close();
+ StringBufferInputStream sbis = new StringBufferInputStream(extraLines + '\n');
+ streamToFile(sbis,fileTorRcCustom,false,false);
return true;
}
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 5acb900..cca714c 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -23,8 +23,6 @@ import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
-import java.util.Timer;
-import java.util.TimerTask;
import java.util.concurrent.TimeoutException;
import net.freehaven.tor.control.ConfigEntry;
@@ -54,6 +52,7 @@ import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
+import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
@@ -194,7 +193,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
public int getTorStatus ()
{
-
+
return currentStatus;
}
@@ -236,10 +235,14 @@ public class TorService extends Service implements TorServiceConstants, TorConst
if (notifyId == ERROR_NOTIFY_ID)
{
mNotifyBuilder.setTicker(notifyMsg);
- mNotifyBuilder.setOngoing(false);
mNotifyBuilder.setLights(Color.RED, 1000, 1000);
mNotifyBuilder.setSmallIcon(R.drawable.ic_stat_notifyerr);
}
+ else
+ {
+ mNotifyBuilder.setTicker("");
+ //mNotifyBuilder.setLights(Color.GREEN, 5000, 5000);
+ }
if (isOngoing)
{
@@ -559,9 +562,10 @@ public class TorService extends Service implements TorServiceConstants, TorConst
extraLines.append('\n');
extraLines.append(prefs.getString("pref_custom_torrc", ""));
- logNotice("updating torrc configuration...");
+ logNotice("updating torrc custom configuration...");
- boolean success = installer.updateTorConfig(fileTorRc, extraLines.toString());
+ File fileTorRcCustom = new File(fileTorRc.getAbsolutePath() + ".custom");
+ boolean success = installer.updateTorConfigCustom(fileTorRcCustom, extraLines.toString());
if (success)
{
@@ -765,7 +769,11 @@ public class TorService extends Service implements TorServiceConstants, TorConst
Shell shell = Shell.startShell();
- SimpleCommand cmdTor = new SimpleCommand(fileTor.getCanonicalPath() + " DataDirectory " + appCacheHome.getCanonicalPath() + " -f " + torrcPath + " &");
+ SimpleCommand cmdTor = new SimpleCommand(fileTor.getCanonicalPath()
+ + " DataDirectory " + appCacheHome.getCanonicalPath()
+ + " --defaults-torrc " + torrcPath
+ + " -f " + torrcPath + ".custom"
+ + " &");
shell.add(cmdTor);
@@ -1110,7 +1118,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
return PROFILE_ON;
}
-
public void setTorProfile(int profile) {
if (currentStatus == STATUS_OFF)
@@ -1123,6 +1130,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
initTor();
currentStatus = STATUS_CONNECTING;
+
}
catch (Exception e)
{
@@ -1159,6 +1167,48 @@ public class TorService extends Service implements TorServiceConstants, TorConst
}
+
+
+
+ private Handler mHandlerStatusChecker = null;
+
+ private void enableStatusChecker ()
+ {
+
+ if (mHandlerStatusChecker != null)
+ mHandlerStatusChecker = new Handler();
+
+ mHandlerStatusChecker.postDelayed(new Runnable ()
+ {
+ public void run ()
+ {
+ if (conn != null)
+ {
+ try
+ {
+ String state = conn.getInfo("dormant");
+ if (state != null && Integer.parseInt(state) == 0)
+ {
+ currentStatus = STATUS_ON;
+
+ }
+ else
+ {
+ currentStatus = STATUS_CONNECTING;
+ showToolbarNotification(getString(R.string.no_internet_connection_tor),NOTIFY_ID,R.drawable.ic_stat_tor_off,prefPersistNotifications);
+
+ }
+ }
+ catch (Exception e){}
+
+
+ mHandlerStatusChecker.postDelayed(this,1000);
+ }
+
+
+ }
+ },1000);
+ }
public void newDescriptors(List<String> orList) {
@@ -1233,9 +1283,6 @@ public class TorService extends Service implements TorServiceConstants, TorConst
sendCallbackStatusMessage(written, read, mTotalTrafficWritten, mTotalTrafficRead);
- // if(++notificationCounter%10==0)
- // startService(new Intent(ITorService.class.getName()));
-
}
lastWritten = written;
@@ -1762,8 +1809,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
logNotice(context.getString(R.string.network_connectivity_is_good_waking_tor_up_));
showToolbarNotification(getString(R.string.status_activated),NOTIFY_ID,R.drawable.ic_stat_tor,prefPersistNotifications);
- if (mHasRoot && mEnableTransparentProxy)
- enableTransparentProxy(mTransProxyAll, mTransProxyTethering);
+ //if (mHasRoot && mEnableTransparentProxy)
+ //enableTransparentProxy(mTransProxyAll, mTransProxyTethering);
}
}
1
0

[orbot/master] fixes #12411 and #12412 enables DNS and transport by default
by n8fr8@torproject.org 17 Jun '14
by n8fr8@torproject.org 17 Jun '14
17 Jun '14
commit b6715b4d3c3e84caab6108e3702010066f2b36db
Author: Nathan Freitas <nathan(a)freitas.net>
Date: Tue Jun 17 15:42:54 2014 -0400
fixes #12411 and #12412 enables DNS and transport by default
with new Orbot settings to enable user to easily change/disable
---
res/values/strings.xml | 14 ++++++-
res/xml/preferences.xml | 14 +++++++
src/org/torproject/android/service/TorService.java | 42 +++++++++++++++-----
.../android/service/TorServiceConstants.java | 4 +-
.../torproject/android/service/TorTransProxy.java | 32 ++++++++++-----
5 files changed, 84 insertions(+), 22 deletions(-)
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4456aff..d380579 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -258,8 +258,18 @@
<string name="updating_settings_in_tor_service">updating settings in Tor service</string>
<string name="pref_socks_title">Tor SOCKS</string>
- <string name="pref_socks_summary">IP and Port that Tor offers its SOCKS proxy on (default: 9050)</string>
- <string name="pref_socks_dialog">SOCKS Config (ip:port)</string>
+ <string name="pref_socks_summary">Port that Tor offers its SOCKS proxy on (default: 9050 or 0 to disable)</string>
+ <string name="pref_socks_dialog">SOCKS Port Config</string>
+
+ <string name="pref_transport_title">Tor TransProxy Port</string>
+ <string name="pref_transport_summary">Port that Tor offers its Transparent Proxy on (default: 9040 or 0 to disable)</string>
+ <string name="pref_transport_dialog">TransProxy Port Config</string>
+
+
+ <string name="pref_dnsport_title">Tor DNS Port</string>
+ <string name="pref_dnsport_summary">Port that Tor offers its DNS on (default: 5400 or 0 to disable)</string>
+ <string name="pref_dnsport_dialog">DNS Port Config</string>
+
<string name="pref_torrc_title">Torrc Custom Config</string>
<string name="pref_torrc_summary">EXPERTS ONLY: enter direct torrc config lines</string>
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index 0277343..22502b6 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -204,6 +204,20 @@ android:dialogTitle="@string/pref_socks_dialog"
android:defaultValue="9050"
/>
+ <EditTextPreference android:key="pref_transport"
+android:title="@string/pref_transport_title"
+android:summary="@string/pref_transport_summary"
+android:dialogTitle="@string/pref_transport_dialog"
+android:defaultValue="9040"
+/>
+
+ <EditTextPreference android:key="pref_dnsport"
+android:title="@string/pref_dnsport_title"
+android:summary="@string/pref_dnsport_summary"
+android:dialogTitle="@string/pref_dnsport_dialog"
+android:defaultValue="5400"
+/>
+
<EditTextPreference android:key="pref_custom_torrc"
android:title="@string/pref_torrc_title"
android:summary="@string/pref_torrc_summary"
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 5f9e178..5acb900 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -659,19 +659,24 @@ public class TorService extends Service implements TorServiceConstants, TorConst
{
mTransProxy = new TorTransProxy(this, fileXtables);
-
}
- logMessage ("Transparent Proxying: updating Tor settings...");
-
- mBinder.updateConfiguration("TransPort","9040",false);
- mBinder.updateConfiguration("DNSPort","5400",false);
- mBinder.updateConfiguration("VirtualAddrNetwork","10.192.0.0/10",false);
- mBinder.updateConfiguration("AutomapHostsOnResolve","1",false);
- mBinder.saveConfiguration();
-
+ SharedPreferences prefs = TorServiceUtils.getSharedPrefs(getApplicationContext());
+ String transProxy = prefs.getString("pref_transport", TorServiceConstants.TOR_TRANSPROXY_PORT_DEFAULT+"");
+ String dnsPort = prefs.getString("pref_dnsport", TorServiceConstants.TOR_TRANSPROXY_PORT_DEFAULT+"");
+
+ if (transProxy.indexOf(':')!=-1) //we just want the port for this
+ transProxy = transProxy.split(":")[1];
+
+ if (dnsPort.indexOf(':')!=-1) //we just want the port for this
+ dnsPort = dnsPort.split(":")[1];
+
+ mTransProxy.setTransProxyPort(Integer.parseInt(transProxy));
+ mTransProxy.setDNSPort(Integer.parseInt(dnsPort));
+
+
//TODO: Find a nice place for the next (commented) line
//TorTransProxy.setDNSProxying();
@@ -1781,6 +1786,12 @@ public class TorService extends Service implements TorServiceConstants, TorConst
enableSocks (socksConfig,false);
+ String transPort = prefs.getString("pref_transport", TorServiceConstants.TOR_TRANSPROXY_PORT_DEFAULT+"");
+ String dnsPort = prefs.getString("pref_dnsport", TorServiceConstants.TOR_DNS_PORT_DEFAULT+"");
+
+ enableTransProxyAndDNSPorts(transPort, dnsPort);
+
+
boolean useBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_ENABLED, false);
//boolean autoUpdateBridges = prefs.getBoolean(TorConstants.PREF_BRIDGES_UPDATED, false);
@@ -2041,6 +2052,19 @@ public class TorService extends Service implements TorServiceConstants, TorConst
}
+ private void enableTransProxyAndDNSPorts (String transPort, String dnsPort) throws RemoteException
+ {
+ logMessage ("Transparent Proxying: enabling port...");
+
+ mBinder.updateConfiguration("TransPort",transPort,false);
+ mBinder.updateConfiguration("DNSPort",dnsPort,false);
+ mBinder.updateConfiguration("VirtualAddrNetwork","10.192.0.0/10",false);
+ mBinder.updateConfiguration("AutomapHostsOnResolve","1",false);
+ mBinder.saveConfiguration();
+
+
+ }
+
private void blockPlaintextPorts (String portList) throws RemoteException
{
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index 0890f9e..8c53779 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -54,9 +54,9 @@ public interface TorServiceConstants {
//what is says!
public final static String IP_LOCALHOST = "127.0.0.1";
public final static int UPDATE_TIMEOUT = 1000;
- public final static int TOR_TRANSPROXY_PORT = 9040;
+ public final static int TOR_TRANSPROXY_PORT_DEFAULT = 9040;
public final static int STANDARD_DNS_PORT = 53;
- public final static int TOR_DNS_PORT = 5400;
+ public final static int TOR_DNS_PORT_DEFAULT = 5400;
//path to check Tor against
public final static String URL_TOR_CHECK = "https://check.torproject.org";
diff --git a/src/org/torproject/android/service/TorTransProxy.java b/src/org/torproject/android/service/TorTransProxy.java
index 4999777..400b1db 100644
--- a/src/org/torproject/android/service/TorTransProxy.java
+++ b/src/org/torproject/android/service/TorTransProxy.java
@@ -23,10 +23,24 @@ public class TorTransProxy implements TorServiceConstants {
private final static String ALLOW_LOCAL = " ! -o lo ! -d 127.0.0.1 ! -s 127.0.0.1 ";
+ private int mTransProxyPort = TorServiceConstants.TOR_TRANSPROXY_PORT_DEFAULT;
+ private int mDNSPort = TorServiceConstants.TOR_DNS_PORT_DEFAULT;
+
public TorTransProxy (TorService torService, File fileXTables)
{
mTorService = torService;
mFileXtables = fileXTables;
+
+ }
+
+ public void setTransProxyPort (int transProxyPort)
+ {
+ mTransProxyPort = transProxyPort;
+ }
+
+ public void setDNSPort (int dnsPort)
+ {
+ mDNSPort = dnsPort;
}
public String getIpTablesPath (Context context)
@@ -383,7 +397,7 @@ public class TorTransProxy implements TorServiceConstants {
script.append(tApp.getUid());
script.append(" -m tcp --syn");
script.append(" -j REDIRECT --to-ports ");
- script.append(TOR_TRANSPROXY_PORT);
+ script.append(mTransProxyPort);
executeCommand (shell, script.toString());
script = new StringBuilder();
@@ -398,7 +412,7 @@ public class TorTransProxy implements TorServiceConstants {
script.append(" -m udp --dport ");
script.append(STANDARD_DNS_PORT);
script.append(" -j REDIRECT --to-ports ");
- script.append(TOR_DNS_PORT);
+ script.append(mDNSPort);
executeCommand (shell, script.toString());
script = new StringBuilder();
@@ -454,7 +468,7 @@ public class TorTransProxy implements TorServiceConstants {
script.append(" -t nat -A PREROUTING -i ");
script.append(hwinterfaces[i]);
script.append(" -p udp --dport 53 -j REDIRECT --to-ports ");
- script.append(TOR_DNS_PORT);
+ script.append(mDNSPort);
executeCommand (shell, script.toString());
script = new StringBuilder();
@@ -465,7 +479,7 @@ public class TorTransProxy implements TorServiceConstants {
script.append(" -t nat -A PREROUTING -i ");
script.append(hwinterfaces[i]);
script.append(" -p tcp -j REDIRECT --to-ports ");
- script.append(TOR_TRANSPROXY_PORT);
+ script.append(mTransProxyPort);
lastExit = executeCommand (shell, script.toString());
script = new StringBuilder();
@@ -642,7 +656,7 @@ public class TorTransProxy implements TorServiceConstants {
script.append(torUid);
script.append(" -m tcp --syn");
script.append(" -j REDIRECT --to-ports ");
- script.append(TOR_TRANSPROXY_PORT);
+ script.append(mTransProxyPort);
executeCommand (shell, script.toString());
script = new StringBuilder();
@@ -658,7 +672,7 @@ public class TorTransProxy implements TorServiceConstants {
script.append(" -m udp --dport ");
script.append(STANDARD_DNS_PORT);
script.append(" -j REDIRECT --to-ports ");
- script.append(TOR_DNS_PORT);
+ script.append(mDNSPort);
executeCommand (shell, script.toString());
script = new StringBuilder();
@@ -699,7 +713,7 @@ public class TorTransProxy implements TorServiceConstants {
script.append(" -A ").append(srcChainName);
script.append(" -p tcp");
script.append(" -m tcp");
- script.append(" --dport ").append(TOR_TRANSPROXY_PORT);
+ script.append(" --dport ").append(mTransProxyPort);
script.append(" -j ACCEPT");
executeCommand (shell, script.toString());
@@ -735,7 +749,7 @@ public class TorTransProxy implements TorServiceConstants {
script.append(" -A ").append(srcChainName);
script.append(" -p udp");
script.append(" -m udp");
- script.append(" --dport ").append(TOR_DNS_PORT);
+ script.append(" --dport ").append(mDNSPort);
script.append(" -j ACCEPT");
executeCommand (shell, script.toString());
@@ -747,7 +761,7 @@ public class TorTransProxy implements TorServiceConstants {
script.append(" -A ").append(srcChainName);
script.append(" -p udp");
script.append(" -m udp");
- script.append(" --dport ").append(TOR_DNS_PORT);
+ script.append(" --dport ").append(mDNSPort);
script.append(" -j ACCEPT");
executeCommand (shell, script.toString());
1
0