commit ad10cd9ac88dac0de65c336448b5b639292ee6d0 Author: Karsten Loesing karsten.loesing@gmx.net Date: Thu Jan 12 10:21:16 2012 +0100
Enable bridge descriptor parsing. --- .../torproject/descriptor/impl/DescriptorImpl.java | 10 ++++------ .../descriptor/impl/ExtraInfoDescriptorImpl.java | 20 +++++++++++++++++--- .../descriptor/impl/ServerDescriptorImpl.java | 9 ++++----- .../impl/RelayNetworkStatusVoteImplTest.java | 2 +- .../descriptor/impl/ServerDescriptorImplTest.java | 16 ---------------- 5 files changed, 26 insertions(+), 31 deletions(-)
diff --git a/src/org/torproject/descriptor/impl/DescriptorImpl.java b/src/org/torproject/descriptor/impl/DescriptorImpl.java index 259a1de..233b2df 100644 --- a/src/org/torproject/descriptor/impl/DescriptorImpl.java +++ b/src/org/torproject/descriptor/impl/DescriptorImpl.java @@ -65,14 +65,12 @@ public abstract class DescriptorImpl implements Descriptor { rawDescriptorBytes, fileName)); } else if (firstLines.startsWith("router ") || firstLines.contains("\nrouter ")) { - /* TODO Implement me. - parsedDescriptors.addAll(BridgeServerDescriptorImpl. - parseDescriptors(rawDescriptorBytes)); */ + parsedDescriptors.addAll(ServerDescriptorImpl. + parseDescriptors(rawDescriptorBytes)); } else if (firstLines.startsWith("extra-info ") || firstLines.contains("\nextra-info ")) { - /* TODO Implement me. - parsedDescriptors.addAll(BridgeExtraInfoDescriptorImpl. - parseDescriptors(rawDescriptorBytes)); */ + parsedDescriptors.addAll(ExtraInfoDescriptorImpl. + parseDescriptors(rawDescriptorBytes)); } else { throw new DescriptorParseException("Could not detect bridge " + "descriptor type in descriptor starting with '" + firstLines diff --git a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java index 6dae9eb..dc9f521 100644 --- a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java +++ b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java @@ -46,7 +46,7 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl super(descriptorBytes); this.parseDescriptorBytes(); Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList(( - "extra-info,published,router-signature").split(","))); + "extra-info,published").split(","))); this.checkExactlyOnceKeywords(exactlyOnceKeywords); Set<String> atMostOnceKeywords = new HashSet<String>(Arrays.asList(( "read-history,write-history,geoip-db-digest,dirreq-stats-end," @@ -58,12 +58,12 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl + "cell-processed-cells,cell-queued-cells,cell-time-in-queue," + "cell-circuits-per-decile,conn-bi-direct,exit-stats-end," + "exit-kibibytes-written,exit-kibibytes-read," - + "exit-streams-opened").split(","))); + + "exit-streams-opened,bridge-stats-end,bridge-stats-ips," + + "router-signature").split(","))); this.checkAtMostOnceKeywords(atMostOnceKeywords); /* TODO Add more checks to see that only statistics details lines are * included with corresponding statistics interval lines. */ this.checkFirstKeyword("extra-info"); - this.checkLastKeyword("router-signature"); return; }
@@ -147,6 +147,10 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl this.parseExitKibibytesReadLine(line, lineNoOpt, partsNoOpt); } else if (keyword.equals("exit-streams-opened")) { this.parseExitStreamsOpenedLine(line, lineNoOpt, partsNoOpt); + } else if (keyword.equals("bridge-stats-end")) { + this.parseBridgeStatsEndLine(line, lineNoOpt, partsNoOpt); + } else if (keyword.equals("bridge-ips")) { + this.parseBridgeStatsIpsLine(line, lineNoOpt, partsNoOpt); } else if (keyword.equals("router-signature")) { this.parseRouterSignatureLine(line, lineNoOpt, partsNoOpt); } else if (line.startsWith("-----BEGIN")) { @@ -353,6 +357,16 @@ public class ExtraInfoDescriptorImpl extends DescriptorImpl /* TODO Implement me. */ }
+ private void parseBridgeStatsEndLine(String line, String lineNoOpt, + String[] partsNoOpt) throws DescriptorParseException { + /* TODO Implement me. */ + } + + private void parseBridgeStatsIpsLine(String line, String lineNoOpt, + String[] partsNoOpt) throws DescriptorParseException { + /* TODO Implement me. */ + } + private void parseRouterSignatureLine(String line, String lineNoOpt, String[] partsNoOpt) throws DescriptorParseException { if (!lineNoOpt.equals("router-signature")) { diff --git a/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java b/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java index 878955e..411e8c9 100644 --- a/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java +++ b/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java @@ -42,18 +42,17 @@ public class ServerDescriptorImpl extends DescriptorImpl throws DescriptorParseException { super(descriptorBytes); this.parseDescriptorBytes(); - Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList(( - "router,bandwidth,published,onion-key,signing-key," - + "router-signature").split(","))); + Set<String> exactlyOnceKeywords = new HashSet<String>(Arrays.asList( + "router,bandwidth,published".split(","))); this.checkExactlyOnceKeywords(exactlyOnceKeywords); Set<String> atMostOnceKeywords = new HashSet<String>(Arrays.asList(( "platform,fingerprint,hibernating,uptime,contact,family," + "read-history,write-history,eventdns,caches-extra-info," + "extra-info-digest,hidden-service-dir,protocols," - + "allow-single-hop-exits").split(","))); + + "allow-single-hop-exits,onion-key,signing-key," + + "router-signature").split(","))); this.checkAtMostOnceKeywords(atMostOnceKeywords); this.checkFirstKeyword("router"); - this.checkLastKeyword("router-signature"); if (this.getKeywordCount("accept") == 0 && this.getKeywordCount("reject") == 0) { throw new DescriptorParseException("Either keyword 'accept' or " diff --git a/test/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java b/test/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java index 7618fff..ffacc9f 100644 --- a/test/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java +++ b/test/org/torproject/descriptor/impl/RelayNetworkStatusVoteImplTest.java @@ -687,7 +687,7 @@ public class RelayNetworkStatusVoteImplTest { + "208.83.223.34 443 80"); }
- @Test(expected = DescriptorParseException.class) + @Test() public void testFingerprintLowerCase() throws DescriptorParseException { VoteBuilder.createWithDirSourceLine("dir-source urras " + "80550987e1d626e3eba5e5e75a458de0626d088c 208.83.223.34 " diff --git a/test/org/torproject/descriptor/impl/ServerDescriptorImplTest.java b/test/org/torproject/descriptor/impl/ServerDescriptorImplTest.java index c0721f5..f699694 100644 --- a/test/org/torproject/descriptor/impl/ServerDescriptorImplTest.java +++ b/test/org/torproject/descriptor/impl/ServerDescriptorImplTest.java @@ -609,11 +609,6 @@ public class ServerDescriptorImplTest { assertNull(descriptor.getExtraInfoDigest()); }
- @Test(expected = DescriptorParseException.class) - public void testOnionKeyMissing() throws DescriptorParseException { - DescriptorBuilder.createWithOnionKeyLines(null); - } - @Test() public void testOnionKeyOpt() throws DescriptorParseException { ServerDescriptor descriptor = DescriptorBuilder. @@ -626,11 +621,6 @@ public class ServerDescriptorImplTest { + "-----END RSA PUBLIC KEY-----"); }
- @Test(expected = DescriptorParseException.class) - public void testSigningKeyMissing() throws DescriptorParseException { - DescriptorBuilder.createWithSigningKeyLines(null); - } - @Test() public void testSigningKeyOpt() throws DescriptorParseException { ServerDescriptor descriptor = DescriptorBuilder. @@ -749,12 +739,6 @@ public class ServerDescriptorImplTest { DescriptorBuilder.createWithExitPolicyLines(null); }
- @Test(expected = DescriptorParseException.class) - public void testRouterSignatureMissing() - throws DescriptorParseException { - DescriptorBuilder.createWithRouterSignatureLines(null); - } - @Test() public void testRouterSignatureOpt() throws DescriptorParseException {