From 6e2292354a9ecff1480da3ca330e2c207ad22196 Mon Sep 17 00:00:00 2001 From: zzz <zzz@i2pmail.org> Date: Tue, 23 Feb 2021 10:43:32 -0500 Subject: [PATCH] Build: More prep for different release and API versions Use API version as manifest Specification-Version Use API version in I2CP Reduce sybil penalty for version and banlist --- apps/jetty/build.xml | 6 ++-- apps/ministreaming/java/build.xml | 6 ++-- apps/streaming/java/build.xml | 6 ++-- build.xml | 36 ++++++++++++++++++- core/java/build.xml | 10 +++--- core/java/src/net/i2p/CoreVersion.java | 12 +++++-- .../net/i2p/client/impl/I2PSessionImpl.java | 4 +-- .../net/i2p/client/impl/I2PSimpleSession.java | 4 +-- router/java/build.xml | 10 +++--- .../net/i2p/router/client/ClientManager.java | 2 +- .../src/net/i2p/router/sybil/Analysis.java | 11 ++++-- 11 files changed, 77 insertions(+), 30 deletions(-) diff --git a/apps/jetty/build.xml b/apps/jetty/build.xml index 3e24fad189..2cce85311f 100644 --- a/apps/jetty/build.xml +++ b/apps/jetty/build.xml @@ -545,7 +545,7 @@ <jar destfile="./build/servlet-i2p-${release.number}.jar" basedir="./build/obj" includes="net/i2p/servlet/filters/*.class" > <manifest> <attribute name="Specification-Title" value="I2P Servlet classes" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Servlet classes" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -609,7 +609,7 @@ <fileset dir="./build/servlet-i2p-javadoc" /> <manifest> <attribute name="Specification-Title" value="I2P Servlet classes" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Servlet classes" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -626,7 +626,7 @@ <fileset dir="./java/src" includes="net/i2p/servlet/filters/**" /> <manifest> <attribute name="Specification-Title" value="I2P Servlet classes" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Servlet classes" /> <attribute name="Implementation-Version" value="${full.version}" /> diff --git a/apps/ministreaming/java/build.xml b/apps/ministreaming/java/build.xml index 63b8ff54d4..c7224b3ba7 100644 --- a/apps/ministreaming/java/build.xml +++ b/apps/ministreaming/java/build.xml @@ -84,7 +84,7 @@ <manifest> <attribute name="${manifest.classpath.name}" value="i2p.jar streaming.jar" /> <attribute name="Specification-Title" value="I2P Streaming API" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Streaming API" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -193,7 +193,7 @@ <fileset dir="./build/javadoc" /> <manifest> <attribute name="Specification-Title" value="I2P Streaming API" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Streaming API" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -209,7 +209,7 @@ <fileset dir="./src" /> <manifest> <attribute name="Specification-Title" value="I2P Streaming API" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Streaming API" /> <attribute name="Implementation-Version" value="${full.version}" /> diff --git a/apps/streaming/java/build.xml b/apps/streaming/java/build.xml index a6e27f945a..914867ae93 100644 --- a/apps/streaming/java/build.xml +++ b/apps/streaming/java/build.xml @@ -210,7 +210,7 @@ <jar destfile="./build/streaming.jar" basedir="./build/obj" includes="**/*.class" > <manifest> <attribute name="Specification-Title" value="I2P Streaming Implementation" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Streaming Implementation" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -282,7 +282,7 @@ <fileset dir="./build/javadoc" /> <manifest> <attribute name="Specification-Title" value="I2P Streaming Implementation" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Streaming Implementation" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -299,7 +299,7 @@ <fileset dir="./src" /> <manifest> <attribute name="Specification-Title" value="I2P Streaming Implementation" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Streaming Implementation" /> <attribute name="Implementation-Version" value="${full.version}" /> diff --git a/build.xml b/build.xml index bfce629f0c..19e66aa236 100644 --- a/build.xml +++ b/build.xml @@ -1085,6 +1085,7 @@ <echo message="Warning, javadoc embeds timestamps in the output, run with 'TZ=UTC ant javadoc' if you plan to distribute" /> </target> + <!-- sets release.number and api.version --> <target name="getReleaseNumber"> <loadfile srcfile="core/java/src/net/i2p/CoreVersion.java" property="release.number"> <filterchain> @@ -1098,8 +1099,41 @@ <trim/> </filterchain> </loadfile> + <loadfile srcfile="core/java/src/net/i2p/CoreVersion.java" property="api.version"> + <filterchain> + <linecontains> + <contains value="public final static String PUBLISHED_VERSION"/> + </linecontains> + <tokenfilter> + <replaceregex pattern='.*"([^"]+)";' replace="\1" flags="gi" /> + </tokenfilter> + <striplinebreaks/> + <trim/> + </filterchain> + </loadfile> <property name="release.number" value="unknown" /> - <echo message="Release number is ${release.number}" /> + <property name="api.version" value="unknown" /> + <echo message="Release number: ${release.number}" /> + <echo message="API version: ${api.version}" /> + <fail message="Bad API version, must start with 0.9." > + <condition> + <not> + <matches pattern="^0\.9\." string="${api.version}" /> + </not> + </condition> + </fail> + <fail message="Release number / API version mismatch" > + <condition> + <and> + <not> + <equals arg1="${release.number}" arg2="${api.version}"/> + </not> + <not> + <matches pattern="^1\." string="${release.number}" /> + </not> + </and> + </condition> + </fail> </target> <target name="getBuildNumber"> diff --git a/core/java/build.xml b/core/java/build.xml index 4bb8bd6b2c..2b02912f30 100644 --- a/core/java/build.xml +++ b/core/java/build.xml @@ -120,7 +120,7 @@ <manifest> <attribute name="${manifest.classpath.name}" value="${gettext.jar} ${getopt.jar} ${httpclient.jar}" /> <attribute name="Specification-Title" value="I2P Core API" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Core API" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -228,7 +228,7 @@ <fileset dir="./build/javadoc" /> <manifest> <attribute name="Specification-Title" value="I2P Core API" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Core API" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -245,7 +245,7 @@ <fileset dir="./src" /> <manifest> <attribute name="Specification-Title" value="I2P Core API" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Core API" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -342,7 +342,7 @@ <manifest> <attribute name="${manifest.classpath.name}" value="${gettext.jar} ${getopt.jar} ${httpclient.jar}" /> <attribute name="Specification-Title" value="I2P Core API" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Core API" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -368,7 +368,7 @@ <manifest> <attribute name="${manifest.classpath.name}" value="${gettext.jar} ${getopt.jar} ${httpclient.jar}" /> <attribute name="Specification-Title" value="I2P Core API" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Core API" /> <attribute name="Implementation-Version" value="${full.version}" /> diff --git a/core/java/src/net/i2p/CoreVersion.java b/core/java/src/net/i2p/CoreVersion.java index 4687ffad2c..7f851b27a4 100644 --- a/core/java/src/net/i2p/CoreVersion.java +++ b/core/java/src/net/i2p/CoreVersion.java @@ -18,11 +18,13 @@ package net.i2p; public class CoreVersion { /** deprecated */ - public final static String ID = "Monotone"; + public final static String ID = "Git"; /** * The version used when checking for router updates, * and exchanged between router and client over I2CP. + * This is the marketing and user-visible version. + * * If we ever need a point release for a specific * architecture only, append ".1" to VERSION * and leave PUBLISHED_VERSION unchanged. @@ -33,6 +35,11 @@ public class CoreVersion { /** * The version published in the netdb via StatisticsManager. + * This is the API version. + * It must not go to 1.x for several years, because through + * 0.9.49, the Sybil analyzer blocked releases that didn't + * start with "0.9." + * * If we ever need a point release for a specific * architecture only, append ".1" to VERSION * and leave PUBLISHED_VERSION unchanged. @@ -41,7 +48,7 @@ public class CoreVersion { * * @since 0.9.46 */ - public final static String PUBLISHED_VERSION = VERSION; + public final static String PUBLISHED_VERSION = "0.9.49"; /** * For Vuze. @@ -54,6 +61,7 @@ public class CoreVersion { public static void main(String args[]) { System.out.println("I2P Core version: " + VERSION); + System.out.println("I2P API version: " + PUBLISHED_VERSION); System.out.println("ID: " + ID); } } diff --git a/core/java/src/net/i2p/client/impl/I2PSessionImpl.java b/core/java/src/net/i2p/client/impl/I2PSessionImpl.java index cb4190d6c9..5d902c302f 100644 --- a/core/java/src/net/i2p/client/impl/I2PSessionImpl.java +++ b/core/java/src/net/i2p/client/impl/I2PSessionImpl.java @@ -769,7 +769,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 auth.setProperty(I2PClient.PROP_USER, _options.getProperty(I2PClient.PROP_USER)); auth.setProperty(I2PClient.PROP_PW, _options.getProperty(I2PClient.PROP_PW)); } - sendMessage_unchecked(new GetDateMessage(CoreVersion.VERSION, auth)); + sendMessage_unchecked(new GetDateMessage(CoreVersion.PUBLISHED_VERSION, auth)); waitForDate(); if (_log.shouldLog(Log.DEBUG)) _log.debug(getPrefix() + "Before producer.connect()"); @@ -1880,7 +1880,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 */ public String getRouterVersion() { if (_context.isRouterContext()) - return CoreVersion.VERSION; + return CoreVersion.PUBLISHED_VERSION; return _routerVersion; } diff --git a/core/java/src/net/i2p/client/impl/I2PSimpleSession.java b/core/java/src/net/i2p/client/impl/I2PSimpleSession.java index 3c332ae0ad..ade2afbe90 100644 --- a/core/java/src/net/i2p/client/impl/I2PSimpleSession.java +++ b/core/java/src/net/i2p/client/impl/I2PSimpleSession.java @@ -123,11 +123,11 @@ public class I2PSimpleSession extends I2PSessionImpl2 { Properties auth = new OrderedProperties(); auth.setProperty(I2PClient.PROP_USER, opts.getProperty(I2PClient.PROP_USER)); auth.setProperty(I2PClient.PROP_PW, opts.getProperty(I2PClient.PROP_PW)); - sendMessage_unchecked(new GetDateMessage(CoreVersion.VERSION, auth)); + sendMessage_unchecked(new GetDateMessage(CoreVersion.PUBLISHED_VERSION, auth)); } else { // we must now send a GetDate even in SimpleSession, or we won't know // what version we are talking with and cannot use HostLookup - sendMessage_unchecked(new GetDateMessage(CoreVersion.VERSION)); + sendMessage_unchecked(new GetDateMessage(CoreVersion.PUBLISHED_VERSION)); } waitForDate(); } diff --git a/router/java/build.xml b/router/java/build.xml index 8ff50285ea..22133cb461 100644 --- a/router/java/build.xml +++ b/router/java/build.xml @@ -79,7 +79,7 @@ <!-- so people with very old wrapper.config files will still work with Jetty 6 --> <attribute name="${manifest.classpath.name}" value="i2p.jar addressbook.jar jetty-i2p.jar jetty-rewrite-handler.jar jetty-start.jar jetty-util.jar" /> <attribute name="Specification-Title" value="I2P Router" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Router" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -189,7 +189,7 @@ <fileset dir="./build/javadoc" /> <manifest> <attribute name="Specification-Title" value="I2P Router" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Router" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -206,7 +206,7 @@ <fileset dir="./src" /> <manifest> <attribute name="Specification-Title" value="I2P Router" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Router" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -300,7 +300,7 @@ <manifest> <attribute name="${manifest.classpath.name}" value="i2p.jar" /> <attribute name="Specification-Title" value="I2P Router" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Router" /> <attribute name="Implementation-Version" value="${full.version}" /> @@ -320,7 +320,7 @@ <manifest> <attribute name="${manifest.classpath.name}" value="i2p.jar" /> <attribute name="Specification-Title" value="I2P Router" /> - <attribute name="Specification-Version" value="${release.number}" /> + <attribute name="Specification-Version" value="${api.version}" /> <attribute name="Specification-Vendor" value="The I2P Project https://geti2p.net/" /> <attribute name="Implementation-Title" value="I2P Java Router" /> <attribute name="Implementation-Version" value="${full.version}" /> diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java index fc94b17b8b..b4757d0320 100644 --- a/router/java/src/net/i2p/router/client/ClientManager.java +++ b/router/java/src/net/i2p/router/client/ClientManager.java @@ -835,7 +835,7 @@ class ClientManager { try { // only send version if the client can handle it (0.8.7 or greater) runner.doSend(new SetDateMessage(runner.getClientVersion() != null ? - CoreVersion.VERSION : null)); + CoreVersion.PUBLISHED_VERSION : null)); } catch (I2CPMessageException ime) {} } if (_isStarted) diff --git a/router/java/src/net/i2p/router/sybil/Analysis.java b/router/java/src/net/i2p/router/sybil/Analysis.java index c3f86ae190..a8e655e270 100644 --- a/router/java/src/net/i2p/router/sybil/Analysis.java +++ b/router/java/src/net/i2p/router/sybil/Analysis.java @@ -89,10 +89,12 @@ public class Analysis extends JobImpl implements RouterApp { private static final double PAIR_DISTANCE_FACTOR = 2.0; private static final double OUR_KEY_FACTOR = 4.0; private static final double VERSION_FACTOR = 1.0; - private static final double POINTS_BAD_VERSION = 50.0; + private static final double POINTS_BAD_VERSION = 20.0; private static final double POINTS_UNREACHABLE = 4.0; private static final double POINTS_NEW = 4.0; - private static final double POINTS_BANLIST = 25.0; + // since we're blocking by default now, don't make this too high, + // so we don't always turn a temporary block into a permanent one. + private static final double POINTS_BANLIST = 10.0; public static final boolean DEFAULT_BLOCK = true; public static final double DEFAULT_BLOCK_THRESHOLD = 50.0; public static final long DEFAULT_BLOCK_TIME = 7*24*60*60*1000L; @@ -775,6 +777,7 @@ public class Analysis extends JobImpl implements RouterApp { RouterInfo us = _context.router().getRouterInfo(); if (us == null) return; String ourVer = us.getVersion(); + // TODO do the math once we hit version 1.0.0 if (!ourVer.startsWith("0.9.")) return; ourVer = ourVer.substring(4); int dot = ourVer.indexOf('.'); @@ -793,7 +796,9 @@ public class Analysis extends JobImpl implements RouterApp { addPoints(points, h, POINTS_NONFF, "Non-floodfill"); String hisFullVer = info.getVersion(); if (!hisFullVer.startsWith("0.9.")) { - addPoints(points, h, POINTS_BAD_VERSION, "Strange version " + DataHelper.escapeHTML(hisFullVer)); + if (!hisFullVer.startsWith("1.")) + addPoints(points, h, POINTS_BAD_VERSION, "Strange version " + DataHelper.escapeHTML(hisFullVer)); + // TODO do the math once we hit version 1.0.0 continue; } String hisVer = hisFullVer.substring(4); -- GitLab