[tor-commits] [collector/master] Add support for Bifroest's bridge descriptor tarballs.
karsten at torproject.org
karsten at torproject.org
Fri Sep 2 09:14:40 UTC 2016
commit 46ab6609854e1e2f0c3d55a52f9ada1c2dd59793
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date: Fri Aug 26 12:23:22 2016 +0200
Add support for Bifroest's bridge descriptor tarballs.
Implements #20037.
---
CHANGELOG.md | 3 ++
.../bridgedescs/BridgeDescriptorParser.java | 5 +--
.../bridgedescs/BridgeSnapshotReader.java | 36 +++++++++++++++++++---
.../bridgedescs/SanitizedBridgesWriter.java | 6 ++--
4 files changed, 40 insertions(+), 10 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a8be9e2..cf1ea12 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
# Changes in version 1.1.0 - 2016-08-31
+ * Medium changes
+ - Add support for Bifroest's bridge descriptor tarballs.
+
* Minor changes
- Remove quotes around base URL in index.json.
diff --git a/src/main/java/org/torproject/collector/bridgedescs/BridgeDescriptorParser.java b/src/main/java/org/torproject/collector/bridgedescs/BridgeDescriptorParser.java
index 511b171..d40052e 100644
--- a/src/main/java/org/torproject/collector/bridgedescs/BridgeDescriptorParser.java
+++ b/src/main/java/org/torproject/collector/bridgedescs/BridgeDescriptorParser.java
@@ -27,7 +27,7 @@ public class BridgeDescriptorParser {
/** Parses the first line of the given descriptor data to determine the
* descriptor type and passes it to the sanitized bridges writer. */
- public void parse(byte[] allData, String dateTime)
+ public void parse(byte[] allData, String dateTime, String authorityFingerprint)
throws ConfigurationException {
try {
BufferedReader br = new BufferedReader(new StringReader(
@@ -45,7 +45,8 @@ public class BridgeDescriptorParser {
}
} else {
if (this.sbw != null) {
- this.sbw.sanitizeAndStoreNetworkStatus(allData, dateTime);
+ this.sbw.sanitizeAndStoreNetworkStatus(allData, dateTime,
+ authorityFingerprint);
}
}
} catch (IOException e) {
diff --git a/src/main/java/org/torproject/collector/bridgedescs/BridgeSnapshotReader.java b/src/main/java/org/torproject/collector/bridgedescs/BridgeSnapshotReader.java
index 25bb2ea..046db7d 100644
--- a/src/main/java/org/torproject/collector/bridgedescs/BridgeSnapshotReader.java
+++ b/src/main/java/org/torproject/collector/bridgedescs/BridgeSnapshotReader.java
@@ -100,9 +100,35 @@ public class BridgeSnapshotReader {
}
BufferedInputStream bis = new BufferedInputStream(tais);
String fn = pop.getName();
- String dateTime = fn.substring(11, 21) + " "
- + fn.substring(22, 24) + ":" + fn.substring(24, 26)
- + ":" + fn.substring(26, 28);
+ String[] fnParts = fn.split("-");
+ if (fnParts.length != 5) {
+ logger.warn("Invalid bridge descriptor tarball file name: "
+ + fn + ". Skipping.");
+ continue;
+ }
+ String authorityPart = String.format("%s-%s-", fnParts[0],
+ fnParts[1]);
+ String datePart = String.format("%s-%s-%s", fnParts[2],
+ fnParts[3], fnParts[4]);
+ String authorityFingerprint;
+ switch (authorityPart) {
+ case "from-tonga-":
+ authorityFingerprint =
+ "4A0CCD2DDC7995083D73F5D667100C8A5831F16D";
+ break;
+ case "from-bifroest-":
+ authorityFingerprint =
+ "1D8F3A91C37C5D1C4C19B1AD1D0CFBE8BF72D8E1";
+ break;
+ default:
+ logger.warn("Did not recognize the bridge authority that "
+ + "generated " + fn + ". Skipping.");
+ continue;
+ }
+ String dateTime = datePart.substring(0, 10) + " "
+ + datePart.substring(11, 13) + ":"
+ + datePart.substring(13, 15) + ":"
+ + datePart.substring(15, 17);
while ((tais.getNextTarEntry()) != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len;
@@ -130,7 +156,7 @@ public class BridgeSnapshotReader {
if (firstLine.startsWith("published ")
|| firstLine.startsWith("flag-thresholds ")
|| firstLine.startsWith("r ")) {
- bdp.parse(allData, dateTime);
+ bdp.parse(allData, dateTime, authorityFingerprint);
parsedStatuses++;
} else if (descriptorImportHistory.contains(fileDigest)) {
/* Skip server descriptors or extra-info descriptors if
@@ -167,7 +193,7 @@ public class BridgeSnapshotReader {
DigestUtils.sha(descBytes));
if (!descriptorImportHistory.contains(
descriptorDigest)) {
- bdp.parse(descBytes, dateTime);
+ bdp.parse(descBytes, dateTime, authorityFingerprint);
descriptorImportHistory.add(descriptorDigest);
if (firstLine.startsWith("router ")) {
parsedServerDescriptors++;
diff --git a/src/main/java/org/torproject/collector/bridgedescs/SanitizedBridgesWriter.java b/src/main/java/org/torproject/collector/bridgedescs/SanitizedBridgesWriter.java
index dcac024..b787f78 100644
--- a/src/main/java/org/torproject/collector/bridgedescs/SanitizedBridgesWriter.java
+++ b/src/main/java/org/torproject/collector/bridgedescs/SanitizedBridgesWriter.java
@@ -379,7 +379,8 @@ public class SanitizedBridgesWriter extends CollecTorMain {
* Sanitizes a network status and writes it to disk.
*/
public void sanitizeAndStoreNetworkStatus(byte[] data,
- String publicationTime) throws ConfigurationException {
+ String publicationTime, String authorityFingerprint)
+ throws ConfigurationException {
if (this.persistenceProblemWithSecrets) {
/* There's a persistence problem, so we shouldn't scrub more IP
@@ -546,8 +547,7 @@ public class SanitizedBridgesWriter extends CollecTorMain {
File tarballFile = new File(
this.sanitizedBridgesDirectory.getAbsolutePath() + "/" + syear
+ "/" + smonth + "/statuses/" + sday + "/" + syear + smonth
- + sday + "-" + stime + "-"
- + "4A0CCD2DDC7995083D73F5D667100C8A5831F16D");
+ + sday + "-" + stime + "-" + authorityFingerprint);
File rsyncFile = new File(config.getPath(Key.RecentPath).toFile(),
"bridge-descriptors/statuses/" + tarballFile.getName());
File[] outputFiles = new File[] { tarballFile, rsyncFile };
More information about the tor-commits
mailing list