## org.klomp.snark.dht
Interface DHT

    public interface DHT

Stub for KRPC

Method Summary
`void` `announce(byte[] ih)` Announce to ourselves.
`void` `announce(byte[] ih, byte[] peerHash)` Announce somebody else we know about.
`int` `announce(byte[] ih, int max, long maxWait)` Announce to the closest DHT peers.
`List<Hash>` `getPeers(byte[] ih, int max, long maxWait)` Get peers for a torrent.
`int` `getPort()`
`void` `ping(Destination dest, int port)` Ping.
`void` `unannounce(byte[] ih)` Remove reference to ourselves in the local tracker.

Method Detail

### getPort

    int getPort()

  Returns:
    The UDP port that should be included in a PORT message.

### ping

    void ping(Destination dest,
              int port)

  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.

### getPeers

    List<Hash> getPeers(byte[] ih,
                        int max,
                        long maxWait)

  Get peers for a torrent. Blocking! Caller should run in a thread.

  Parameters:
    `ih` - the Info Hash (torrent)
    `max` - maximum number of peers to return
    `maxWait` - the maximum time to wait (ms) must be > 0
  Returns:
    list or empty list (never null)

### announce

    void announce(byte[] ih)

  Announce to ourselves. Non-blocking.

  Parameters:
    `ih` - the Info Hash (torrent)

### announce

    void announce(byte[] ih,
                  byte[] peerHash)

  Announce somebody else we know about. Non-blocking.

  Parameters:
    `ih` - the Info Hash (torrent)
    `peerHash` - the peer's Hash

### unannounce

    void unannounce(byte[] ih)

  Remove reference to ourselves in the local tracker. Use when shutting down the torrent locally. Non-blocking.

  Parameters:
    `ih` - the Info Hash (torrent)

### announce

    int announce(byte[] ih,
                 int max,
                 long maxWait)

  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.

  Parameters:
    `ih` - the Info Hash (torrent)
    `maxWait` - the maximum total time to wait (ms) or 0 to do all in parallel and return immediately.
  Returns:
    the number of successful announces, not counting ourselves.