## Uses of Class
net.i2p.router.JobImpl

- Packages that use JobImpl
  Package | Description
  --- | ---
  net.i2p.router.client |
  net.i2p.router.message |
  net.i2p.router.networkdb |
  net.i2p.router.networkdb.kademlia |
  net.i2p.router.peermanager | The peer manager logs information about the history and quality of network peers.
  net.i2p.router.startup | The I2P startup package loads the configuration when I2P is started.
  net.i2p.router.transport | The transport system allows the usage of communication layers that are below I2P in the stack, on which I2P messages are sent.
  net.i2p.router.tunnel.pool |

- - ### Uses of JobImpl in net.i2p.router.client

    Subclasses of JobImpl in net.i2p.router.client
    Modifier and Type | Class and Description
    --- | ---
    `(package private) class` | `CreateSessionJob` Given an established connection, walk through the process of establishing the lease set.
    `(package private) class` | `LookupDestJob` Look up the lease of a hash, to convert it to a Destination for the client
    `(package private) class` | `MessageReceivedJob` Async job to notify the client that a new message is available for them
    `(package private) class` | `ReportAbuseJob` Async job to send an abuse message to the client
    `(package private) class` | `RequestLeaseSetJob` Async job to walk the client through generating a lease set.

  - ### Uses of JobImpl in net.i2p.router.message

    Subclasses of JobImpl in net.i2p.router.message
    Modifier and Type | Class and Description
    --- | ---
    `(package private) class` | `HandleGarlicMessageJob` Unencrypt a garlic message and handle each of the cloves - locally destined messages are tossed into the inbound network message pool so they're handled as if they arrived locally.
    `class` | `OutboundClientMessageOneShotJob` Send a client message out a random outbound tunnel and into a random inbound tunnel on the target leaseSet.
    `class` | `SendMessageDirectJob`

  - ### Uses of JobImpl in net.i2p.router.networkdb

    Subclasses of JobImpl in net.i2p.router.networkdb
    Modifier and Type | Class and Description
    --- | ---
    `class` | `HandleDatabaseLookupMessageJob` Handle a lookup for a key received from a remote peer.
    `class` | `HandleDatabaseStoreMessageJob` Receive DatabaseStoreMessage data and store it in the local net db Unused - see kademlia/ for replacement
    `class` | `PublishLocalRouterInfoJob` Publish the local router's RouterInfo periodically NOTE - this also creates and signs the RI

  - ### Uses of JobImpl in net.i2p.router.networkdb.kademlia

    Subclasses of JobImpl in net.i2p.router.networkdb.kademlia
    Modifier and Type | Class and Description
    --- | ---
    `(package private) class` | `ExpireLeasesJob` Periodically search through all leases to find expired ones, failing those keys and firing up a new search for each (in case we want it later, might as well preemptively fetch it)
    `(package private) class` | `ExpireRoutersJob` Go through the routing table pick routers that are is out of date, but don't expire routers we're actively connected to.
    `(package private) class` | `ExploreJob` 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.
    `(package private) class` | `ExploreKeySelectorJob` Go through the kbuckets and generate random keys for routers in buckets not yet full, attempting to keep a pool of keys we can explore with (at least one per bucket)
    `(package private) class` | `FloodfillMonitorJob` Simple job to monitor the floodfill pool.
    `(package private) class` | `FloodfillStoreJob` This extends StoreJob to fire off a FloodfillVerifyStoreJob after success.
    `class` | `FloodfillVerifyStoreJob` send a netDb lookup to a random floodfill peer - if it is found, great, but if they reply back saying they dont know it, queue up a store of the key to a random floodfill peer again (via FloodfillStoreJob)
    `(package private) class` | `FloodOnlyLookupMatchJob`
    `(package private) class` | `FloodOnlyLookupTimeoutJob`
    `(package private) class` | `FloodOnlySearchJob` Try sending a search to some floodfill peers, failing completely if we don't get a match from one of those peers, with no fallback to the kademlia search Exception (a semi-exception, since we still fail completely without fallback): If we don't know any floodfill peers, we ask a couple of peers at random, who will hopefully reply with some floodfill keys.
    `class` | `FloodSearchJob` Try sending a search to some floodfill peers, but if we don't get a successful match within half the allowed lookup time, give up and start querying through the normal (kademlia) channels.
    `class` | `HandleFloodfillDatabaseLookupMessageJob` Handle a lookup for a key received from a remote peer.
    `class` | `HandleFloodfillDatabaseStoreMessageJob` Receive DatabaseStoreMessage data and store it in the local net db
    `(package private) class` | `HarvesterJob` Simple job to try to keep our peer references up to date by aggressively requerying them every few minutes.
    `class` | `RepublishLeaseSetJob` Run periodically for each locally created leaseSet to cause it to be republished if the client is still connected.
    `(package private) class` | `SearchJob` Search for a particular key iteratively until we either find a value or we run out of peers Note that this is rarely if ever used directly, and is primary used by the ExploreJob extension.
    `protected class` | `SearchJob.FailedJob` Called when a particular peer failed to respond before the timeout was reached, or if the peer could not be contacted at all.
    `(package private) class` | `SearchReplyJob`
    `(package private) class` | `SearchUpdateReplyFoundJob` Called after a match to a db search is found
    `(package private) class` | `SingleLookupJob` Ask the peer who sent us the DSRM for the RouterInfos.
    `(package private) class` | `SingleSearchJob` Ask a single peer for a single key.
    `(package private) class` | `StartExplorersJob` Fire off search jobs for random keys from the explore pool, up to MAX_PER_RUN at a time.
    `(package private) class` | `StoreJob`

  - ### Uses of JobImpl in net.i2p.router.peermanager

    Subclasses of JobImpl in net.i2p.router.peermanager
    Modifier and Type | Class and Description
    --- | ---
    `class` | `PeerTestJob` Grab some peers that we want to test and probe them briefly to get some more accurate and up to date performance data.

  - ### Uses of JobImpl in net.i2p.router.startup

    Subclasses of JobImpl in net.i2p.router.startup
    Modifier and Type | Class and Description
    --- | ---
    `class` | `BootCommSystemJob` This actually boots almost everything
    `class` | `BootNetworkDbJob` start up the network database
    `class` | `BootPeerManagerJob` start up the peer manager
    `class` | `BuildTrustedLinksJob`
    `class` | `CreateRouterInfoJob`
    `class` | `LoadClientAppsJob` Run any client applications specified in clients.config.
    `static class` | `LoadClientAppsJob.DelayedRunClient`
    `class` | `LoadRouterInfoJob`
    `class` | `ReadConfigJob` Simply read the router config
    `class` | `RebuildRouterInfoJob` This used be called from StartAcceptingClientsJob but is now disabled.
    `class` | `StartAcceptingClientsJob` start I2CP interface
    `class` | `StartupJob` The StartupJob should be run once on router startup to initialize the system and set things in motion.

  - ### Uses of JobImpl in net.i2p.router.transport

    Subclasses of JobImpl in net.i2p.router.transport
    Modifier and Type | Class and Description
    --- | ---
    `(package private) class` | `GetBidsJob` Retrieve a set of bids for a particular outbound message, and if any are found that meet the message's requirements, register the message as in process and pass it on to the transport for processing

  - ### Uses of JobImpl in net.i2p.router.tunnel.pool

    Subclasses of JobImpl in net.i2p.router.tunnel.pool
    Modifier and Type | Class and Description
    --- | ---
    `(package private) class` | `ExpireJob` This runs twice for each tunnel.
    `(package private) class` | `TestJob`