org.klomp.snark.dht

## Interface DHT

- All Known Implementing Classes:
    KRPC

      public interface DHT

  Stub for KRPC

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `announce(byte[] ih, boolean isSeed)` Announce to ourselves.
    `void` | `announce(byte[] ih, byte[] peerHash, boolean isSeed)` Announce somebody else we know about to ourselves.
    `int` | `announce(byte[] ih, int max, long maxWait, boolean isSeed)` Announce to the closest DHT peers.
    `Collection<Hash>` | `getPeersAndAnnounce(byte[] ih, int max, long maxWait, int annMax, long annMaxWait, boolean isSeed, boolean noSeeds)` Get peers for a torrent, and announce to the closest annMax nodes we find.
    `int` | `getPort()`
    `int` | `getRPort()`
    `void` | `ping(Destination dest, int port)` Ping.
    `String` | `renderStatusHTML()` Debug info, HTML formatted
    `int` | `size()` Known nodes, not estimated total network size.
    `void` | `stop()` Stop everything.
    `void` | `unannounce(byte[] ih)` Remove reference to ourselves in the local tracker.

- - ### Method Detail

    - #### announce

          void announce(byte[] ih,
                        boolean isSeed)

      Announce to ourselves. Non-blocking.
      Parameters:
        `ih` - the Info Hash (torrent)

    - #### announce

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

      Announce somebody else we know about to ourselves. Non-blocking.
      Parameters:
        `ih` - the Info Hash (torrent)
        `peerHash` - the peer's Hash

    - #### announce

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

      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.
        `isSeed` - true if seed, false if leech
      Returns:
        the number of successful announces, not counting ourselves.

    - #### getPeersAndAnnounce

          Collection<Hash> getPeersAndAnnounce(byte[] ih,
                                               int max,
                                               long maxWait,
                                               int annMax,
                                               long annMaxWait,
                                               boolean isSeed,
                                               boolean noSeeds)

      Get peers for a torrent, and announce to the closest annMax nodes we find. 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
        `annMax` - the number of peers to announce to
        `annMaxWait` - the maximum total time to wait for announces, may be 0 to return immediately without waiting for acks
        `isSeed` - true if seed, false if leech
        `noSeeds` - true if we do not want seeds in the result
      Returns:
        possibly empty (never null)

    - #### getPort

          int getPort()

      Returns:
        The UDP query port

    - #### getRPort

          int getRPort()

      Returns:
        The UDP response port

    - #### 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.

    - #### renderStatusHTML

          String renderStatusHTML()

      Debug info, HTML formatted

    - #### size

          int size()

      Known nodes, not estimated total network size.

    - #### stop

          void stop()

      Stop everything.

    - #### 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)