Commit a7850a2d authored by Karsten Loesing's avatar Karsten Loesing
Browse files

Parse new ipv6-* lines in extra-info descriptors.

parent b44c6bcc
......@@ -3,6 +3,8 @@
* Medium changes
- Extend Torperf results to provide error codes.
- Parse OnionPerf analysis results format version 3.0.
- Parse new ipv6-{write,read}-history and ipv6-conn-bi-direct
lines in extra-info descriptors.
# Changes in version 2.13.0 - 2020-05-16
......
......@@ -106,6 +106,22 @@ public interface ExtraInfoDescriptor extends Descriptor {
*/
BandwidthHistory getWriteHistory();
/**
* Return the server's history of written IPv6 bytes, or {@code null} if the
* descriptor does not contain a bandwidth history.
*
* @since 2.14.0
*/
BandwidthHistory getIpv6WriteHistory();
/**
* Return the server's history of read IPv6 bytes, or {@code null} if the
* descriptor does not contain a bandwidth history.
*
* @since 2.14.0
*/
BandwidthHistory getIpv6ReadHistory();
/**
* Return a SHA-1 digest of the GeoIP database file used by this server
* to resolve client IP addresses to country codes, encoded as 40
......@@ -419,6 +435,62 @@ public interface ExtraInfoDescriptor extends Descriptor {
*/
int getConnBiDirectBoth();
/**
* Return the time in milliseconds since the epoch when the included
* statistics on bi-directional IPv6 connection usage ended, or -1 if no such
* statistics are included.
*
* @since 2.14.0
*/
long getIpv6ConnBiDirectStatsEndMillis();
/**
* Return the interval length of the included statistics on
* bi-directional IPv6 connection usage in seconds, or -1 if no such
* statistics are included.
*
* @since 2.14.0
*/
long getIpv6ConnBiDirectStatsIntervalLength();
/**
* Return the number of IPv6 connections on which this server read and wrote
* less than 2 KiB/s in a 10-second interval, or -1 if no such
* statistics are included.
*
* @since 2.14.0
*/
int getIpv6ConnBiDirectBelow();
/**
* Return the number of IPv6 connections on which this server read and wrote
* at least 2 KiB/s in a 10-second interval and at least 10 times more
* in read direction than in write direction, or -1 if no such
* statistics are included.
*
* @since 2.14.0
*/
int getIpv6ConnBiDirectRead();
/**
* Return the number of IPv6 connections on which this server read and wrote
* at least 2 KiB/s in a 10-second interval and at least 10 times more
* in write direction than in read direction, or -1 if no such
* statistics are included.
*
* @since 2.14.0
*/
int getIpv6ConnBiDirectWrite();
/**
* Return the number of IPv6 connections on which this server read and wrote
* at least 2 KiB/s in a 10-second interval but not 10 times more in
* either direction, or -1 if no such statistics are included.
*
* @since 2.14.0
*/
int getIpv6ConnBiDirectBoth();
/**
* Return the time in milliseconds since the epoch when the included
* exit statistics interval ended, or -1 if no such statistics are
......
......@@ -97,6 +97,12 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl
case WRITE_HISTORY:
this.parseWriteHistoryLine(line, partsNoOpt);
break;
case IPV6_READ_HISTORY:
this.parseIpv6ReadHistoryLine(line, partsNoOpt);
break;
case IPV6_WRITE_HISTORY:
this.parseIpv6WriteHistoryLine(line, partsNoOpt);
break;
case GEOIP_DB_DIGEST:
this.parseGeoipDbDigestLine(line, partsNoOpt);
break;
......@@ -179,6 +185,9 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl
case CONN_BI_DIRECT:
this.parseConnBiDirectLine(line, partsNoOpt);
break;
case IPV6_CONN_BI_DIRECT:
this.parseIpv6ConnBiDirectLine(line, partsNoOpt);
break;
case EXIT_STATS_END:
this.parseExitStatsEndLine(line, partsNoOpt);
break;
......@@ -314,6 +323,18 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl
partsNoOpt);
}
private void parseIpv6ReadHistoryLine(String line,
String[] partsNoOpt) throws DescriptorParseException {
this.ipv6ReadHistory = new BandwidthHistoryImpl(line,
partsNoOpt);
}
private void parseIpv6WriteHistoryLine(String line,
String[] partsNoOpt) throws DescriptorParseException {
this.ipv6WriteHistory = new BandwidthHistoryImpl(line,
partsNoOpt);
}
private void parseGeoipDbDigestLine(String line,
String[] partsNoOpt) throws DescriptorParseException {
if (partsNoOpt.length < 2) {
......@@ -573,6 +594,24 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl
this.connBiDirectBoth = parsedConnBiDirectStats[3];
}
private void parseIpv6ConnBiDirectLine(String line,
String[] partsNoOpt) throws DescriptorParseException {
long[] parsedStatsEndData = this.parseStatsEndLine(line, partsNoOpt,
6);
this.ipv6ConnBiDirectStatsEndMillis = parsedStatsEndData[0];
this.ipv6ConnBiDirectStatsIntervalLength = parsedStatsEndData[1];
Integer[] parsedIpv6ConnBiDirectStats = ParseHelper
.parseCommaSeparatedIntegerValueList(line, partsNoOpt, 5);
if (parsedIpv6ConnBiDirectStats.length != 4) {
throw new DescriptorParseException("Illegal line '" + line + "' in "
+ "extra-info descriptor.");
}
this.ipv6ConnBiDirectBelow = parsedIpv6ConnBiDirectStats[0];
this.ipv6ConnBiDirectRead = parsedIpv6ConnBiDirectStats[1];
this.ipv6ConnBiDirectWrite = parsedIpv6ConnBiDirectStats[2];
this.ipv6ConnBiDirectBoth = parsedIpv6ConnBiDirectStats[3];
}
private void parseExitStatsEndLine(String line,
String[] partsNoOpt) throws DescriptorParseException {
long[] parsedStatsEndData = this.parseStatsEndLine(line, partsNoOpt,
......@@ -837,6 +876,20 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl
return this.writeHistory;
}
private BandwidthHistory ipv6ReadHistory;
@Override
public BandwidthHistory getIpv6ReadHistory() {
return this.ipv6ReadHistory;
}
private BandwidthHistory ipv6WriteHistory;
@Override
public BandwidthHistory getIpv6WriteHistory() {
return this.ipv6WriteHistory;
}
private String geoipDbDigest;
@Override
......@@ -1082,6 +1135,48 @@ public abstract class ExtraInfoDescriptorImpl extends DescriptorImpl
return this.connBiDirectBoth;
}
private long ipv6ConnBiDirectStatsEndMillis = -1L;
@Override
public long getIpv6ConnBiDirectStatsEndMillis() {
return this.ipv6ConnBiDirectStatsEndMillis;
}
private long ipv6ConnBiDirectStatsIntervalLength = -1L;
@Override
public long getIpv6ConnBiDirectStatsIntervalLength() {
return this.ipv6ConnBiDirectStatsIntervalLength;
}
private int ipv6ConnBiDirectBelow = -1;
@Override
public int getIpv6ConnBiDirectBelow() {
return this.ipv6ConnBiDirectBelow;
}
private int ipv6ConnBiDirectRead = -1;
@Override
public int getIpv6ConnBiDirectRead() {
return this.ipv6ConnBiDirectRead;
}
private int ipv6ConnBiDirectWrite = -1;
@Override
public int getIpv6ConnBiDirectWrite() {
return this.ipv6ConnBiDirectWrite;
}
private int ipv6ConnBiDirectBoth = -1;
@Override
public int getIpv6ConnBiDirectBoth() {
return this.ipv6ConnBiDirectBoth;
}
private long exitStatsEndMillis = -1L;
@Override
......
......@@ -94,7 +94,10 @@ public enum Key {
HIDSERV_STATS_END("hidserv-stats-end"),
ID("id"),
IDENTITY_ED25519("identity-ed25519"),
IPV6_CONN_BI_DIRECT("ipv6-conn-bi-direct"),
IPV6_POLICY("ipv6-policy"),
IPV6_READ_HISTORY("ipv6-read-history"),
IPV6_WRITE_HISTORY("ipv6-write-history"),
KNOWN_FLAGS("known-flags"),
LEGACY_DIR_KEY("legacy-dir-key"),
LEGACY_KEY("legacy-key"),
......
......@@ -75,6 +75,24 @@ public class ExtraInfoDescriptorImplTest {
return db.buildDescriptor();
}
private String ipv6WriteHistoryLine = null;
private static ExtraInfoDescriptor createWithIpv6WriteHistoryLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.ipv6WriteHistoryLine = line;
return db.buildDescriptor();
}
private String ipv6ReadHistoryLine = null;
private static ExtraInfoDescriptor createWithIpv6ReadHistoryLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.ipv6ReadHistoryLine = line;
return db.buildDescriptor();
}
private String dirreqWriteHistoryLine = "dirreq-write-history "
+ "2012-02-11 09:03:39 (900 s) 81281024,64996352,60625920,"
+ "67922944";
......@@ -160,6 +178,15 @@ public class ExtraInfoDescriptorImplTest {
return db.buildDescriptor();
}
private String ipv6ConnBiDirectLine = null;
private static ExtraInfoDescriptor createWithIpv6ConnBiDirectLine(
String line) throws DescriptorParseException {
DescriptorBuilder db = new DescriptorBuilder();
db.ipv6ConnBiDirectLine = line;
return db.buildDescriptor();
}
private String exitStatsLines = null;
private static ExtraInfoDescriptor createWithExitStatsLines(
......@@ -266,6 +293,12 @@ public class ExtraInfoDescriptorImplTest {
if (this.readHistoryLine != null) {
sb.append(this.readHistoryLine).append("\n");
}
if (this.ipv6WriteHistoryLine != null) {
sb.append(this.ipv6WriteHistoryLine).append("\n");
}
if (this.ipv6ReadHistoryLine != null) {
sb.append(this.ipv6ReadHistoryLine).append("\n");
}
if (this.dirreqWriteHistoryLine != null) {
sb.append(this.dirreqWriteHistoryLine).append("\n");
}
......@@ -293,6 +326,9 @@ public class ExtraInfoDescriptorImplTest {
if (this.connBiDirectLine != null) {
sb.append(this.connBiDirectLine).append("\n");
}
if (this.ipv6ConnBiDirectLine != null) {
sb.append(this.ipv6ConnBiDirectLine).append("\n");
}
if (this.exitStatsLines != null) {
sb.append(this.exitStatsLines).append("\n");
}
......@@ -1137,6 +1173,29 @@ public class ExtraInfoDescriptorImplTest {
+ "4707695616,4699666432,4650004480,4489718784");
}
@Test
public void testIpv6WriteHistory()
throws DescriptorParseException {
ExtraInfoDescriptor descriptor = DescriptorBuilder
.createWithIpv6WriteHistoryLine("ipv6-write-history 2020-07-15 "
+ "03:54:50 (86400 s) 1290676224,2538212352,6013477888");
assertNotNull(descriptor.getIpv6WriteHistory());
assertNull(descriptor.getIpv6ReadHistory());
assertEquals(86400L, descriptor.getIpv6WriteHistory().getIntervalLength());
}
@Test
public void testIpv6ReadHistory()
throws DescriptorParseException {
ExtraInfoDescriptor descriptor = DescriptorBuilder
.createWithIpv6ReadHistoryLine("ipv6-read-history 2020-07-15 03:54:50 "
+ "(86400 s) 55123875840,62352131072,69582769152");
assertNull(descriptor.getIpv6WriteHistory());
assertNotNull(descriptor.getIpv6ReadHistory());
assertEquals(3,
descriptor.getIpv6ReadHistory().getBandwidthValues().size());
}
@Test
public void testDirreqWriteHistoryMissingBytesBegin()
throws DescriptorParseException {
......@@ -1724,6 +1783,21 @@ public class ExtraInfoDescriptorImplTest {
+ "2012-02-11 01:59:39 (86400 s) 42173,1591,1310,1744 +1");
}
@Test
public void testIpv6ConnBiDirectValid()
throws DescriptorParseException {
ExtraInfoDescriptor descriptor = DescriptorBuilder
.createWithIpv6ConnBiDirectLine("ipv6-conn-bi-direct 2020-02-11 "
+ "01:59:39 (86400 s) 42173,1591,1310,1744");
assertEquals(1581386379000L,
descriptor.getIpv6ConnBiDirectStatsEndMillis());
assertEquals(86400L, descriptor.getIpv6ConnBiDirectStatsIntervalLength());
assertEquals(42173, descriptor.getIpv6ConnBiDirectBelow());
assertEquals(1591, descriptor.getIpv6ConnBiDirectRead());
assertEquals(1310, descriptor.getIpv6ConnBiDirectWrite());
assertEquals(1744, descriptor.getIpv6ConnBiDirectBoth());
}
@Test
public void testExitStatsValid() throws DescriptorParseException {
ExtraInfoDescriptor descriptor = ExitStatsBuilder
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment