[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [metrics-lib/master] Support bridge-ip-transports lines in extra-infos.
commit b58211e577fa1d685f4f3c802fcd30e2c21700f8
Author: Karsten Loesing <karsten.loesing@xxxxxxx>
Date: Fri Apr 19 20:57:31 2013 +0200
Support bridge-ip-transports lines in extra-infos.
---
.../torproject/descriptor/ExtraInfoDescriptor.java | 8 +++++++
.../descriptor/impl/ExtraInfoDescriptorImpl.java | 18 +++++++++++++-
.../impl/ExtraInfoDescriptorImplTest.java | 23 ++++++++++++++++++++
3 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/src/org/torproject/descriptor/ExtraInfoDescriptor.java b/src/org/torproject/descriptor/ExtraInfoDescriptor.java
index e57febe..1478a4a 100644
--- a/src/org/torproject/descriptor/ExtraInfoDescriptor.java
+++ b/src/org/torproject/descriptor/ExtraInfoDescriptor.java
@@ -248,6 +248,14 @@ public interface ExtraInfoDescriptor extends Descriptor {
* bridge IP version statistics are included. */
public SortedMap<String, Integer> getBridgeIpVersions();
+ /* Return statistics on client IP addresses with map keys being
+ * pluggable transport names, e.g., "obfs2" or "obfs3" for known
+ * transports, "<OR>" for no transport, or "<??>" for an unknown
+ * transport, and map values being the number of unique IP addresses
+ * rounded up to the nearest multiple of 8, or null if no bridge IP
+ * transport statistics are included. */
+ public SortedMap<String, Integer> getBridgeIpTransports();
+
/* Return the (possibly empty) list of transports supported by this
* bridge. */
public List<String> getTransports();
diff --git a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
index d7dfd79..9bd9a9b 100644
--- a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
+++ b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java
@@ -170,6 +170,8 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
this.parseBridgeStatsIpsLine(line, lineNoOpt, partsNoOpt);
} else if (keyword.equals("bridge-ip-versions")) {
this.parseBridgeIpVersionsLine(line, lineNoOpt, partsNoOpt);
+ } else if (keyword.equals("bridge-ip-transports")) {
+ this.parseBridgeIpTransportsLine(line, lineNoOpt, partsNoOpt);
} else if (keyword.equals("transport")) {
this.parseTransportLine(line, lineNoOpt, partsNoOpt);
} else if (keyword.equals("router-signature")) {
@@ -585,8 +587,14 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
private void parseBridgeIpVersionsLine(String line, String lineNoOpt,
String[] partsNoOpt) throws DescriptorParseException {
- this.bridgeIpVersions = ParseHelper.parseCommaSeparatedKeyValueList(line,
- partsNoOpt, 1, 2);
+ this.bridgeIpVersions = ParseHelper.parseCommaSeparatedKeyValueList(
+ line, partsNoOpt, 1, 2);
+ }
+
+ private void parseBridgeIpTransportsLine(String line, String lineNoOpt,
+ String[] partsNoOpt) throws DescriptorParseException {
+ this.bridgeIpTransports = ParseHelper.parseCommaSeparatedKeyValueList(
+ line, partsNoOpt, 1, 0);
}
private void parseTransportLine(String line, String lineNoOpt,
@@ -911,6 +919,12 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl
new TreeMap<String, Integer>(this.bridgeIpVersions);
}
+ private SortedMap<String, Integer> bridgeIpTransports;
+ public SortedMap<String, Integer> getBridgeIpTransports() {
+ return this.bridgeIpTransports == null ? null :
+ new TreeMap<String, Integer>(this.bridgeIpTransports);
+ }
+
private List<String> transports = new ArrayList<String>();
public List<String> getTransports() {
return new ArrayList<String>(this.transports);
diff --git a/test/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java b/test/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
index e1b19f8..569ce06 100644
--- a/test/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
+++ b/test/org/torproject/descriptor/impl/ExtraInfoDescriptorImplTest.java
@@ -649,6 +649,15 @@ public class ExtraInfoDescriptorImplTest {
return DescriptorBuilder.createWithBridgeStatsLines(
bsb.buildBridgeStatsLines());
}
+ private String bridgeIpTransportsLine = "bridge-ip-transports "
+ + "<OR>=8,obfs2=792,obfs3=1728";
+ private static ExtraInfoDescriptor createWithBridgeIpTransportsLine(
+ String line) throws DescriptorParseException {
+ BridgeStatsBuilder bsb = new BridgeStatsBuilder();
+ bsb.bridgeIpTransportsLine = line;
+ return DescriptorBuilder.createWithBridgeStatsLines(
+ bsb.buildBridgeStatsLines());
+ }
private static ExtraInfoDescriptor createWithDefaultLines()
throws DescriptorParseException {
return DescriptorBuilder.createWithBridgeStatsLines(
@@ -665,6 +674,9 @@ public class ExtraInfoDescriptorImplTest {
if (this.bridgeIpVersionsLine != null) {
sb.append(this.bridgeIpVersionsLine + "\n");
}
+ if (this.bridgeIpTransportsLine != null) {
+ sb.append(this.bridgeIpTransportsLine + "\n");
+ }
String lines = sb.toString();
if (lines.endsWith("\n")) {
lines = lines.substring(0, lines.length() - 1);
@@ -1271,6 +1283,11 @@ public class ExtraInfoDescriptorImplTest {
assertEquals(8, ver.get("v4").intValue());
assertEquals(16, ver.get("v6").intValue());
assertFalse(ver.containsKey("v8"));
+ SortedMap<String, Integer> trans = descriptor.getBridgeIpTransports();
+ assertNotNull(trans);
+ assertEquals(8, trans.get("<OR>").intValue());
+ assertEquals(792, trans.get("obfs2").intValue());
+ assertEquals(1728, trans.get("obfs3").intValue());
}
@Test(expected = DescriptorParseException.class)
@@ -1293,6 +1310,12 @@ public class ExtraInfoDescriptorImplTest {
"bridge-ip-versions v4=24.5");
}
+ public void testBridgeIpTransportsDouble()
+ throws DescriptorParseException {
+ BridgeStatsBuilder.createWithBridgeIpTransportsLine(
+ "bridge-ip-transports obfs2=24.5");
+ }
+
@Test()
public void testRouterSignatureOpt()
throws DescriptorParseException {
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits