[metrics-lib/master] Use Java 7's switch-on-String wherever possible.

commit 2b4d7732f65a8d030f7b747ed9931e5541956332 Author: Karsten Loesing <karsten.loesing@gmx.net> Date: Tue Dec 22 12:55:44 2015 +0100 Use Java 7's switch-on-String wherever possible. Rather than writing chained if-else statements with String comparison for equals(), we can now switch on a String instance. Suggested by iwakeh, implements #17824. --- .../descriptor/DescriptorSourceFactory.java | 13 +- .../descriptor/impl/BridgeNetworkStatusImpl.java | 51 +++-- .../impl/DirectoryKeyCertificateImpl.java | 95 ++++---- .../descriptor/impl/ExtraInfoDescriptorImpl.java | 228 ++++++++++++-------- .../descriptor/impl/MicrodescriptorImpl.java | 74 ++++--- .../descriptor/impl/NetworkStatusEntryImpl.java | 38 ++-- .../descriptor/impl/RelayDirectoryImpl.java | 75 ++++--- .../impl/RelayNetworkStatusConsensusImpl.java | 73 ++++--- .../descriptor/impl/RelayNetworkStatusImpl.java | 80 ++++--- .../impl/RelayNetworkStatusVoteImpl.java | 127 +++++++---- .../descriptor/impl/ServerDescriptorImpl.java | 199 ++++++++++------- .../descriptor/impl/TorperfResultImpl.java | 87 +++++--- 12 files changed, 700 insertions(+), 440 deletions(-) diff --git a/src/org/torproject/descriptor/DescriptorSourceFactory.java b/src/org/torproject/descriptor/DescriptorSourceFactory.java index 49fcdc6..8bab13e 100644 --- a/src/org/torproject/descriptor/DescriptorSourceFactory.java +++ b/src/org/torproject/descriptor/DescriptorSourceFactory.java @@ -53,14 +53,19 @@ public final class DescriptorSourceFactory { Object object; String clazzName = null; try { - if (PARSER_PROPERTY.equals(type)) { + switch (type) { + case PARSER_PROPERTY: clazzName = System.getProperty(type, PARSER_DEFAULT); - } else if (LOADER_PROPERTY.equals(type)) { + break; + case LOADER_PROPERTY: clazzName = System.getProperty(type, LOADER_DEFAULT); - } else if (READER_PROPERTY.equals(type)) { + break; + case READER_PROPERTY: clazzName = System.getProperty(type, READER_DEFAULT); - } else if (COLLECTOR_PROPERTY.equals(type)) { + break; + case COLLECTOR_PROPERTY: clazzName = System.getProperty(type, COLLECTOR_DEFAULT); + break; } object = ClassLoader.getSystemClassLoader().loadClass(clazzName). newInstance(); diff --git a/src/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java b/src/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java index d5e6d8f..fcc9b64 100644 --- a/src/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java +++ b/src/org/torproject/descriptor/impl/BridgeNetworkStatusImpl.java @@ -73,18 +73,23 @@ public class BridgeNetworkStatusImpl extends NetworkStatusImpl String line = s.next(); String[] parts = line.split("[ \t]+"); String keyword = parts[0]; - if (keyword.equals("published")) { + switch (keyword) { + case "published": this.parsePublishedLine(line, parts); - } else if (keyword.equals("flag-thresholds")) { + break; + case "flag-thresholds": this.parseFlagThresholdsLine(line, parts); - } else if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" + line - + "' in bridge network status."); - } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + break; + default: + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + line + + "' in bridge network status."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } @@ -105,27 +110,37 @@ public class BridgeNetworkStatusImpl extends NetworkStatusImpl ParseHelper.parseKeyValueStringPairs(line, parts, 1, "="); try { for (Map.Entry<String, String> e : flagThresholds.entrySet()) { - if (e.getKey().equals("stable-uptime")) { + switch (e.getKey()) { + case "stable-uptime": this.stableUptime = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("stable-mtbf")) { + break; + case "stable-mtbf": this.stableMtbf = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("fast-speed")) { + break; + case "fast-speed": this.fastBandwidth = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("guard-wfu")) { + break; + case "guard-wfu": this.guardWfu = Double.parseDouble(e.getValue(). replaceAll("%", "")); - } else if (e.getKey().equals("guard-tk")) { + break; + case "guard-tk": this.guardTk = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("guard-bw-inc-exits")) { + break; + case "guard-bw-inc-exits": this.guardBandwidthIncludingExits = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("guard-bw-exc-exits")) { + break; + case "guard-bw-exc-exits": this.guardBandwidthExcludingExits = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("enough-mtbf")) { + break; + case "enough-mtbf": this.enoughMtbfInfo = Integer.parseInt(e.getValue()); - } else if (e.getKey().equals("ignoring-advertised-bws")) { + break; + case "ignoring-advertised-bws": this.ignoringAdvertisedBws = Integer.parseInt(e.getValue()); + break; } } } catch (NumberFormatException ex) { diff --git a/src/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java b/src/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java index 152ffeb..fcbf3f7 100644 --- a/src/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java +++ b/src/org/torproject/descriptor/impl/DirectoryKeyCertificateImpl.java @@ -60,65 +60,82 @@ public class DirectoryKeyCertificateImpl extends DescriptorImpl private void parseDescriptorBytes() throws DescriptorParseException { Scanner s = new Scanner(new String(this.rawDescriptorBytes)). useDelimiter("\n"); - String nextCrypto = null; + String nextCrypto = ""; StringBuilder crypto = null; while (s.hasNext()) { String line = s.next(); String[] parts = line.split("[ \t]+"); String keyword = parts[0]; - if (keyword.equals("dir-key-certificate-version")) { + switch (keyword) { + case "dir-key-certificate-version": this.parseDirKeyCertificateVersionLine(line, parts); - } else if (keyword.equals("dir-address")) { + break; + case "dir-address": this.parseDirAddressLine(line, parts); - } else if (keyword.equals("fingerprint")) { + break; + case "fingerprint": this.parseFingerprintLine(line, parts); - } else if (keyword.equals("dir-identity-key")) { + break; + case "dir-identity-key": this.parseDirIdentityKeyLine(line, parts); nextCrypto = "dir-identity-key"; - } else if (keyword.equals("dir-key-published")) { + break; + case "dir-key-published": this.parseDirKeyPublishedLine(line, parts); - } else if (keyword.equals("dir-key-expires")) { + break; + case "dir-key-expires": this.parseDirKeyExpiresLine(line, parts); - } else if (keyword.equals("dir-signing-key")) { + break; + case "dir-signing-key": this.parseDirSigningKeyLine(line, parts); nextCrypto = "dir-signing-key"; - } else if (keyword.equals("dir-key-crosscert")) { + break; + case "dir-key-crosscert": this.parseDirKeyCrosscertLine(line, parts); nextCrypto = "dir-key-crosscert"; - } else if (keyword.equals("dir-key-certification")) { + break; + case "dir-key-certification": this.parseDirKeyCertificationLine(line, parts); nextCrypto = "dir-key-certification"; - } else if (line.startsWith("-----BEGIN")) { - crypto = new StringBuilder(); - crypto.append(line + "\n"); - } else if (line.startsWith("-----END")) { - crypto.append(line + "\n"); - String cryptoString = crypto.toString(); - crypto = null; - if (nextCrypto.equals("dir-identity-key")) { - this.dirIdentityKey = cryptoString; - } else if (nextCrypto.equals("dir-signing-key")) { - this.dirSigningKey = cryptoString; - } else if (nextCrypto.equals("dir-key-crosscert")) { - this.dirKeyCrosscert = cryptoString; - } else if (nextCrypto.equals("dir-key-certification")) { - this.dirKeyCertification = cryptoString; - } else { - throw new DescriptorParseException("Unrecognized crypto " - + "block in directory key certificate."); - } - nextCrypto = null; - } else if (crypto != null) { - crypto.append(line + "\n"); - } else { - if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" - + line + "' in directory key certificate."); + break; + default: + if (line.startsWith("-----BEGIN")) { + crypto = new StringBuilder(); + crypto.append(line + "\n"); + } else if (line.startsWith("-----END")) { + crypto.append(line + "\n"); + String cryptoString = crypto.toString(); + crypto = null; + switch (nextCrypto) { + case "dir-identity-key": + this.dirIdentityKey = cryptoString; + break; + case "dir-signing-key": + this.dirSigningKey = cryptoString; + break; + case "dir-key-crosscert": + this.dirKeyCrosscert = cryptoString; + break; + case "dir-key-certification": + this.dirKeyCertification = cryptoString; + break; + default: + throw new DescriptorParseException("Unrecognized crypto " + + "block in directory key certificate."); + } + nextCrypto = ""; + } else if (crypto != null) { + crypto.append(line + "\n"); } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + + line + "' in directory key certificate."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } diff --git a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java index ff8df51..36ff269 100644 --- a/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java +++ b/src/org/torproject/descriptor/impl/ExtraInfoDescriptorImpl.java @@ -79,7 +79,7 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl private void parseDescriptorBytes() throws DescriptorParseException { Scanner s = new Scanner(new String(this.rawDescriptorBytes)). useDelimiter("\n"); - String nextCrypto = null; + String nextCrypto = ""; List<String> cryptoLines = null; while (s.hasNext()) { String line = s.next(); @@ -87,145 +87,203 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl line.substring("opt ".length()) : line; String[] partsNoOpt = lineNoOpt.split("[ \t]+"); String keyword = partsNoOpt[0]; - if (keyword.equals("extra-info")) { + switch (keyword) { + case "extra-info": this.parseExtraInfoLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("published")) { + break; + case "published": this.parsePublishedLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("read-history")) { + break; + case "read-history": this.parseReadHistoryLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("write-history")) { + break; + case "write-history": this.parseWriteHistoryLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("geoip-db-digest")) { + break; + case "geoip-db-digest": this.parseGeoipDbDigestLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("geoip6-db-digest")) { + break; + case "geoip6-db-digest": this.parseGeoip6DbDigestLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("geoip-start-time")) { + break; + case "geoip-start-time": this.parseGeoipStartTimeLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("geoip-client-origins")) { + break; + case "geoip-client-origins": this.parseGeoipClientOriginsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-stats-end")) { + break; + case "dirreq-stats-end": this.parseDirreqStatsEndLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v2-ips")) { + break; + case "dirreq-v2-ips": this.parseDirreqV2IpsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v3-ips")) { + break; + case "dirreq-v3-ips": this.parseDirreqV3IpsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v2-reqs")) { + break; + case "dirreq-v2-reqs": this.parseDirreqV2ReqsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v3-reqs")) { + break; + case "dirreq-v3-reqs": this.parseDirreqV3ReqsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v2-share")) { + break; + case "dirreq-v2-share": this.parseDirreqV2ShareLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v3-share")) { + break; + case "dirreq-v3-share": this.parseDirreqV3ShareLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v2-resp")) { + break; + case "dirreq-v2-resp": this.parseDirreqV2RespLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v3-resp")) { + break; + case "dirreq-v3-resp": this.parseDirreqV3RespLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v2-direct-dl")) { + break; + case "dirreq-v2-direct-dl": this.parseDirreqV2DirectDlLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v3-direct-dl")) { + break; + case "dirreq-v3-direct-dl": this.parseDirreqV3DirectDlLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v2-tunneled-dl")) { + break; + case "dirreq-v2-tunneled-dl": this.parseDirreqV2TunneledDlLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-v3-tunneled-dl")) { + break; + case "dirreq-v3-tunneled-dl": this.parseDirreqV3TunneledDlLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-read-history")) { + break; + case "dirreq-read-history": this.parseDirreqReadHistoryLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dirreq-write-history")) { + break; + case "dirreq-write-history": this.parseDirreqWriteHistoryLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("entry-stats-end")) { + break; + case "entry-stats-end": this.parseEntryStatsEndLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("entry-ips")) { + break; + case "entry-ips": this.parseEntryIpsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("cell-stats-end")) { + break; + case "cell-stats-end": this.parseCellStatsEndLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("cell-processed-cells")) { + break; + case "cell-processed-cells": this.parseCellProcessedCellsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("cell-queued-cells")) { + break; + case "cell-queued-cells": this.parseCellQueuedCellsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("cell-time-in-queue")) { + break; + case "cell-time-in-queue": this.parseCellTimeInQueueLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("cell-circuits-per-decile")) { + break; + case "cell-circuits-per-decile": this.parseCellCircuitsPerDecileLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("conn-bi-direct")) { + break; + case "conn-bi-direct": this.parseConnBiDirectLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("exit-stats-end")) { + break; + case "exit-stats-end": this.parseExitStatsEndLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("exit-kibibytes-written")) { + break; + case "exit-kibibytes-written": this.parseExitKibibytesWrittenLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("exit-kibibytes-read")) { + break; + case "exit-kibibytes-read": this.parseExitKibibytesReadLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("exit-streams-opened")) { + break; + case "exit-streams-opened": this.parseExitStreamsOpenedLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("bridge-stats-end")) { + break; + case "bridge-stats-end": this.parseBridgeStatsEndLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("bridge-ips")) { + break; + case "bridge-ips": this.parseBridgeStatsIpsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("bridge-ip-versions")) { + break; + case "bridge-ip-versions": this.parseBridgeIpVersionsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("bridge-ip-transports")) { + break; + case "bridge-ip-transports": this.parseBridgeIpTransportsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("transport")) { + break; + case "transport": this.parseTransportLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("hidserv-stats-end")) { + break; + case "hidserv-stats-end": this.parseHidservStatsEndLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("hidserv-rend-relayed-cells")) { + break; + case "hidserv-rend-relayed-cells": this.parseHidservRendRelayedCellsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("hidserv-dir-onions-seen")) { + break; + case "hidserv-dir-onions-seen": this.parseHidservDirOnionsSeenLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("identity-ed25519")) { + break; + case "identity-ed25519": this.parseIdentityEd25519Line(line, lineNoOpt, partsNoOpt); nextCrypto = "identity-ed25519"; - } else if (keyword.equals("master-key-ed25519")) { + break; + case "master-key-ed25519": this.parseMasterKeyEd25519Line(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("router-sig-ed25519")) { + break; + case "router-sig-ed25519": this.parseRouterSigEd25519Line(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("router-signature")) { + break; + case "router-signature": this.parseRouterSignatureLine(line, lineNoOpt, partsNoOpt); nextCrypto = "router-signature"; - } else if (keyword.equals("router-digest")) { + break; + case "router-digest": this.parseRouterDigestLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("router-digest-sha256")) { + break; + case "router-digest-sha256": this.parseRouterDigestSha256Line(line, lineNoOpt, partsNoOpt); - } else if (line.startsWith("-----BEGIN")) { - cryptoLines = new ArrayList<>(); - cryptoLines.add(line); - } else if (line.startsWith("-----END")) { - cryptoLines.add(line); - StringBuilder sb = new StringBuilder(); - for (String cryptoLine : cryptoLines) { - sb.append("\n" + cryptoLine); - } - String cryptoString = sb.toString().substring(1); - if ("router-signature".equals(nextCrypto)) { - this.routerSignature = cryptoString; - } else if ("identity-ed25519".equals(nextCrypto)) { - this.identityEd25519 = cryptoString; - this.parseIdentityEd25519CryptoBlock(cryptoString); - } else if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized crypto " - + "block '" + cryptoString + "' in extra-info descriptor."); - } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + break; + default: + if (line.startsWith("-----BEGIN")) { + cryptoLines = new ArrayList<>(); + cryptoLines.add(line); + } else if (line.startsWith("-----END")) { + cryptoLines.add(line); + StringBuilder sb = new StringBuilder(); + for (String cryptoLine : cryptoLines) { + sb.append("\n" + cryptoLine); } - this.unrecognizedLines.addAll(cryptoLines); - } - cryptoLines = null; - nextCrypto = null; - } else if (cryptoLines != null) { - cryptoLines.add(line); - } else { - ParseHelper.parseKeyword(line, partsNoOpt[0]); - if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" - + line + "' in extra-info descriptor."); + String cryptoString = sb.toString().substring(1); + switch (nextCrypto) { + case "router-signature": + this.routerSignature = cryptoString; + break; + case "identity-ed25519": + this.identityEd25519 = cryptoString; + this.parseIdentityEd25519CryptoBlock(cryptoString); + break; + default: + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized crypto " + + "block '" + cryptoString + "' in extra-info " + + "descriptor."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.addAll(cryptoLines); + } + } + cryptoLines = null; + nextCrypto = ""; + } else if (cryptoLines != null) { + cryptoLines.add(line); } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + ParseHelper.parseKeyword(line, partsNoOpt[0]); + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + + line + "' in extra-info descriptor."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } diff --git a/src/org/torproject/descriptor/impl/MicrodescriptorImpl.java b/src/org/torproject/descriptor/impl/MicrodescriptorImpl.java index 3e7f466..a70493d 100644 --- a/src/org/torproject/descriptor/impl/MicrodescriptorImpl.java +++ b/src/org/torproject/descriptor/impl/MicrodescriptorImpl.java @@ -57,7 +57,7 @@ public class MicrodescriptorImpl extends DescriptorImpl private void parseDescriptorBytes() throws DescriptorParseException { Scanner s = new Scanner(new String(this.rawDescriptorBytes)). useDelimiter("\n"); - String nextCrypto = null; + String nextCrypto = ""; StringBuilder crypto = null; while (s.hasNext()) { String line = s.next(); @@ -66,47 +66,57 @@ public class MicrodescriptorImpl extends DescriptorImpl } String[] parts = line.split("[ \t]+"); String keyword = parts[0]; - if (keyword.equals("onion-key")) { + switch (keyword) { + case "onion-key": this.parseOnionKeyLine(line, parts); nextCrypto = "onion-key"; - } else if (keyword.equals("ntor-onion-key")) { + break; + case "ntor-onion-key": this.parseNtorOnionKeyLine(line, parts); - } else if (keyword.equals("a")) { + break; + case "a": this.parseALine(line, parts); - } else if (keyword.equals("family")) { + break; + case "family": this.parseFamilyLine(line, parts); - } else if (keyword.equals("p")) { + break; + case "p": this.parsePLine(line, parts); - } else if (keyword.equals("p6")) { + break; + case "p6": this.parseP6Line(line, parts); - } else if (keyword.equals("id")) { + break; + case "id": this.parseIdLine(line, parts); - } else if (line.startsWith("-----BEGIN")) { - crypto = new StringBuilder(); - crypto.append(line + "\n"); - } else if (line.startsWith("-----END")) { - crypto.append(line + "\n"); - String cryptoString = crypto.toString(); - crypto = null; - if (nextCrypto.equals("onion-key")) { - this.onionKey = cryptoString; - } else { - throw new DescriptorParseException("Unrecognized crypto " - + "block in microdescriptor."); - } - nextCrypto = null; - } else if (crypto != null) { - crypto.append(line + "\n"); - } else { - ParseHelper.parseKeyword(line, parts[0]); - if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" - + line + "' in microdescriptor."); + break; + default: + if (line.startsWith("-----BEGIN")) { + crypto = new StringBuilder(); + crypto.append(line + "\n"); + } else if (line.startsWith("-----END")) { + crypto.append(line + "\n"); + String cryptoString = crypto.toString(); + crypto = null; + if (nextCrypto.equals("onion-key")) { + this.onionKey = cryptoString; + } else { + throw new DescriptorParseException("Unrecognized crypto " + + "block in microdescriptor."); + } + nextCrypto = ""; + } else if (crypto != null) { + crypto.append(line + "\n"); } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + ParseHelper.parseKeyword(line, parts[0]); + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + + line + "' in microdescriptor."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } diff --git a/src/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java b/src/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java index 4f2b69b..c5f0704 100644 --- a/src/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java +++ b/src/org/torproject/descriptor/impl/NetworkStatusEntryImpl.java @@ -79,28 +79,38 @@ public class NetworkStatusEntryImpl implements NetworkStatusEntry { String[] parts = !line.startsWith("opt ") ? line.split("[ \t]+") : line.substring("opt ".length()).split("[ \t]+"); String keyword = parts[0]; - if (keyword.equals("a")) { + switch (keyword) { + case "a": this.parseALine(line, parts); - } else if (keyword.equals("s")) { + break; + case "s": this.parseSLine(line, parts); - } else if (keyword.equals("v")) { + break; + case "v": this.parseVLine(line, parts); - } else if (keyword.equals("w")) { + break; + case "w": this.parseWLine(line, parts); - } else if (keyword.equals("p")) { + break; + case "p": this.parsePLine(line, parts); - } else if (keyword.equals("m")) { + break; + case "m": this.parseMLine(line, parts); - } else if (keyword.equals("id")) { + break; + case "id": this.parseIdLine(line, parts); - } else if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" + line - + "' in status entry."); - } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + break; + default: + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + line + + "' in status entry."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } diff --git a/src/org/torproject/descriptor/impl/RelayDirectoryImpl.java b/src/org/torproject/descriptor/impl/RelayDirectoryImpl.java index 0b82328..4d583aa 100644 --- a/src/org/torproject/descriptor/impl/RelayDirectoryImpl.java +++ b/src/org/torproject/descriptor/impl/RelayDirectoryImpl.java @@ -189,7 +189,7 @@ public class RelayDirectoryImpl extends DescriptorImpl private void parseHeader(byte[] headerBytes) throws DescriptorParseException { Scanner s = new Scanner(new String(headerBytes)).useDelimiter("\n"); - String publishedLine = null, nextCrypto = null, + String publishedLine = null, nextCrypto = "", runningRoutersLine = null, routerStatusLine = null; StringBuilder crypto = null; while (s.hasNext()) { @@ -201,9 +201,11 @@ public class RelayDirectoryImpl extends DescriptorImpl line.substring("opt ".length()) : line; String[] partsNoOpt = lineNoOpt.split("[ \t]+"); String keyword = partsNoOpt[0]; - if (keyword.equals("signed-directory")) { + switch (keyword) { + case "signed-directory": this.parseSignedDirectoryLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("published")) { + break; + case "published": if (publishedLine != null) { throw new DescriptorParseException("Keyword 'published' is " + "contained more than once, but must be contained exactly " @@ -211,41 +213,48 @@ public class RelayDirectoryImpl extends DescriptorImpl } else { publishedLine = line; } - } else if (keyword.equals("dir-signing-key")) { + break; + case "dir-signing-key": this.parseDirSigningKeyLine(line, lineNoOpt, partsNoOpt); nextCrypto = "dir-signing-key"; - } else if (keyword.equals("recommended-software")) { + break; + case "recommended-software": this.parseRecommendedSoftwareLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("running-routers")) { + break; + case "running-routers": runningRoutersLine = line; - } else if (keyword.equals("router-status")) { + break; + case "router-status": routerStatusLine = line; - } else if (line.startsWith("-----BEGIN")) { - crypto = new StringBuilder(); - crypto.append(line + "\n"); - } else if (line.startsWith("-----END")) { - crypto.append(line + "\n"); - String cryptoString = crypto.toString(); - crypto = null; - if (nextCrypto.equals("dir-signing-key") && - this.dirSigningKey == null) { - this.dirSigningKey = cryptoString; - } else { - throw new DescriptorParseException("Unrecognized crypto " - + "block in v1 directory."); - } - nextCrypto = null; - } else if (crypto != null) { - crypto.append(line + "\n"); - } else { - if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" - + line + "' in v1 directory."); + break; + default: + if (line.startsWith("-----BEGIN")) { + crypto = new StringBuilder(); + crypto.append(line + "\n"); + } else if (line.startsWith("-----END")) { + crypto.append(line + "\n"); + String cryptoString = crypto.toString(); + crypto = null; + if (nextCrypto.equals("dir-signing-key") && + this.dirSigningKey == null) { + this.dirSigningKey = cryptoString; + } else { + throw new DescriptorParseException("Unrecognized crypto " + + "block in v1 directory."); + } + nextCrypto = ""; + } else if (crypto != null) { + crypto.append(line + "\n"); } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + + line + "' in v1 directory."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } @@ -296,7 +305,7 @@ public class RelayDirectoryImpl extends DescriptorImpl throws DescriptorParseException { Scanner s = new Scanner(new String(directorySignatureBytes)). useDelimiter("\n"); - String nextCrypto = null; + String nextCrypto = ""; StringBuilder crypto = null; while (s.hasNext()) { String line = s.next(); @@ -320,7 +329,7 @@ public class RelayDirectoryImpl extends DescriptorImpl throw new DescriptorParseException("Unrecognized crypto " + "block in v2 network status."); } - nextCrypto = null; + nextCrypto = ""; } else if (crypto != null) { crypto.append(line + "\n"); } else if (this.failUnrecognizedDescriptorLines) { diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java index d92718c..13b9142 100644 --- a/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java +++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusConsensusImpl.java @@ -95,36 +95,50 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl String line = s.next(); String[] parts = line.split("[ \t]+"); String keyword = parts[0]; - if (keyword.equals("network-status-version")) { + switch (keyword) { + case "network-status-version": this.parseNetworkStatusVersionLine(line, parts); - } else if (keyword.equals("vote-status")) { + break; + case "vote-status": this.parseVoteStatusLine(line, parts); - } else if (keyword.equals("consensus-method")) { + break; + case "consensus-method": this.parseConsensusMethodLine(line, parts); - } else if (keyword.equals("valid-after")) { + break; + case "valid-after": this.parseValidAfterLine(line, parts); - } else if (keyword.equals("fresh-until")) { + break; + case "fresh-until": this.parseFreshUntilLine(line, parts); - } else if (keyword.equals("valid-until")) { + break; + case "valid-until": this.parseValidUntilLine(line, parts); - } else if (keyword.equals("voting-delay")) { + break; + case "voting-delay": this.parseVotingDelayLine(line, parts); - } else if (keyword.equals("client-versions")) { + break; + case "client-versions": this.parseClientVersionsLine(line, parts); - } else if (keyword.equals("server-versions")) { + break; + case "server-versions": this.parseServerVersionsLine(line, parts); - } else if (keyword.equals("known-flags")) { + break; + case "known-flags": this.parseKnownFlagsLine(line, parts); - } else if (keyword.equals("params")) { + break; + case "params": this.parseParamsLine(line, parts); - } else if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" + line - + "' in consensus."); - } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + break; + default: + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + line + + "' in consensus."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } @@ -153,17 +167,22 @@ public class RelayNetworkStatusConsensusImpl extends NetworkStatusImpl String line = s.next(); String[] parts = line.split("[ \t]+"); String keyword = parts[0]; - if (keyword.equals("directory-footer")) { - } else if (keyword.equals("bandwidth-weights")) { + switch (keyword) { + case "directory-footer": + break; + case "bandwidth-weights": this.parseBandwidthWeightsLine(line, parts); - } else if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" + line - + "' in consensus."); - } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + break; + default: + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + line + + "' in consensus."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java index c2735e7..a10ed7a 100644 --- a/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java +++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusImpl.java @@ -88,7 +88,7 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl protected void parseHeader(byte[] headerBytes) throws DescriptorParseException { Scanner s = new Scanner(new String(headerBytes)).useDelimiter("\n"); - String nextCrypto = null; + String nextCrypto = ""; StringBuilder crypto = null; while (s.hasNext()) { String line = s.next(); @@ -97,49 +97,61 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl } String[] parts = line.split("[ \t]+"); String keyword = parts[0]; - if (keyword.equals("network-status-version")) { + switch (keyword) { + case "network-status-version": this.parseNetworkStatusVersionLine(line, parts); - } else if (keyword.equals("dir-source")) { + break; + case "dir-source": this.parseDirSourceLine(line, parts); - } else if (keyword.equals("fingerprint")) { + break; + case "fingerprint": this.parseFingerprintLine(line, parts); - } else if (keyword.equals("contact")) { + break; + case "contact": this.parseContactLine(line, parts); - } else if (keyword.equals("dir-signing-key")) { + break; + case "dir-signing-key": this.parseDirSigningKeyLine(line, parts); nextCrypto = "dir-signing-key"; - } else if (keyword.equals("client-versions")) { + break; + case "client-versions": this.parseClientVersionsLine(line, parts); - } else if (keyword.equals("server-versions")) { + break; + case "server-versions": this.parseServerVersionsLine(line, parts); - } else if (keyword.equals("published")) { + break; + case "published": this.parsePublishedLine(line, parts); - } else if (keyword.equals("dir-options")) { + break; + case "dir-options": this.parseDirOptionsLine(line, parts); - } else if (line.startsWith("-----BEGIN")) { - crypto = new StringBuilder(); - crypto.append(line + "\n"); - } else if (line.startsWith("-----END")) { - crypto.append(line + "\n"); - String cryptoString = crypto.toString(); - crypto = null; - if (nextCrypto.equals("dir-signing-key")) { - this.dirSigningKey = cryptoString; + break; + default: + if (line.startsWith("-----BEGIN")) { + crypto = new StringBuilder(); + crypto.append(line + "\n"); + } else if (line.startsWith("-----END")) { + crypto.append(line + "\n"); + String cryptoString = crypto.toString(); + crypto = null; + if (nextCrypto.equals("dir-signing-key")) { + this.dirSigningKey = cryptoString; + } else { + throw new DescriptorParseException("Unrecognized crypto " + + "block in v2 network status."); + } + nextCrypto = ""; + } else if (crypto != null) { + crypto.append(line + "\n"); + } else if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + line + + "' in v2 network status."); } else { - throw new DescriptorParseException("Unrecognized crypto " - + "block in v2 network status."); + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - nextCrypto = null; - } else if (crypto != null) { - crypto.append(line + "\n"); - } else if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" + line - + "' in v2 network status."); - } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); - } - this.unrecognizedLines.add(line); } } } @@ -154,7 +166,7 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl throws DescriptorParseException { Scanner s = new Scanner(new String(directorySignatureBytes)). useDelimiter("\n"); - String nextCrypto = null; + String nextCrypto = ""; StringBuilder crypto = null; while (s.hasNext()) { String line = s.next(); @@ -176,7 +188,7 @@ public class RelayNetworkStatusImpl extends NetworkStatusImpl throw new DescriptorParseException("Unrecognized crypto " + "block in v2 network status."); } - nextCrypto = null; + nextCrypto = ""; } else if (crypto != null) { crypto.append(line + "\n"); } else if (this.failUnrecognizedDescriptorLines) { diff --git a/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java b/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java index b8f0412..d74ef65 100644 --- a/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java +++ b/src/org/torproject/descriptor/impl/RelayNetworkStatusVoteImpl.java @@ -79,65 +79,90 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl String line = s.next(); String[] parts = line.split("[ \t]+"); String keyword = parts[0]; - if (keyword.equals("network-status-version")) { + switch (keyword) { + case "network-status-version": this.parseNetworkStatusVersionLine(line, parts); - } else if (keyword.equals("vote-status")) { + break; + case "vote-status": this.parseVoteStatusLine(line, parts); - } else if (keyword.equals("consensus-methods")) { + break; + case "consensus-methods": this.parseConsensusMethodsLine(line, parts); - } else if (keyword.equals("published")) { + break; + case "published": this.parsePublishedLine(line, parts); - } else if (keyword.equals("valid-after")) { + break; + case "valid-after": this.parseValidAfterLine(line, parts); - } else if (keyword.equals("fresh-until")) { + break; + case "fresh-until": this.parseFreshUntilLine(line, parts); - } else if (keyword.equals("valid-until")) { + break; + case "valid-until": this.parseValidUntilLine(line, parts); - } else if (keyword.equals("voting-delay")) { + break; + case "voting-delay": this.parseVotingDelayLine(line, parts); - } else if (keyword.equals("client-versions")) { + break; + case "client-versions": this.parseClientVersionsLine(line, parts); - } else if (keyword.equals("server-versions")) { + break; + case "server-versions": this.parseServerVersionsLine(line, parts); - } else if (keyword.equals("known-flags")) { + break; + case "known-flags": this.parseKnownFlagsLine(line, parts); - } else if (keyword.equals("flag-thresholds")) { + break; + case "flag-thresholds": this.parseFlagThresholdsLine(line, parts); - } else if (keyword.equals("params")) { + break; + case "params": this.parseParamsLine(line, parts); - } else if (keyword.equals("dir-source")) { + break; + case "dir-source": this.parseDirSourceLine(line, parts); - } else if (keyword.equals("contact")) { + break; + case "contact": this.parseContactLine(line, parts); - } else if (keyword.equals("dir-key-certificate-version")) { + break; + case "dir-key-certificate-version": this.parseDirKeyCertificateVersionLine(line, parts); - } else if (keyword.equals("dir-address")) { + break; + case "dir-address": this.parseDirAddressLine(line, parts); - } else if (keyword.equals("fingerprint")) { + break; + case "fingerprint": this.parseFingerprintLine(line, parts); - } else if (keyword.equals("legacy-dir-key")) { + break; + case "legacy-dir-key": this.parseLegacyDirKeyLine(line, parts); - } else if (keyword.equals("dir-key-published")) { + break; + case "dir-key-published": this.parseDirKeyPublished(line, parts); - } else if (keyword.equals("dir-key-expires")) { + break; + case "dir-key-expires": this.parseDirKeyExpiresLine(line, parts); - } else if (keyword.equals("dir-identity-key") || - keyword.equals("dir-signing-key") || - keyword.equals("dir-key-crosscert") || - keyword.equals("dir-key-certification")) { - } else if (line.startsWith("-----BEGIN")) { - skipCrypto = true; - } else if (line.startsWith("-----END")) { - skipCrypto = false; - } else if (!skipCrypto) { - if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" - + line + "' in vote."); - } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + break; + case "dir-identity-key": + case "dir-signing-key": + case "dir-key-crosscert": + case "dir-key-certification": + break; + default: + if (line.startsWith("-----BEGIN")) { + skipCrypto = true; + } else if (line.startsWith("-----END")) { + skipCrypto = false; + } else if (!skipCrypto) { + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + + line + "' in vote."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } @@ -257,27 +282,37 @@ public class RelayNetworkStatusVoteImpl extends NetworkStatusImpl ParseHelper.parseKeyValueStringPairs(line, parts, 1, "="); try { for (Map.Entry<String, String> e : flagThresholds.entrySet()) { - if (e.getKey().equals("stable-uptime")) { + switch (e.getKey()) { + case "stable-uptime": this.stableUptime = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("stable-mtbf")) { + break; + case "stable-mtbf": this.stableMtbf = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("fast-speed")) { + break; + case "fast-speed": this.fastBandwidth = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("guard-wfu")) { + break; + case "guard-wfu": this.guardWfu = Double.parseDouble(e.getValue(). replaceAll("%", "")); - } else if (e.getKey().equals("guard-tk")) { + break; + case "guard-tk": this.guardTk = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("guard-bw-inc-exits")) { + break; + case "guard-bw-inc-exits": this.guardBandwidthIncludingExits = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("guard-bw-exc-exits")) { + break; + case "guard-bw-exc-exits": this.guardBandwidthExcludingExits = Long.parseLong(e.getValue()); - } else if (e.getKey().equals("enough-mtbf")) { + break; + case "enough-mtbf": this.enoughMtbfInfo = Integer.parseInt(e.getValue()); - } else if (e.getKey().equals("ignoring-advertised-bws")) { + break; + case "ignoring-advertised-bws": this.ignoringAdvertisedBws = Integer.parseInt(e.getValue()); + break; } } } catch (NumberFormatException ex) { diff --git a/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java b/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java index ddca784..4ed311e 100644 --- a/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java +++ b/src/org/torproject/descriptor/impl/ServerDescriptorImpl.java @@ -54,7 +54,7 @@ public abstract class ServerDescriptorImpl extends DescriptorImpl private void parseDescriptorBytes() throws DescriptorParseException { Scanner s = new Scanner(new String(this.rawDescriptorBytes)). useDelimiter("\n"); - String nextCrypto = null; + String nextCrypto = ""; List<String> cryptoLines = null; while (s.hasNext()) { String line = s.next(); @@ -65,124 +65,169 @@ public abstract class ServerDescriptorImpl extends DescriptorImpl line.substring("opt ".length()) : line; String[] partsNoOpt = lineNoOpt.split("[ \t]+"); String keyword = partsNoOpt[0]; - if (keyword.equals("router")) { + switch (keyword) { + case "router": this.parseRouterLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("or-address")) { + break; + case "or-address": this.parseOrAddressLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("bandwidth")) { + break; + case "bandwidth": this.parseBandwidthLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("platform")) { + break; + case "platform": this.parsePlatformLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("published")) { + break; + case "published": this.parsePublishedLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("fingerprint")) { + break; + case "fingerprint": this.parseFingerprintLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("hibernating")) { + break; + case "hibernating": this.parseHibernatingLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("uptime")) { + break; + case "uptime": this.parseUptimeLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("onion-key")) { + break; + case "onion-key": this.parseOnionKeyLine(line, lineNoOpt, partsNoOpt); nextCrypto = "onion-key"; - } else if (keyword.equals("signing-key")) { + break; + case "signing-key": this.parseSigningKeyLine(line, lineNoOpt, partsNoOpt); nextCrypto = "signing-key"; - } else if (keyword.equals("accept")) { + break; + case "accept": this.parseAcceptLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("reject")) { + break; + case "reject": this.parseRejectLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("router-signature")) { + break; + case "router-signature": this.parseRouterSignatureLine(line, lineNoOpt, partsNoOpt); nextCrypto = "router-signature"; - } else if (keyword.equals("contact")) { + break; + case "contact": this.parseContactLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("family")) { + break; + case "family": this.parseFamilyLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("read-history")) { + break; + case "read-history": this.parseReadHistoryLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("write-history")) { + break; + case "write-history": this.parseWriteHistoryLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("eventdns")) { + break; + case "eventdns": this.parseEventdnsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("caches-extra-info")) { + break; + case "caches-extra-info": this.parseCachesExtraInfoLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("extra-info-digest")) { + break; + case "extra-info-digest": this.parseExtraInfoDigestLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("hidden-service-dir")) { + break; + case "hidden-service-dir": this.parseHiddenServiceDirLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("protocols")) { + break; + case "protocols": this.parseProtocolsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("allow-single-hop-exits")) { + break; + case "allow-single-hop-exits": this.parseAllowSingleHopExitsLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("dircacheport")) { + break; + case "dircacheport": this.parseDircacheportLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("router-digest")) { + break; + case "router-digest": this.parseRouterDigestLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("router-digest-sha256")) { + break; + case "router-digest-sha256": this.parseRouterDigestSha256Line(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("ipv6-policy")) { + break; + case "ipv6-policy": this.parseIpv6PolicyLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("ntor-onion-key")) { + break; + case "ntor-onion-key": this.parseNtorOnionKeyLine(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("identity-ed25519")) { + break; + case "identity-ed25519": this.parseIdentityEd25519Line(line, lineNoOpt, partsNoOpt); nextCrypto = "identity-ed25519"; - } else if (keyword.equals("master-key-ed25519")) { + break; + case "master-key-ed25519": this.parseMasterKeyEd25519Line(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("router-sig-ed25519")) { + break; + case "router-sig-ed25519": this.parseRouterSigEd25519Line(line, lineNoOpt, partsNoOpt); - } else if (keyword.equals("onion-key-crosscert")) { + break; + case "onion-key-crosscert": this.parseOnionKeyCrosscert(line, lineNoOpt, partsNoOpt); nextCrypto = "onion-key-crosscert"; - } else if (keyword.equals("ntor-onion-key-crosscert")) { + break; + case "ntor-onion-key-crosscert": this.parseNtorOnionKeyCrosscert(line, lineNoOpt, partsNoOpt); nextCrypto = "ntor-onion-key-crosscert"; - } else if (line.startsWith("-----BEGIN")) { - cryptoLines = new ArrayList<>(); - cryptoLines.add(line); - } else if (line.startsWith("-----END")) { - cryptoLines.add(line); - StringBuilder sb = new StringBuilder(); - for (String cryptoLine : cryptoLines) { - sb.append("\n" + cryptoLine); - } - String cryptoString = sb.toString().substring(1); - if ("onion-key".equals(nextCrypto)) { - this.onionKey = cryptoString; - } else if ("signing-key".equals(nextCrypto)) { - this.signingKey = cryptoString; - } else if ("router-signature".equals(nextCrypto)) { - this.routerSignature = cryptoString; - } else if ("identity-ed25519".equals(nextCrypto)) { - this.identityEd25519 = cryptoString; - this.parseIdentityEd25519CryptoBlock(cryptoString); - } else if ("onion-key-crosscert".equals(nextCrypto)) { - this.onionKeyCrosscert = cryptoString; - } else if ("ntor-onion-key-crosscert".equals(nextCrypto)) { - this.ntorOnionKeyCrosscert = cryptoString; - } else if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized crypto " - + "block '" + cryptoString + "' in server descriptor."); - } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + break; + default: + if (line.startsWith("-----BEGIN")) { + cryptoLines = new ArrayList<>(); + cryptoLines.add(line); + } else if (line.startsWith("-----END")) { + cryptoLines.add(line); + StringBuilder sb = new StringBuilder(); + for (String cryptoLine : cryptoLines) { + sb.append("\n" + cryptoLine); } - this.unrecognizedLines.addAll(cryptoLines); - } - cryptoLines = null; - nextCrypto = null; - } else if (cryptoLines != null) { - cryptoLines.add(line); - } else { - ParseHelper.parseKeyword(line, partsNoOpt[0]); - if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized line '" - + line + "' in server descriptor."); + String cryptoString = sb.toString().substring(1); + switch (nextCrypto) { + case "onion-key": + this.onionKey = cryptoString; + break; + case "signing-key": + this.signingKey = cryptoString; + break; + case "router-signature": + this.routerSignature = cryptoString; + break; + case "identity-ed25519": + this.identityEd25519 = cryptoString; + this.parseIdentityEd25519CryptoBlock(cryptoString); + break; + case "onion-key-crosscert": + this.onionKeyCrosscert = cryptoString; + break; + case "ntor-onion-key-crosscert": + this.ntorOnionKeyCrosscert = cryptoString; + break; + default: + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized crypto " + + "block '" + cryptoString + "' in server descriptor."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.addAll(cryptoLines); + } + } + cryptoLines = null; + nextCrypto = ""; + } else if (cryptoLines != null) { + cryptoLines.add(line); } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + ParseHelper.parseKeyword(line, partsNoOpt[0]); + if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized line '" + + line + "' in server descriptor."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } } diff --git a/src/org/torproject/descriptor/impl/TorperfResultImpl.java b/src/org/torproject/descriptor/impl/TorperfResultImpl.java index aad8e32..26e0e4a 100644 --- a/src/org/torproject/descriptor/impl/TorperfResultImpl.java +++ b/src/org/torproject/descriptor/impl/TorperfResultImpl.java @@ -79,60 +79,85 @@ public class TorperfResultImpl extends DescriptorImpl String key = keyValueParts[0]; this.markKeyAsParsed(key, line); String value = keyValueParts[1]; - if (key.equals("SOURCE")) { + switch (key) { + case "SOURCE": this.parseSource(value, keyValue, line); - } else if (key.equals("FILESIZE")) { + break; + case "FILESIZE": this.parseFileSize(value, keyValue, line); - } else if (key.equals("START")) { + break; + case "START": this.parseStart(value, keyValue, line); - } else if (key.equals("SOCKET")) { + break; + case "SOCKET": this.parseSocket(value, keyValue, line); - } else if (key.equals("CONNECT")) { + break; + case "CONNECT": this.parseConnect(value, keyValue, line); - } else if (key.equals("NEGOTIATE")) { + break; + case "NEGOTIATE": this.parseNegotiate(value, keyValue, line); - } else if (key.equals("REQUEST")) { + break; + case "REQUEST": this.parseRequest(value, keyValue, line); - } else if (key.equals("RESPONSE")) { + break; + case "RESPONSE": this.parseResponse(value, keyValue, line); - } else if (key.equals("DATAREQUEST")) { + break; + case "DATAREQUEST": this.parseDataRequest(value, keyValue, line); - } else if (key.equals("DATARESPONSE")) { + break; + case "DATARESPONSE": this.parseDataResponse(value, keyValue, line); - } else if (key.equals("DATACOMPLETE")) { + break; + case "DATACOMPLETE": this.parseDataComplete(value, keyValue, line); - } else if (key.equals("WRITEBYTES")) { + break; + case "WRITEBYTES": this.parseWriteBytes(value, keyValue, line); - } else if (key.equals("READBYTES")) { + break; + case "READBYTES": this.parseReadBytes(value, keyValue, line); - } else if (key.equals("DIDTIMEOUT")) { + break; + case "DIDTIMEOUT": this.parseDidTimeout(value, keyValue, line); - } else if (key.startsWith("DATAPERC")) { - this.parseDataPercentile(value, keyValue, line); - } else if (key.equals("LAUNCH")) { + break; + case "LAUNCH": this.parseLaunch(value, keyValue, line); - } else if (key.equals("USED_AT")) { + break; + case "USED_AT": this.parseUsedAt(value, keyValue, line); - } else if (key.equals("PATH")) { + break; + case "PATH": this.parsePath(value, keyValue, line); - } else if (key.equals("BUILDTIMES")) { + break; + case "BUILDTIMES": this.parseBuildTimes(value, keyValue, line); - } else if (key.equals("TIMEOUT")) { + break; + case "TIMEOUT": this.parseTimeout(value, keyValue, line); - } else if (key.equals("QUANTILE")) { + break; + case "QUANTILE": this.parseQuantile(value, keyValue, line); - } else if (key.equals("CIRC_ID")) { + break; + case "CIRC_ID": this.parseCircId(value, keyValue, line); - } else if (key.equals("USED_BY")) { + break; + case "USED_BY": this.parseUsedBy(value, keyValue, line); - } else if (this.failUnrecognizedDescriptorLines) { - throw new DescriptorParseException("Unrecognized key '" + key - + "' in line '" + line + "'."); - } else { - if (this.unrecognizedLines == null) { - this.unrecognizedLines = new ArrayList<>(); + break; + default: + if (key.startsWith("DATAPERC")) { + this.parseDataPercentile(value, keyValue, line); + } else if (this.failUnrecognizedDescriptorLines) { + throw new DescriptorParseException("Unrecognized key '" + key + + "' in line '" + line + "'."); + } else { + if (this.unrecognizedLines == null) { + this.unrecognizedLines = new ArrayList<>(); + } + this.unrecognizedLines.add(line); } - this.unrecognizedLines.add(line); } } this.checkAllRequiredKeysParsed(line);
participants (1)
-
karsten@torproject.org