From 268a3ee5f5f89a585fb5beb9a065a44fb56dfefa Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 4 Mar 2019 17:38:26 +0000
Subject: [PATCH] NetDB: Fix finding tunnels to publish encrypted LS2 log
 tweaks

---
 .../i2p/router/networkdb/kademlia/StoreJob.java    | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

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 aaedd309bf..66a8eecb7e 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java
@@ -90,7 +90,7 @@ abstract class StoreJob extends JobImpl {
                 _connectMask = ConnectChecker.ANY_V4;
         }
         if (_log.shouldLog(Log.DEBUG))
-            _log.debug(getJobId() + ": New store job for " + data, new Exception("I did it"));
+            _log.debug(getJobId() + ": New store job for\n" + data, new Exception("I did it"));
     }
 
     public String getName() { return "Kademlia NetDb Store";}
@@ -200,7 +200,7 @@ abstract class StoreJob extends JobImpl {
                 } else if (type == DatabaseEntry.KEY_TYPE_ENCRYPTED_LS2 &&
                            !shouldStoreEncLS2To((RouterInfo)ds)) {
                     if (_log.shouldInfo())
-                        _log.info(getJobId() + ": Skipping router that doesn't support LS2 " + peer);
+                        _log.info(getJobId() + ": Skipping router that doesn't support Enc LS2 " + peer);
                     _state.addSkipped(peer);
                     skipped++;
                 } else if (isls2 &&
@@ -447,7 +447,13 @@ abstract class StoreJob extends JobImpl {
      */
     private void sendStoreThroughClient(DatabaseStoreMessage msg, RouterInfo peer, long expiration) {
         long token = 1 + getContext().random().nextLong(I2NPMessage.MAX_ID_VALUE);
-        Hash client = msg.getKey();
+        Hash client;
+        if (msg.getEntry().getType() == DatabaseEntry.KEY_TYPE_ENCRYPTED_LS2) {
+            // get the real client hash
+            client = ((LeaseSet)msg.getEntry()).getDestination().calculateHash();
+        } else {
+            client = msg.getKey();
+        }
 
         Hash to = peer.getIdentity().getHash();
         TunnelInfo replyTunnel = getContext().tunnelManager().selectInboundTunnel(client, to);
@@ -549,7 +555,7 @@ abstract class StoreJob extends JobImpl {
 
     /**
      * Is it new enough?
-     * @since 0.9.38
+     * @since 0.9.39
      */
     static boolean shouldStoreEncLS2To(RouterInfo ri) {
         String v = ri.getVersion();
-- 
GitLab