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

- Packages that use RouterContext
  Package | Description
  --- | ---
  net.i2p.data.i2np | The Invisible Internet Network Protocol (I2NP) is only a part of how an application can send messages over the network.
  net.i2p.desktopgui.router |
  net.i2p.router | The I2P router application handles the I2P network communication.
  net.i2p.router.client |
  net.i2p.router.message |
  net.i2p.router.networkdb |
  net.i2p.router.networkdb.kademlia |
  net.i2p.router.networkdb.reseed |
  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.transport.ntcp | The NTCP transport allows passing I2P messages on top of TCP.
  net.i2p.router.transport.udp | The UDP transport (also known as 'SSU transport') allows passing I2P messages on top of UDP.
  net.i2p.router.tunnel |
  net.i2p.router.tunnel.pool |
  net.i2p.router.web |

- - ### Uses of RouterContext in net.i2p.data.i2np

    Constructors in net.i2p.data.i2np with parameters of type RouterContext
    Constructor and Description
    `GarlicClove(RouterContext context)`
    `I2NPMessageReader(RouterContext context, InputStream stream, I2NPMessageReader.I2NPMessageEventListener lsnr)`
    `I2NPMessageReader(RouterContext context, InputStream stream, I2NPMessageReader.I2NPMessageEventListener lsnr, String name)`

  - ### Uses of RouterContext in net.i2p.desktopgui.router

    Methods in net.i2p.desktopgui.router that return RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `static RouterContext` | RouterManager.`getRouterContext()`

  - ### Uses of RouterContext in net.i2p.router

    Methods in net.i2p.router that return RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `RouterContext` | JobImpl.`getContext()`
    `protected RouterContext` | RouterThrottleImpl.`getContext()`
    `RouterContext` | Router.`getContext()`

    Methods in net.i2p.router that return types with arguments of type RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `static List<RouterContext>` | RouterContext.`listContexts()` Retrieve the list of router contexts currently instantiated in this JVM.

    Constructors in net.i2p.router with parameters of type RouterContext
    Constructor and Description
    `Blocklist(RouterContext context)`
    `ClientMessagePool(RouterContext context)`
    `DummyClientManagerFacade(RouterContext ctx)`
    `DummyNetworkDatabaseFacade(RouterContext ctx)`
    `InNetMessagePool(RouterContext context)`
    `JobImpl(RouterContext context)`
    `JobQueue(RouterContext context)`
    `JobQueueRunner(RouterContext context, int id)`
    `JobTiming(RouterContext context)`
    `KeyManager(RouterContext context)`
    `MessageHistory(RouterContext context)`
    `MessageStateMonitor(RouterContext context)`
    `MessageValidator(RouterContext context)`
    `OutNetMessage(RouterContext context)`
    `OutNetMessagePool(RouterContext context)`
    `PersistentKeyRing(RouterContext ctx)`
    `RouterClock(RouterContext context)`
    `RouterDoSThrottle(RouterContext context)` Deprecated.
    `RouterThrottleImpl(RouterContext context)`
    `RouterWatchdog(RouterContext ctx)`
    `Shitlist(RouterContext context)`
    `StatisticsManager(RouterContext context)`

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

    Fields in net.i2p.router.client declared as RouterContext
    Modifier and Type | Field and Description
    --- | ---
    `protected RouterContext` | ClientListenerRunner.`_context`
    `protected RouterContext` | ClientConnectionRunner.`_context`

    Constructors in net.i2p.router.client with parameters of type RouterContext
    Constructor and Description
    `ClientConnectionRunner(RouterContext context, ClientManager manager, Socket socket)` Create a new runner against the given socket
    `ClientListenerRunner(RouterContext context, ClientManager manager, int port)`
    `ClientManager(RouterContext context, int port)`
    `ClientManagerFacadeImpl(RouterContext context)`
    `ClientMessageEventListener(RouterContext context, ClientConnectionRunner runner, boolean enforceAuth)`
    `ClientWriterRunner(RouterContext context, ClientConnectionRunner runner)`
    `CreateSessionJob(RouterContext context, ClientConnectionRunner runner)`
    `LookupDestJob(RouterContext context, ClientConnectionRunner runner, Hash h)`
    `MessageReceivedJob(RouterContext ctx, ClientConnectionRunner runner, Destination toDest, Destination fromDest, Payload payload)`
    `QueuedClientConnectionRunner(RouterContext context, ClientManager manager, I2CPMessageQueue queue)` Create a new runner with the given queues
    `ReportAbuseJob(RouterContext context, ClientConnectionRunner runner, String reason, int severity)`
    `RequestLeaseSetJob(RouterContext ctx, ClientConnectionRunner runner, LeaseSet set, long expiration, Job onCreate, Job onFail, LeaseRequestState state)`
    `SSLClientListenerRunner(RouterContext context, ClientManager manager, int port)`

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

    Methods in net.i2p.router.message with parameters of type RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `(package private) static PayloadGarlicConfig` | OutboundClientMessageJobHelper.`buildDataClove(RouterContext ctx, Payload data, Destination dest, long expiration)` Build a clove that sends the payload to the destination
    `(package private) static PayloadGarlicConfig` | OutboundClientMessageJobHelper.`buildLeaseSetClove(RouterContext ctx, long expiration, LeaseSet replyLeaseSet)` Build a clove that stores the leaseSet locally
    `static GarlicMessage` | GarlicMessageBuilder.`buildMessage(RouterContext ctx, GarlicConfig config, SessionKey wrappedKey, Set<SessionTag> wrappedTags, int numTagsToDeliver, int lowTagsThreshold, boolean forceElGamal, SessionKeyManager skm)` called by netdb
    `static GarlicMessage` | GarlicMessageBuilder.`buildMessage(RouterContext ctx, GarlicConfig config, SessionKey wrappedKey, Set<SessionTag> wrappedTags, PublicKey target, SessionKey encryptKey, SessionTag encryptTag)` used by TestJob and directly above
    `static GarlicMessage` | GarlicMessageBuilder.`buildMessage(RouterContext ctx, GarlicConfig config, SessionKey wrappedKey, Set<SessionTag> wrappedTags, SessionKeyManager skm)` called by OCMJH
    `(package private) static GarlicMessage` | OutboundClientMessageJobHelper.`createGarlicMessage(RouterContext ctx, long replyToken, long expiration, PublicKey recipientPK, PayloadGarlicConfig dataClove, Hash from, Destination dest, TunnelInfo replyTunnel, SessionKey wrappedKey, Set<SessionTag> wrappedTags, boolean requireAck, LeaseSet bundledReplyLeaseSet)` Allow the app to specify the data clove directly, which enables OutboundClientMessage to resend the same payload (including expiration and unique id) in different garlics (down different tunnels) This is called from OCMOSJ
    `(package private) static GarlicMessage` | OutboundClientMessageJobHelper.`createGarlicMessage(RouterContext ctx, long replyToken, long expiration, PublicKey recipientPK, Payload data, Hash from, Destination dest, TunnelInfo replyTunnel, SessionKey wrappedKey, Set<SessionTag> wrappedTags, boolean requireAck, LeaseSet bundledReplyLeaseSet)` Build a garlic message that will be delivered to the router on which the target is located.
    `static int` | GarlicMessageBuilder.`estimateAvailableTags(RouterContext ctx, PublicKey key, Hash local)`
    `static void` | OutboundClientMessageOneShotJob.`init(RouterContext ctx)` call once only

    Constructors in net.i2p.router.message with parameters of type RouterContext
    Constructor and Description
    `GarlicMessageHandler(RouterContext context)`
    `GarlicMessageParser(RouterContext context)`
    `GarlicMessageReceiver(RouterContext context, GarlicMessageReceiver.CloveReceiver receiver)`
    `GarlicMessageReceiver(RouterContext context, GarlicMessageReceiver.CloveReceiver receiver, Hash clientDestination)`
    `HandleGarlicMessageJob(RouterContext context, GarlicMessage msg, RouterIdentity from, Hash fromHash)`
    `OutboundClientMessageOneShotJob(RouterContext ctx, ClientMessage msg)` Send the sucker
    `SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, int timeoutMs, int priority)`
    `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 RouterContext in net.i2p.router.networkdb

    Constructors in net.i2p.router.networkdb with parameters of type RouterContext
    Constructor and Description
    `DatabaseLookupMessageHandler(RouterContext context)`
    `DatabaseStoreMessageHandler(RouterContext context)`
    `HandleDatabaseLookupMessageJob(RouterContext ctx, DatabaseLookupMessage receivedMessage, RouterIdentity from, Hash fromHash)`
    `HandleDatabaseStoreMessageJob(RouterContext ctx, DatabaseStoreMessage receivedMessage, RouterIdentity from, Hash fromHash)`
    `PublishLocalRouterInfoJob(RouterContext ctx)`

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

    Fields in net.i2p.router.networkdb.kademlia declared as RouterContext
    Modifier and Type | Field and Description
    --- | ---
    `protected RouterContext` | KademliaNetworkDatabaseFacade.`_context`
    `protected RouterContext` | PeerSelector.`_context`
    `protected RouterContext` | TransientDataStore.`_context`

    Methods in net.i2p.router.networkdb.kademlia with parameters of type RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `static boolean` | FloodfillNetworkDatabaseFacade.`floodfillEnabled(RouterContext ctx)`
    `(package private) static boolean` | SearchJob.`onlyQueryFloodfillPeers(RouterContext ctx)` this is now misnamed, as it is only used to determine whether to return floodfill peers only
    `(package private) static MessageWrapper.WrappedMessage` | MessageWrapper.`wrap(RouterContext ctx, I2NPMessage m, Hash from, RouterInfo to)` Garlic wrap a message from a client or this router, destined for a router, to hide the contents from the OBEP.

    Constructors in net.i2p.router.networkdb.kademlia with parameters of type RouterContext
    Constructor and Description
    `ExpireLeasesJob(RouterContext ctx, KademliaNetworkDatabaseFacade facade)`
    `ExpireRoutersJob(RouterContext ctx, KademliaNetworkDatabaseFacade facade)`
    `ExploreJob(RouterContext context, KademliaNetworkDatabaseFacade facade, Hash key)` Create a new search for the routingKey specified
    `ExploreKeySelectorJob(RouterContext context, KademliaNetworkDatabaseFacade facade)`
    `FloodfillDatabaseLookupMessageHandler(RouterContext context, FloodfillNetworkDatabaseFacade facade)`
    `FloodfillDatabaseStoreMessageHandler(RouterContext context, FloodfillNetworkDatabaseFacade facade)`
    `FloodfillMonitorJob(RouterContext context, FloodfillNetworkDatabaseFacade facade)`
    `FloodfillNetworkDatabaseFacade(RouterContext context)`
    `FloodfillPeerSelector(RouterContext ctx)`
    `FloodfillStoreJob(RouterContext context, FloodfillNetworkDatabaseFacade facade, Hash key, DatabaseEntry data, Job onSuccess, Job onFailure, long timeoutMs)` Send a data structure to the floodfills
    `FloodfillStoreJob(RouterContext context, FloodfillNetworkDatabaseFacade facade, Hash key, DatabaseEntry data, Job onSuccess, Job onFailure, long timeoutMs, Set<Hash> toSkip)`
    `FloodfillVerifyStoreJob(RouterContext ctx, Hash key, long published, boolean isRouterInfo, Hash sentTo, FloodfillNetworkDatabaseFacade facade)` Delay a few seconds, then start the verify
    `FloodOnlyLookupMatchJob(RouterContext ctx, FloodOnlySearchJob job)`
    `FloodOnlyLookupSelector(RouterContext ctx, FloodOnlySearchJob search)`
    `FloodOnlyLookupTimeoutJob(RouterContext ctx, FloodOnlySearchJob job)`
    `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)`
    `HandleFloodfillDatabaseLookupMessageJob(RouterContext ctx, DatabaseLookupMessage receivedMessage, RouterIdentity from, Hash fromHash)`
    `HandleFloodfillDatabaseStoreMessageJob(RouterContext ctx, DatabaseStoreMessage receivedMessage, RouterIdentity from, Hash fromHash, FloodfillNetworkDatabaseFacade facade)`
    `HarvesterJob(RouterContext context, KademliaNetworkDatabaseFacade facade)`
    `KademliaNetworkDatabaseFacade(RouterContext context)`
    `PeerSelector(RouterContext ctx)`
    `PersistentDataStore(RouterContext ctx, String dbDir, KademliaNetworkDatabaseFacade facade)`
    `RepublishLeaseSetJob(RouterContext ctx, KademliaNetworkDatabaseFacade facade, Hash destHash)`
    `SearchJob.FailedJob(RouterContext enclosingContext, RouterInfo peer)`
    `SearchJob.FailedJob(RouterContext enclosingContext, RouterInfo peer, boolean penalizePeer)` Allow the choice as to whether failed searches should count against the peer (such as if we search for a random key)
    `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
    `SearchMessageSelector(RouterContext context, RouterInfo peer, long expiration, SearchState state)`
    `SearchReplyJob(RouterContext enclosingContext, SearchJob job, DatabaseSearchReplyMessage message, Hash peer, long duration)`
    `SearchState(RouterContext context, Hash key)`
    `SearchUpdateReplyFoundJob(RouterContext context, RouterInfo peer, SearchState state, KademliaNetworkDatabaseFacade facade, SearchJob job)`
    `SearchUpdateReplyFoundJob(RouterContext context, RouterInfo peer, SearchState state, KademliaNetworkDatabaseFacade facade, SearchJob job, TunnelInfo outTunnel, TunnelInfo replyTunnel)`
    `SingleLookupJob(RouterContext ctx, DatabaseSearchReplyMessage dsrm)`
    `SingleSearchJob(RouterContext ctx, Hash key, Hash to)`
    `StartExplorersJob(RouterContext context, KademliaNetworkDatabaseFacade facade)`
    `StoreJob(RouterContext context, KademliaNetworkDatabaseFacade facade, Hash key, DatabaseEntry data, Job onSuccess, Job onFailure, long timeoutMs)` Send a data structure to the floodfills
    `StoreJob(RouterContext context, KademliaNetworkDatabaseFacade facade, Hash key, DatabaseEntry data, Job onSuccess, Job onFailure, long timeoutMs, Set<Hash> toSkip)`
    `StoreMessageSelector(RouterContext ctx, long storeJobId, RouterInfo peer, long waitingForId, long expiration)`
    `StoreState(RouterContext ctx, Hash key, DatabaseEntry data)`
    `StoreState(RouterContext ctx, Hash key, DatabaseEntry data, Set<Hash> toSkip)`
    `TransientDataStore(RouterContext ctx)`

  - ### Uses of RouterContext in net.i2p.router.networkdb.reseed

    Methods in net.i2p.router.networkdb.reseed with parameters of type RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `static void` | ReseedChecker.`checkReseed(RouterContext context, int count)`

    Constructors in net.i2p.router.networkdb.reseed with parameters of type RouterContext
    Constructor and Description
    `Reseeder(RouterContext ctx)`

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

    Constructors in net.i2p.router.peermanager with parameters of type RouterContext
    Constructor and Description
    `DBHistory(RouterContext context, String statGroup)`
    `PeerManager(RouterContext context)`
    `PeerManagerFacadeImpl(RouterContext ctx)`
    `PeerProfile(RouterContext context, Hash peer)`
    `PeerProfile(RouterContext context, Hash peer, boolean expand)`
    `PeerTestJob(RouterContext context)` Creates a new instance of PeerTestJob
    `ProfileManagerImpl(RouterContext context)`
    `ProfileOrganizer(RouterContext context)`
    `ProfilePersistenceHelper(RouterContext ctx)`
    `TunnelHistory(RouterContext context, String statGroup)`

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

    Methods in net.i2p.router.startup with parameters of type RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `static List<ClientAppConfig>` | ClientAppConfig.`getClientApps(RouterContext ctx)`
    `(package private) static long` | CreateRouterInfoJob.`getCurrentPublishDate(RouterContext context)` We probably don't want to expose the exact time at which a router published its info.
    `static void` | ClientAppConfig.`writeClientAppConfig(RouterContext ctx, List apps)` classpath and stopargs not supported

    Constructors in net.i2p.router.startup with parameters of type RouterContext
    Constructor and Description
    `BootCommSystemJob(RouterContext context)`
    `BootNetworkDbJob(RouterContext ctx)`
    `BootPeerManagerJob(RouterContext ctx)`
    `BuildTrustedLinksJob(RouterContext context, Job next)`
    `CreateRouterInfoJob(RouterContext ctx, Job next)`
    `LoadClientAppsJob.DelayedRunClient(RouterContext enclosingContext, String className, String clientName, String[] args, long delay)`
    `LoadClientAppsJob.DelayedRunClient(RouterContext enclosingContext, String className, String clientName, String[] args, long delay, ThreadGroup threadGroup, ClassLoader cl)`
    `LoadClientAppsJob(RouterContext ctx)`
    `LoadRouterInfoJob(RouterContext ctx)`
    `ReadConfigJob(RouterContext ctx)`
    `RebuildRouterInfoJob(RouterContext context)`
    `StartAcceptingClientsJob(RouterContext context)`
    `StartupJob(RouterContext context)`

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

    Fields in net.i2p.router.transport declared as RouterContext
    Modifier and Type | Field and Description
    --- | ---
    `protected RouterContext` | TransportImpl.`_context`

    Methods in net.i2p.router.transport that return RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `RouterContext` | TransportImpl.`getContext()`

    Methods in net.i2p.router.transport with parameters of type RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `static RouterAddress` | CommSystemFacadeImpl.`createNTCPAddress(RouterContext ctx)` This only creates an address if the hostname AND port are set in router.config, which should be rare.
    `(package private) static void` | GetBidsJob.`getBids(RouterContext context, CommSystemFacadeImpl facade, OutNetMessage msg)`
    `static boolean` | TransportManager.`isNTCPEnabled(RouterContext ctx)`

    Constructors in net.i2p.router.transport with parameters of type RouterContext
    Constructor and Description
    `CommSystemFacadeImpl(RouterContext context)`
    `GeoIP(RouterContext context)`
    `GetBidsJob(RouterContext ctx, CommSystemFacadeImpl facade, OutNetMessage msg)`
    `OutboundMessageRegistry(RouterContext context)`
    `TransportImpl(RouterContext context)` Initialize the new transport
    `TransportManager(RouterContext context)`
    `UPnPManager(RouterContext context, TransportManager manager)`
    `VMCommSystem(RouterContext context)`

  - ### Uses of RouterContext in net.i2p.router.transport.ntcp

    Constructors in net.i2p.router.transport.ntcp with parameters of type RouterContext
    Constructor and Description
    `EstablishState(RouterContext ctx, NTCPTransport transport, NTCPConnection con)`
    `EventPumper(RouterContext ctx, NTCPTransport transport)`
    `NTCPConnection(RouterContext ctx, NTCPTransport transport, RouterIdentity remotePeer, NTCPAddress remAddr)` Create an outbound unconnected NTCP connection
    `NTCPConnection(RouterContext ctx, NTCPTransport transport, SocketChannel chan, SelectionKey key)` Create an inbound connected (though not established) NTCP connection
    `NTCPTransport(RouterContext ctx)`
    `Reader(RouterContext ctx)`
    `Writer(RouterContext ctx)`

  - ### Uses of RouterContext in net.i2p.router.transport.udp

    Constructors in net.i2p.router.transport.udp with parameters of type RouterContext
    Constructor and Description
    `ACKSender(RouterContext ctx, UDPTransport transport)`
    `EstablishmentManager(RouterContext ctx, UDPTransport transport)`
    `InboundEstablishState(RouterContext ctx, byte[] remoteIP, int remotePort, int localPort)`
    `InboundMessageFragments(RouterContext ctx, OutboundMessageFragments outbound, UDPTransport transport)`
    `InboundMessageState(RouterContext ctx, long messageId, Hash from)`
    `IntroductionManager(RouterContext ctx, UDPTransport transport)`
    `MessageReceiver(RouterContext ctx, UDPTransport transport)`
    `OutboundEstablishState(RouterContext ctx, InetAddress remoteHost, int remotePort, RouterIdentity remotePeer, SessionKey introKey, UDPAddress addr)`
    `OutboundMessageFragments(RouterContext ctx, UDPTransport transport, OutboundMessageFragments.ActiveThrottle throttle)`
    `OutboundRefiller(RouterContext ctx, OutboundMessageFragments fragments, MessageQueue messages)`
    `PacketHandler(RouterContext ctx, UDPTransport transport, UDPEndpoint endpoint, EstablishmentManager establisher, InboundMessageFragments inbound, PeerTestManager testManager, IntroductionManager introManager)`
    `PacketPusher(RouterContext ctx, OutboundMessageFragments fragments, UDPSender sender)`
    `PeerState(RouterContext ctx, UDPTransport transport)`
    `PeerTestManager(RouterContext context, UDPTransport transport)` Have seen peer tests (as Alice) get stuck (_currentTest != null) so I've thrown some synchronizization on the methods; don't know the root cause or whether this fixes it
    `TimedWeightedPriorityMessageQueue(RouterContext ctx, int[] priorityLimits, int[] weighting, TimedWeightedPriorityMessageQueue.FailedListener lsnr)` Build up a new queue
    `UDPEndpoint(RouterContext ctx, UDPTransport transport, int listenPort, InetAddress bindAddress)`
    `UDPFlooder(RouterContext ctx, UDPTransport transport)`
    `UDPReceiver(RouterContext ctx, UDPTransport transport, DatagramSocket socket, String name)`
    `UDPSender(RouterContext ctx, DatagramSocket socket, String name)`
    `UDPTransport(RouterContext ctx)`

  - ### Uses of RouterContext in net.i2p.router.tunnel

    Fields in net.i2p.router.tunnel declared as RouterContext
    Modifier and Type | Field and Description
    --- | ---
    `protected RouterContext` | TrivialPreprocessor.`_context`
    `protected RouterContext` | TunnelGateway.`_context`
    `protected RouterContext` | TunnelCreatorConfig.`_context`
    `protected RouterContext` | FragmentHandler.`_context`
    `protected RouterContext` | BatchedRouterPreprocessor.`_routerContext`

    Methods in net.i2p.router.tunnel with parameters of type RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `static int` | TunnelDispatcher.`getShareBandwidth(RouterContext ctx)`

    Constructors in net.i2p.router.tunnel with parameters of type RouterContext
    Constructor and Description
    `BatchedPreprocessor(RouterContext ctx, String name)`
    `BatchedRouterPreprocessor(RouterContext ctx, HopConfig cfg)` for IBGWs
    `BatchedRouterPreprocessor(RouterContext ctx, TunnelCreatorConfig cfg)` for OBGWs
    `BloomFilterIVValidator(RouterContext ctx, int KBps)`
    `FragmentHandler(RouterContext context, FragmentHandler.DefragmentedReceiver receiver)`
    `InboundEndpointProcessor(RouterContext ctx, TunnelCreatorConfig cfg)` Deprecated. unused
    `InboundEndpointProcessor(RouterContext ctx, TunnelCreatorConfig cfg, IVValidator validator)`
    `InboundGatewayReceiver(RouterContext ctx, HopConfig cfg)`
    `InboundMessageDistributor(RouterContext ctx, Hash client)`
    `OutboundMessageDistributor(RouterContext ctx, int priority)`
    `OutboundReceiver(RouterContext ctx, TunnelCreatorConfig cfg)`
    `OutboundTunnelEndpoint(RouterContext ctx, HopConfig config, HopProcessor processor)`
    `PumpedTunnelGateway(RouterContext context, TunnelGateway.QueuePreprocessor preprocessor, TunnelGateway.Sender sender, TunnelGateway.Receiver receiver, TunnelGatewayPumper pumper)`
    `RouterFragmentHandler(RouterContext context, FragmentHandler.DefragmentedReceiver receiver)`
    `ThrottledPumpedTunnelGateway(RouterContext context, TunnelGateway.QueuePreprocessor preprocessor, TunnelGateway.Sender sender, TunnelGateway.Receiver receiver, TunnelGatewayPumper pumper, HopConfig config)`
    `TrivialPreprocessor(RouterContext ctx)`
    `TrivialRouterPreprocessor(RouterContext ctx)` Deprecated.
    `TunnelCreatorConfig(RouterContext ctx, int length, boolean isInbound)`
    `TunnelCreatorConfig(RouterContext ctx, int length, boolean isInbound, Hash destination)`
    `TunnelDispatcher(RouterContext ctx)` Creates a new instance of TunnelDispatcher
    `TunnelGateway(RouterContext context, TunnelGateway.QueuePreprocessor preprocessor, TunnelGateway.Sender sender, TunnelGateway.Receiver receiver)`
    `TunnelGatewayPumper(RouterContext ctx)` Creates a new instance of TunnelGatewayPumper
    `TunnelGatewayZeroHop(RouterContext context, TunnelCreatorConfig config)`
    `TunnelParticipant(RouterContext ctx, HopConfig config, HopProcessor processor)`
    `TunnelParticipant(RouterContext ctx, InboundEndpointProcessor inEndProc)`

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

    Methods in net.i2p.router.tunnel.pool with parameters of type RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `protected boolean` | TunnelPeerSelector.`filterSlow(RouterContext ctx, boolean isInbound, boolean isExploratory)` do we want to skip peers that are slow?
    `protected boolean` | TunnelPeerSelector.`filterUnreachable(RouterContext ctx, boolean isInbound, boolean isExploratory)` do we want to skip peers who haven't been up for long?
    `protected boolean` | TunnelPeerSelector.`filterUptime(RouterContext ctx, boolean isInbound, boolean isExploratory)` do we want to skip peers who haven't been up for long?
    `Set<Hash>` | TunnelPeerSelector.`getExclude(RouterContext ctx, boolean isInbound, boolean isExploratory)` Pick peers that we want to avoid
    `protected int` | TunnelPeerSelector.`getLength(RouterContext ctx, TunnelPoolSettings settings)`
    `static void` | BuildRequestor.`request(RouterContext ctx, TunnelPool pool, PooledTunnelCreatorConfig cfg, BuildExecutor exec)`
    `protected List<Hash>` | TunnelPeerSelector.`selectExplicit(RouterContext ctx, TunnelPoolSettings settings, int length)` For debugging, also possibly for restricted routes? Needs analysis and testing
    `List<Hash>` | ClientPeerSelector.`selectPeers(RouterContext ctx, TunnelPoolSettings settings)`
    `abstract List<Hash>` | TunnelPeerSelector.`selectPeers(RouterContext ctx, TunnelPoolSettings settings)` Which peers should go into the next tunnel for the given settings?
    `List<Hash>` | ExploratoryPeerSelector.`selectPeers(RouterContext ctx, TunnelPoolSettings settings)`
    `static boolean` | TunnelPeerSelector.`shouldExclude(RouterContext ctx, RouterInfo peer)` warning, this is also called by ProfileOrganizer.isSelectable()

    Constructors in net.i2p.router.tunnel.pool with parameters of type RouterContext
    Constructor and Description
    `BuildExecutor(RouterContext ctx, TunnelPoolManager mgr)`
    `BuildHandler(RouterContext ctx, BuildExecutor exec)`
    `ExpireJob(RouterContext ctx, TunnelCreatorConfig cfg, TunnelPool pool)`
    `ParticipatingThrottler(RouterContext ctx)`
    `PooledTunnelCreatorConfig(RouterContext ctx, int length, boolean isInbound)` Creates a new instance of PooledTunnelCreatorConfig
    `PooledTunnelCreatorConfig(RouterContext ctx, int length, boolean isInbound, Hash destination)`
    `TestJob(RouterContext ctx, PooledTunnelCreatorConfig cfg, TunnelPool pool)`
    `TunnelPool(RouterContext ctx, TunnelPoolManager mgr, TunnelPoolSettings settings, TunnelPeerSelector sel)`
    `TunnelPoolManager(RouterContext ctx)`

  - ### Uses of RouterContext in net.i2p.router.web

    Fields in net.i2p.router.web declared as RouterContext
    Modifier and Type | Field and Description
    --- | ---
    `protected RouterContext` | PluginStarter.`_context`
    `protected RouterContext` | HelperBase.`_context`
    `protected RouterContext` | UpdateHandler.`_context`
    `protected RouterContext` | FormHandler.`_context`

    Methods in net.i2p.router.web that return RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `static RouterContext` | ContextHelper.`getContext(String contextId)`

    Methods in net.i2p.router.web with parameters of type RouterContext
    Modifier and Type | Method and Description
    --- | ---
    `(package private) static boolean` | PluginStarter.`deletePlugin(RouterContext ctx, String appName)`
    `static PluginUpdateChecker` | PluginUpdateChecker.`getInstance(RouterContext ctx)`
    `static PluginUpdateHandler` | PluginUpdateHandler.`getInstance(RouterContext ctx)`
    `static boolean` | PluginStarter.`isPluginRunning(String pluginName, RouterContext ctx)`
    `(package private) static boolean` | PluginStarter.`startPlugin(RouterContext ctx, String appName)`
    `(package private) static void` | PluginStarter.`startPlugins(RouterContext ctx)` this shouldn't throw anything
    `(package private) static boolean` | PluginStarter.`stopPlugin(RouterContext ctx, String appName)`
    `(package private) static void` | PluginStopper.`stopPlugins(RouterContext ctx)` Stop all plugins (whether or not they were ever started) this shouldn't throw anything

    Constructors in net.i2p.router.web with parameters of type RouterContext
    Constructor and Description
    `NetDbRenderer(RouterContext ctx)`
    `PluginStarter(RouterContext ctx)`
    `PluginStopper(RouterContext ctx)`
    `ProfileOrganizerRenderer(ProfileOrganizer organizer, RouterContext context)`
    `ReseedHandler(RouterContext ctx)`
    `ShitlistRenderer(RouterContext context)`
    `StatsGenerator(RouterContext context)`
    `SummaryBarRenderer(RouterContext context, SummaryHelper helper)`
    `TunnelRenderer(RouterContext ctx)`
    `UnsignedUpdateHandler(RouterContext ctx, String zipURL, String version)`
    `UpdateHandler(RouterContext ctx)`