From 42fa23017ff7c1b74cf9905491598272eab0b4d9 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Thu, 1 Feb 2018 14:51:49 +0000
Subject: [PATCH] NetDB: Increase min floodfill version

---
 .../kademlia/FloodfillVerifyStoreJob.java     |  5 ++--
 .../kademlia/IterativeSearchJob.java          |  5 +++-
 .../router/networkdb/kademlia/StoreJob.java   | 26 ++++++++++++++++++-
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillVerifyStoreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillVerifyStoreJob.java
index d0f94131cc..a2b8b4d5c0 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillVerifyStoreJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillVerifyStoreJob.java
@@ -194,7 +194,8 @@ class FloodfillVerifyStoreJob extends JobImpl {
                     break;
                 Hash peer = peers.get(0);
                 RouterInfo ri = _facade.lookupRouterInfoLocally(peer);
-                if (ri != null && StoreJob.supportsCert(ri, keyCert)) {
+                //if (ri != null && StoreJob.supportsCert(ri, keyCert)) {
+                if (ri != null && StoreJob.shouldStoreTo(ri)) {
                     Set<String> peerIPs = new MaskedIPSet(getContext(), ri, IP_CLOSE_BYTES);
                     if (!_ipSet.containsAny(peerIPs)) {
                         _ipSet.addAll(peerIPs);
@@ -205,7 +206,7 @@ class FloodfillVerifyStoreJob extends JobImpl {
                     }
                 } else {
                     if (_log.shouldLog(Log.INFO))
-                        _log.info(getJobId() + ": Skipping verify w/ router that doesn't support key certs " + peer);
+                        _log.info(getJobId() + ": Skipping verify w/ router that is too old " + peer);
                 }
                 _ignore.add(peer);
             }
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java
index 01ce558a29..4e500ac5f9 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java
@@ -120,6 +120,9 @@ public class IterativeSearchJob extends FloodSearchJob {
             !SystemVersion.isApache() && !SystemVersion.isGNU() &&
             NativeBigInteger.isNative();
 
+    //private static final String MIN_QUERY_VERSION = SigType.EdDSA_SHA512_Ed25519.getSupportedSince();
+    private static final String MIN_QUERY_VERSION = StoreJob.MIN_STORE_VERSION;
+
     /**
      *  Lookup using exploratory tunnels
      */
@@ -319,7 +322,7 @@ public class IterativeSearchJob extends FloodSearchJob {
                 // This is also more recent than the version that supports encrypted replies,
                 // so we won't request unencrypted replies anymore either.
                 String v = ri.getVersion();
-                String since = SigType.EdDSA_SHA512_Ed25519.getSupportedSince();
+                String since = MIN_QUERY_VERSION;
                 if (VersionComparator.comp(v, since) < 0) {
                     failed(peer, false);
                     if (_log.shouldLog(Log.WARN))
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java
index b233beaeae..b1453f71d0 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java
@@ -173,6 +173,14 @@ class StoreJob extends JobImpl {
                         _log.info(getJobId() + ": Error selecting closest hash that wasnt a router! " + peer + " : " + ds);
                     _state.addSkipped(peer);
                     skipped++;
+                } else if (!shouldStoreTo((RouterInfo)ds)) {
+                    if (_log.shouldLog(Log.INFO))
+                        _log.info(getJobId() + ": Skipping old router " + peer);
+                    _state.addSkipped(peer);
+                    skipped++;
+/****
+   above shouldStoreTo() check is newer than these two checks, so we're covered
+
                 } else if (_state.getData().getType() == DatabaseEntry.KEY_TYPE_LEASESET &&
                            !supportsCert((RouterInfo)ds,
                                          ((LeaseSet)_state.getData()).getDestination().getCertificate())) {
@@ -187,6 +195,7 @@ class StoreJob extends JobImpl {
                         _log.info(getJobId() + ": Skipping router that doesn't support big leasesets " + peer);
                     _state.addSkipped(peer);
                     skipped++;
+****/
                 } else {
                     int peerTimeout = _facade.getPeerTimeout(peer);
 
@@ -525,6 +534,7 @@ class StoreJob extends JobImpl {
      * @return true if not a key cert
      * @since 0.9.12
      */
+/****
     public static boolean supportsCert(RouterInfo ri, Certificate cert) {
         if (cert.getCertificateType() != Certificate.CERTIFICATE_TYPE_KEY)
             return true;
@@ -542,15 +552,29 @@ class StoreJob extends JobImpl {
     }
 
     private static final String MIN_BIGLEASESET_VERSION = "0.9";
+****/
 
     /**
      * Does he support more than 6 leasesets?
      * @since 0.9.12
      */
-    public static boolean supportsBigLeaseSets(RouterInfo ri) {
+/****
+    private static boolean supportsBigLeaseSets(RouterInfo ri) {
         String v = ri.getVersion();
         return VersionComparator.comp(v, MIN_BIGLEASESET_VERSION) >= 0;
     }
+****/
+
+    public static final String MIN_STORE_VERSION = "0.9.28";
+
+    /**
+     * Is it too old?
+     * @since 0.9.33
+     */
+    static boolean shouldStoreTo(RouterInfo ri) {
+        String v = ri.getVersion();
+        return VersionComparator.comp(v, MIN_STORE_VERSION) >= 0;
+    }
 
     /**
      * Called after sending a dbStore to a peer successfully, 
-- 
GitLab