From 4d4bfa00b3082f3d865c1261c36e3f5352fa8afe Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sat, 1 Jan 2011 14:59:41 +0000
Subject: [PATCH] add dht stub

---
 .../src/org/klomp/snark/I2PSnarkUtil.java     |  9 +-
 .../src/org/klomp/snark/PeerCoordinator.java  |  8 +-
 .../src/org/klomp/snark/TrackerClient.java    |  2 +-
 .../java/src/org/klomp/snark/dht/DHT.java     | 83 +++++++++++++++++++
 4 files changed, 93 insertions(+), 9 deletions(-)
 create mode 100644 apps/i2psnark/java/src/org/klomp/snark/dht/DHT.java

diff --git a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
index 16edc12f65..89f5087b15 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
@@ -34,6 +34,7 @@ import net.i2p.util.SimpleScheduler;
 import net.i2p.util.SimpleTimer;
 import net.i2p.util.Translate;
 
+import org.klomp.snark.dht.DHT;
 import org.klomp.snark.dht.KRPC;
 
 /**
@@ -61,7 +62,7 @@ public class I2PSnarkUtil {
     private File _tmpDir;
     private int _startupDelay;
     private boolean _shouldUseOT;
-    private KRPC _krpc;
+    private DHT _dht;
 
     public static final int DEFAULT_STARTUP_DELAY = 3;
     public static final String PROP_USE_OPENTRACKERS = "i2psnark.useOpentrackers";
@@ -195,8 +196,8 @@ public class I2PSnarkUtil {
             _manager = I2PSocketManagerFactory.createManager(_i2cpHost, _i2cpPort, opts);
         }
         // FIXME this only instantiates krpc once, left stuck with old manager
-        if (ENABLE_DHT && _manager != null && _krpc == null)
-            _krpc = new KRPC(_context, _manager.getSession());
+        if (ENABLE_DHT && _manager != null && _dht == null)
+            _dht = new KRPC(_context, _manager.getSession());
         return (_manager != null);
     }
     
@@ -204,7 +205,7 @@ public class I2PSnarkUtil {
      * @return null if disabled or not started
      * @since 0.8.4
      */
-    public KRPC getDHT() { return _krpc; }
+    public DHT getDHT() { return _dht; }
 
     public boolean connected() { return _manager != null; }
 
diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
index 74a840fc7b..dbecc757e6 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
@@ -36,7 +36,7 @@ import net.i2p.util.I2PAppThread;
 import net.i2p.util.Log;
 import net.i2p.util.SimpleTimer2;
 
-import org.klomp.snark.dht.KRPC;
+import org.klomp.snark.dht.DHT;
 
 /**
  * Coordinates what peer does what.
@@ -1194,9 +1194,9 @@ public class PeerCoordinator implements PeerListener
    *  @since 0.8.4
    */
   public void gotPort(Peer peer, int port) {
-      KRPC krpc = _util.getDHT();
-      if (krpc != null)
-          krpc.ping(peer.getDestination(), port);
+      DHT dht = _util.getDHT();
+      if (dht != null)
+          dht.ping(peer.getDestination(), port);
   }
 
   /** Return number of allowed uploaders for this torrent.
diff --git a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java
index 9cf9f7f097..d03ca55db3 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java
@@ -38,7 +38,7 @@ import net.i2p.data.Hash;
 import net.i2p.util.I2PAppThread;
 import net.i2p.util.Log;
 
-import org.klomp.snark.dht.KRPC;
+import org.klomp.snark.dht.DHT;
 
 /**
  * Informs metainfo tracker of events and gets new peers for peer
diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/DHT.java b/apps/i2psnark/java/src/org/klomp/snark/dht/DHT.java
new file mode 100644
index 0000000000..29e0fa20b4
--- /dev/null
+++ b/apps/i2psnark/java/src/org/klomp/snark/dht/DHT.java
@@ -0,0 +1,83 @@
+package org.klomp.snark.dht;
+
+/*
+ *  Copyright 2010 zzz (zzz@mail.i2p)
+ *  GPLv2
+ */
+
+import java.util.List;
+
+import net.i2p.data.Destination;
+import net.i2p.data.Hash;
+
+
+/**
+ * Stub for KRPC
+ */
+public interface DHT {
+
+
+    /**
+     *  @return The UDP port that should be included in a PORT message.
+     */
+    public int getPort();
+
+    /**
+     *  Ping. We don't have a NID yet so the node is presumed
+     *  to be absent from our DHT.
+     *  Non-blocking, does not wait for pong.
+     *  If and when the pong is received the node will be inserted in our DHT.
+     */
+    public void ping(Destination dest, int port);
+
+    /**
+     *  Get peers for a torrent.
+     *  Blocking!
+     *  Caller should run in a thread.
+     *
+     *  @param ih the Info Hash (torrent)
+     *  @param max maximum number of peers to return
+     *  @param maxWait the maximum time to wait (ms) must be > 0
+     *  @return list or empty list (never null)
+     */
+    public List<Hash> getPeers(byte[] ih, int max, long maxWait);
+
+    /**
+     *  Announce to ourselves.
+     *  Non-blocking.
+     *
+     *  @param ih the Info Hash (torrent)
+     */
+    public void announce(byte[] ih);
+
+    /**
+     *  Announce somebody else we know about.
+     *  Non-blocking.
+     *
+     *  @param ih the Info Hash (torrent)
+     *  @param peer the peer's Hash
+     */
+    public void announce(byte[] ih, byte[] peerHash);
+
+    /**
+     *  Remove reference to ourselves in the local tracker.
+     *  Use when shutting down the torrent locally.
+     *  Non-blocking.
+     *
+     *  @param ih the Info Hash (torrent)
+     */
+    public void unannounce(byte[] ih);
+
+    /**
+     *  Announce to the closest DHT peers.
+     *  Blocking unless maxWait <= 0
+     *  Caller should run in a thread.
+     *  This also automatically announces ourself to our local tracker.
+     *  For best results do a getPeers() first so we have tokens.
+     *
+     *  @param ih the Info Hash (torrent)
+     *  @param maxWait the maximum total time to wait (ms) or 0 to do all in parallel and return immediately.
+     *  @return the number of successful announces, not counting ourselves.
+     */
+    public int announce(byte[] ih, int max, long maxWait);
+}
-- 
GitLab