## Uses of Interface
net.i2p.router.Job

Packages that use Job
net.i2p.router
net.i2p.router.client
net.i2p.router.message
net.i2p.router.networkdb
net.i2p.router.networkdb.kademlia
net.i2p.router.peermanager
net.i2p.router.startup
net.i2p.router.transport
net.i2p.router.tunnel.pool

Uses of Job in net.i2p.router

Subinterfaces of Job in net.i2p.router
`interface` `ReplyJob` Defines an executable task that can be fired off in reply to a message

Classes in net.i2p.router that implement Job
`class` `JobImpl` Base implementation of a Job
`(package private) class` `PersistRouterInfoJob` update the router.info file whenever its, er, updated
`class` `SubmitMessageHistoryJob` Job that, if its allowed to, will submit the data gathered by the MessageHistory component to some URL so that the network can be debugged more easily.
`(package private) class` `UpdateRoutingKeyModifierJob` Update the routing Key modifier every day at midnight (plus on startup).

Methods in net.i2p.router that return Job
`Job` `HandlerJobBuilder.createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)` Create a new job to handle the received message.
`Job` `JobQueueRunner.getCurrentJob()`
`Job` `JobQueueRunner.getLastJob()`
`Job` `JobQueue.getLastJob()` retrieve the most recently begin and still currently active job, or null if no jobs are running
`(package private) Job` `JobQueue.getNext()` Blocking call to retrieve the next ready job
`Job` `OutNetMessage.getOnFailedReplyJob()` If the Message selector is specified but it doesn't find a reply before its expiration passes, this job is enqueued.
`Job` `OutNetMessage.getOnFailedSendJob()` If the router could not be reached or the expiration passed, this job is enqueued.
`Job` `OutNetMessage.getOnSendJob()` After the message is successfully passed to the router specified, the given job is enqueued.

Methods in net.i2p.router with parameters of type Job
`void` `JobQueue.addJob(Job job)` Enqueue the specified job
`void` `DummyNetworkDatabaseFacade.lookupLeaseSet(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)`
`abstract void` `NetworkDatabaseFacade.lookupLeaseSet(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)`
`void` `DummyNetworkDatabaseFacade.lookupRouterInfo(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)`
`abstract void` `NetworkDatabaseFacade.lookupRouterInfo(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)`
`void` `JobQueue.removeJob(Job job)`
`void` `DummyClientManagerFacade.requestLeaseSet(Destination dest, LeaseSet set, long timeout, Job onCreateJob, Job onFailedJob)`
`abstract void` `ClientManagerFacade.requestLeaseSet(Destination dest, LeaseSet set, long timeout, Job onCreateJob, Job onFailedJob)` Request that a particular client authorize the Leases contained in the LeaseSet, after which the onCreateJob is queued up.
`void` `OutNetMessage.setOnFailedReplyJob(Job job)`
`void` `OutNetMessage.setOnFailedSendJob(Job job)`
`void` `OutNetMessage.setOnSendJob(Job job)`
`(package private) void` `JobQueue.updateStats(Job job, long doStart, long origStartAfter, long duration)` calculate and update the job timings if it was lagged too much or took too long to run, spit out a warning (and if its really excessive, kill the router)

Uses of Job in net.i2p.router.client

Classes in net.i2p.router.client that implement Job
`(package private) class` `CreateSessionJob` Given an established connection, walk through the process of establishing the lease set.
`(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.

Methods in net.i2p.router.client that return Job
`Job` `LeaseRequestState.getOnFailed()` what to do if the lease set create fails / times out
`Job` `LeaseRequestState.getOnGranted()` what to do once the lease set is created

Methods in net.i2p.router.client with parameters of type Job
`void` `ClientManagerFacadeImpl.requestLeaseSet(Destination dest, LeaseSet set, long timeout, Job onCreateJob, Job onFailedJob)` Request that a particular client authorize the Leases contained in the LeaseSet, after which the onCreateJob is queued up.
`void` `ClientManager.requestLeaseSet(Destination dest, LeaseSet set, long timeout, Job onCreateJob, Job onFailedJob)` Request that a particular client authorize the Leases contained in the LeaseSet, after which the onCreateJob is queued up.
`(package private) void` `ClientConnectionRunner.requestLeaseSet(LeaseSet set, long expirationTime, Job onCreateJob, Job onFailedJob)` Request that a particular client authorize the Leases contained in the LeaseSet, after which the onCreateJob is queued up.
`void` `LeaseRequestState.setOnFailed(Job jb)`
`void` `LeaseRequestState.setOnGranted(Job jb)`

Constructors in net.i2p.router.client with parameters of type Job
`LeaseRequestState(Job onGranted, Job onFailed, long expiration, LeaseSet requested)`
`RequestLeaseSetJob(RouterContext ctx, ClientConnectionRunner runner, LeaseSet set, long expiration, Job onCreate, Job onFail, LeaseRequestState state)`

Uses of Job in net.i2p.router.message

Classes in net.i2p.router.message that implement Job
`class` `BuildTestMessageJob` Build a test message that will be sent to the target to make sure they're alive.
`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` `SendGarlicJob` Build a garlic message from config, encrypt it, and enqueue it for delivery.
`class` `SendMessageDirectJob`

Methods in net.i2p.router.message that return Job
`Job` `GarlicMessageHandler.createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`

Constructors in net.i2p.router.message with parameters of type Job
`BuildTestMessageJob(RouterContext ctx, RouterInfo target, Hash replyTo, Job onSendJob, Job onSendFailedJob, long timeoutMs, int priority)`
`SendGarlicJob(RouterContext ctx, GarlicConfig config, Job onSend, Job onSendFailed, ReplyJob onReply, Job onReplyFailed, long timeoutMs, int priority, MessageSelector replySelector)`
`SendGarlicJob(RouterContext ctx, GarlicConfig config, Job onSend, Job onSendFailed, ReplyJob onReply, Job onReplyFailed, long timeoutMs, int priority, MessageSelector replySelector, SessionKey wrappedKey, java.util.Set wrappedTags)`
`SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, Job onSend, ReplyJob onSuccess, Job onFail, MessageSelector selector, int timeoutMs, int priority)`
`SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, ReplyJob onSuccess, Job onFail, MessageSelector selector, int timeoutMs, int priority)`

Uses of Job in net.i2p.router.networkdb

Classes in net.i2p.router.networkdb that implement Job
`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
`class` `PublishLocalRouterInfoJob` Publish the local router's RouterInfo every 5 to 10 minutes

Methods in net.i2p.router.networkdb that return Job
`Job` `DatabaseStoreMessageHandler.createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`
`Job` `DatabaseLookupMessageHandler.createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`

Uses of Job in net.i2p.router.networkdb.kademlia

Classes in net.i2p.router.networkdb.kademlia that implement Job
`(package private) class` `DataPublisherJob`
`(package private) class` `DataRepublishingSelectorJob`
`(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 performing poorly or is out of date, but don't expire routers we're actively tunneling through.
`(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` `FloodfillStoreJob`
`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` `FloodLookupMatchJob`
`(package private) class` `FloodLookupTimeoutJob`
`(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
`(package private) 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.
`(package private) class` `OnRepublishFailure`
`(package private) class` `OnRepublishSuccess`
`(package private) class` `ReplyNotVerifiedJob` the peer gave us a reference to a new router, and we were NOT able to fetch it
`(package private) class` `ReplyVerifiedJob` the peer gave us a reference to a new router, and we were able to fetch it
`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
`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` `StartExplorersJob` Fire off search jobs for random keys from the explore pool, up to MAX_PER_RUN at a time.
`(package private) class` `StoreJob`

Methods in net.i2p.router.networkdb.kademlia that return Job
`Job` `FloodfillDatabaseStoreMessageHandler.createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`
`Job` `FloodfillDatabaseLookupMessageHandler.createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`

Methods in net.i2p.router.networkdb.kademlia with parameters of type Job
`(package private) void` `FloodSearchJob.addDeferred(Job onFind, Job onFailed, long timeoutMs, boolean isLease)`
`int` `SearchJob.addDeferred(Job onFind, Job onFail, long expiration, boolean isLease)`
`(package private) void` `FloodOnlySearchJob.addDeferred(Job onFind, Job onFailed, long timeoutMs, boolean isLease)`
`void` `KademliaNetworkDatabaseFacade.lookupLeaseSet(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)`
`void` `KademliaNetworkDatabaseFacade.lookupRouterInfo(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs)`
`(package private) SearchJob` `KademliaNetworkDatabaseFacade.search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease)` Begin a kademlia style search for the key specified, which can take up to timeoutMs and will fire the appropriate jobs on success or timeout (or if the kademlia search completes without any match)
`(package private) SearchJob` `FloodfillNetworkDatabaseFacade.search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease)` Begin a kademlia style search for the key specified, which can take up to timeoutMs and will fire the appropriate jobs on success or timeout (or if the kademlia search completes without any match)
`void` `KademliaNetworkDatabaseFacade.sendStore(Hash key, DataStructure ds, Job onSuccess, Job onFailure, long sendTimeout, java.util.Set toIgnore)`
`void` `FloodfillNetworkDatabaseFacade.sendStore(Hash key, DataStructure ds, Job onSuccess, Job onFailure, long sendTimeout, java.util.Set toIgnore)`

Constructors in net.i2p.router.networkdb.kademlia with parameters of type Job
`FloodfillStoreJob(RouterContext context, FloodfillNetworkDatabaseFacade facade, Hash key, DataStructure data, Job onSuccess, Job onFailure, long timeoutMs)` Create a new search for the routingKey specified
`FloodfillStoreJob(RouterContext context, FloodfillNetworkDatabaseFacade facade, Hash key, DataStructure data, Job onSuccess, Job onFailure, long timeoutMs, java.util.Set toSkip)`
`FloodOnlySearchJob(RouterContext ctx, FloodfillNetworkDatabaseFacade facade, Hash key, Job onFind, Job onFailed, int timeoutMs, boolean isLease)`
`FloodSearchJob(RouterContext ctx, FloodfillNetworkDatabaseFacade facade, Hash key, Job onFind, Job onFailed, int timeoutMs, boolean isLease)`
`SearchJob(RouterContext context, KademliaNetworkDatabaseFacade facade, Hash key, Job onSuccess, Job onFailure, long timeoutMs, boolean keepStats, boolean isLease)` Create a new search for the routingKey specified
`StoreJob(RouterContext context, KademliaNetworkDatabaseFacade facade, Hash key, DataStructure data, Job onSuccess, Job onFailure, long timeoutMs)` Create a new search for the routingKey specified
`StoreJob(RouterContext context, KademliaNetworkDatabaseFacade facade, Hash key, DataStructure data, Job onSuccess, Job onFailure, long timeoutMs, java.util.Set toSkip)`

Uses of Job in net.i2p.router.peermanager

Classes in net.i2p.router.peermanager that implement Job
`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.
`(package private) class` `PersistProfileJob`
`(package private) class` `PersistProfilesJob`

Uses of Job in net.i2p.router.startup

Classes in net.i2p.router.startup that implement Job
`class` `BootCommSystemJob`
`class` `BootNetworkDbJob`
`class` `BuildTrustedLinksJob`
`class` `CreateRouterInfoJob`
`(package private) class` `LoadClientAppsJob` Run any client applications specified in the router.config.
`class` `LoadRouterInfoJob`
`class` `ReadConfigJob` Simply read the router config
`class` `RebuildRouterInfoJob` If the file router.info.rebuild exists, rebuild the router info and republish.
`class` `StartAcceptingClientsJob`
`class` `StartupJob` The StartupJob should be run once on router startup to initialize the system and set things in motion.

Constructors in net.i2p.router.startup with parameters of type Job
`BuildTrustedLinksJob(RouterContext context, Job next)`
`CreateRouterInfoJob(RouterContext ctx, Job next)`

Uses of Job in net.i2p.router.transport

Classes in net.i2p.router.transport that implement Job
`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

Methods in net.i2p.router.transport with parameters of type Job
`OutNetMessage` `OutboundMessageRegistry.registerPending(MessageSelector replySelector, ReplyJob onReply, Job onTimeout, int timeoutMs)`

Uses of Job in net.i2p.router.tunnel.pool

Classes in net.i2p.router.tunnel.pool that implement Job
`(package private) class` `ExpireJob`
`class` `HandleTunnelCreateMessageJob` Receive a request to join a tunnel, and if we aren't overloaded (per the throttle), join it (updating the tunnelDispatcher), then send back the agreement.
`(package private) class` `SendGarlicMessageJob` Wrap the tunnel request in a garlic to the participant, and then send it out a tunnel.
`(package private) class` `TestJob`

Methods in net.i2p.router.tunnel.pool that return Job
`Job` `TunnelMessageHandlerBuilder.createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`
`Job` `HandleTunnelCreateMessageJob.Builder.createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash)`

Methods in net.i2p.router.tunnel.pool with parameters of type Job
`void` `PooledTunnelCreatorConfig.setExpireJob(Job job)`

Constructors in net.i2p.router.tunnel.pool with parameters of type Job
`SendGarlicMessageJob(RouterContext ctx, I2NPMessage payload, RouterInfo target, MessageSelector selector, ReplyJob onReply, Job onTimeout, SessionKey sentKey, java.util.Set sentTags)`