## net.i2p.router.networkdb.kademlia
Class ExploreJob

    java.lang.Object
      net.i2p.router.JobImpl
          net.i2p.router.networkdb.kademlia.SearchJob
              net.i2p.router.networkdb.kademlia.ExploreJob

All Implemented Interfaces:
  Job

     class ExploreJob

extends SearchJob

Search for a particular key iteratively until we either find a value, we run out of peers, or the bucket the key belongs in has sufficient values in it. Well, we're skipping the 'bucket gets filled up' test for now, since it'll never get used (at least for a while).

Nested Class Summary

Nested classes/interfaces inherited from class net.i2p.router.networkdb.kademlia.SearchJob
`SearchJob.FailedJob`

Field Summary

Fields inherited from class net.i2p.router.networkdb.kademlia.SearchJob
`_facade, MAX_CLOSEST, PER_FLOODFILL_PEER_TIMEOUT`

Constructor Summary
`ExploreJob(RouterContext context, KademliaNetworkDatabaseFacade facade, Hash key)` Create a new search for the routingKey specified

Method Summary
`protected DatabaseLookupMessage` `buildMessage(long expiration)` We're looking for a router, so lets build the lookup message (no need to tunnel route either, so just have replies sent back to us directly).
`protected DatabaseLookupMessage` `buildMessage(TunnelId replyTunnelId, RouterInfo replyGateway, long expiration)` Build the database search message, but unlike the normal searches, we're more explicit in what we /dont/ want.
`protected int` `getBredth()` max # of concurrent searches
`java.lang.String` `getName()` Descriptive name of the task
`protected void` `newPeersFound(int numNewPeers)` We've gotten a search reply that contained the specified number of peers that we didn't know about before.

Methods inherited from class net.i2p.router.networkdb.kademlia.SearchJob
`add, addDeferred, buildMessage, continueSearch, decrementOutstandingFloodfillSearches, fail, getExpiration, getFacade, getPerPeerTimeoutMs, getPerPeerTimeoutMs, getState, getTimeoutMs, isCongested, onlyQueryFloodfillPeers, replyFound, runJob, searchNext, sendLeaseSearch, sendRouterSearch, sendSearch, timeoutMs, toString, wasAttempted`

Methods inherited from class net.i2p.router.JobImpl
`dropped, getAddedBy, getContext, getJobId, getMadeReadyOn, getTiming, madeReady, requeue`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Constructor Detail

### ExploreJob

    public ExploreJob(RouterContext context,
                      KademliaNetworkDatabaseFacade facade,
                      Hash key)

  Create a new search for the routingKey specified

Method Detail

### buildMessage

    protected DatabaseLookupMessage buildMessage(TunnelId replyTunnelId,
                                                 RouterInfo replyGateway,
                                                 long expiration)

  Build the database search message, but unlike the normal searches, we're more explicit in what we /dont/ want. We don't just ask them to ignore the peers we've already searched on, but to ignore a number of the peers we already know about (in the target key's bucket) as well. Perhaps we may want to ignore other keys too, such as the ones in nearby buckets, but we probably don't want the dontIncludePeers set to get too massive (aka sending the entire routing table as 'dont tell me about these guys'). but maybe we do. dunno. lots of implications.

  Parameters:
    `replyTunnelId` - tunnel to receive replies through
    `replyGateway` - gateway for the reply tunnel
    `expiration` - when the search should stop

### buildMessage

    protected DatabaseLookupMessage buildMessage(long expiration)

  We're looking for a router, so lets build the lookup message (no need to tunnel route either, so just have replies sent back to us directly). This uses the similar overrides as the other buildMessage above.

  Overrides:
    `buildMessage` in class `SearchJob`

### getBredth

    protected int getBredth()

  max # of concurrent searches

  Overrides:
    `getBredth` in class `SearchJob`

### newPeersFound

    protected void newPeersFound(int numNewPeers)

  We've gotten a search reply that contained the specified number of peers that we didn't know about before.

  Overrides:
    `newPeersFound` in class `SearchJob`

### getName

    public java.lang.String getName()

  Description copied from interface: `Job`
  Descriptive name of the task

  Specified by:
    `getName` in interface `Job`
  Overrides:
    `getName` in class `SearchJob`