## Uses of Class
net.i2p.data.router.RouterInfo

- Packages that use RouterInfo
  Package | Description
  --- | ---
  net.i2p.data.i2np | This package defines the low-level messages sent between routers, called Invisible Internet Network Protocol (I2NP).
  net.i2p.data.router | Router-specific data structures and identity management classes for I2P.
  net.i2p.router | The I2P router application handles I2P network communication.
  net.i2p.router.crypto | Router-specific cryptographic operations and implementations for I2P security.
  net.i2p.router.dummy | Dummy implementations and stub classes for testing purposes.
  net.i2p.router.message | Garlic message creation, parsing, and source routing for I2P communications.
  net.i2p.router.networkdb.kademlia | Kademlia DHT implementation and floodfill router functionality for I2P.
  net.i2p.router.startup | The I2P startup package loads configuration when I2P is started.
  net.i2p.router.sybil | Offline analysis tools for detecting Sybil attacks and malicious peer coordination in the I2P network.
  net.i2p.router.transport | Transport layer implementations and management for I2P network communication.
  net.i2p.router.transport.ntcp | The NTCP (New TCP) transport for I2P, allowing I2P messages to be passed over TCP connections.
  net.i2p.router.transport.udp | The UDP transport (also known as 'SSU' or Secure Semi-reliable UDP transport) for I2P, allowing I2P messages to be passed over UDP connections.
  net.i2p.router.tunnel.pool | Tunnel pool management, creation, and peer selection for I2P's anonymous routing system.
  net.i2p.router.util | Utility classes and helper functions used throughout the I2P router.
  net.i2p.router.web.helpers | Helpers and handlers for the router console user interface, with these classes supporting the webapp in routerconsole.war.

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

    Methods in net.i2p.data.i2np with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `static boolean` | DatabaseLookupMessage.`supportsEncryptedReplies(RouterInfo to)` Does this router support encrypted replies?
    `static boolean` | DatabaseLookupMessage.`supportsRatchetReplies(RouterInfo to)` Does this router support ratchet replies?

  - ### Uses of RouterInfo in net.i2p.data.router

    Constructors in net.i2p.data.router with parameters of type RouterInfo
    Constructor and Description
    `RouterInfo(RouterInfo old)` Used only by Router and PublishLocalRouterInfoJob.

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

    Methods in net.i2p.router that return RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `RouterInfo` | Router.`getRouterInfo()` Our current router info.
    `RouterInfo` | OutNetMessage.`getTarget()` Specifies the router to which the message should be delivered.
    `abstract RouterInfo` | NetworkDatabaseFacade.`lookupRouterInfoLocally(Hash key)`
    `abstract RouterInfo` | NetworkDatabaseFacade.`store(Hash key, RouterInfo routerInfo)`

    Methods in net.i2p.router that return types with arguments of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `Set<RouterInfo>` | NetworkDatabaseFacade.`getRouters()` public for NetDbRenderer in routerconsole

    Methods in net.i2p.router with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | Blocklist.`isBlocklisted(RouterInfo pinfo)` Check if a peer is blocklisted by IP address.
    `boolean` | CommSystemFacade.`isInStrictCountry(RouterInfo ri)`
    `abstract void` | NetworkDatabaseFacade.`publish(RouterInfo localRouterInfo)`
    `void` | Router.`setRouterInfo(RouterInfo info)` Caller must ensure info is valid - no validation done here.
    `abstract RouterInfo` | NetworkDatabaseFacade.`store(Hash key, RouterInfo routerInfo)`

    Constructors in net.i2p.router with parameters of type RouterInfo
    Constructor and Description
    `OutNetMessage(RouterContext context, I2NPMessage msg, long expiration, int priority, RouterInfo target)` Standard constructor

  - ### Uses of RouterInfo in net.i2p.router.crypto

    Methods in net.i2p.router.crypto with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `FamilyKeyCrypto.Result` | FamilyKeyCrypto.`verify(RouterInfo ri)` Verify the family signature in a RouterInfo.
    `boolean` | FamilyKeyCrypto.`verifyOurFamily(RouterInfo ri)` Verify the family in a RouterInfo matches ours and the signature is good.

  - ### Uses of RouterInfo in net.i2p.router.dummy

    Methods in net.i2p.router.dummy that return RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `RouterInfo` | DummyNetworkDatabaseFacade.`lookupRouterInfoLocally(Hash key)`
    `RouterInfo` | DummyNetworkDatabaseFacade.`store(Hash key, RouterInfo routerInfo)`

    Methods in net.i2p.router.dummy with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `void` | DummyNetworkDatabaseFacade.`publish(RouterInfo localRouterInfo)`
    `RouterInfo` | DummyNetworkDatabaseFacade.`store(Hash key, RouterInfo routerInfo)`

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

    Methods in net.i2p.router.message that return RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `RouterInfo` | GarlicConfig.`getRecipient()`

    Methods in net.i2p.router.message with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `void` | GarlicConfig.`setRecipient(RouterInfo info)` Router to receive and process this clove - the router that will open the delivery instructions and decide what to do process it locally as an I2NPMessage, forward it as an I2NPMessage to a router, forward it as an I2NPMessage to a Destination, or forward it as an I2NPMessage to a tunnel.

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

    Methods in net.i2p.router.networkdb.kademlia that return RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `RouterInfo` | KademliaNetworkDatabaseFacade.`lookupRouterInfoLocally(Hash key)` This will return immediately with the result or null.
    `RouterInfo` | KademliaNetworkDatabaseFacade.`store(Hash key, RouterInfo routerInfo)` Store the routerInfo.
    `(package private) RouterInfo` | KademliaNetworkDatabaseFacade.`store(Hash key, RouterInfo routerInfo, boolean persist)` Store the routerInfo.

    Methods in net.i2p.router.networkdb.kademlia that return types with arguments of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `List<RouterInfo>` | FloodfillNetworkDatabaseFacade.`getKnownRouterData()`
    `Set<RouterInfo>` | KademliaNetworkDatabaseFacade.`getRouters()` Public for NetDbRenderer in routerconsole

    Methods in net.i2p.router.networkdb.kademlia with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `protected I2NPMessage` | ExploreJob.`buildMessage(TunnelId replyTunnelId, Hash replyGateway, long expiration, RouterInfo peer)` Builds the database lookup message to send to a peer.
    `protected I2NPMessage` | SearchJob.`buildMessage(TunnelId replyTunnelId, Hash replyGateway, long expiration, RouterInfo peer)` Build the database search message
    `static boolean` | FloodfillNetworkDatabaseFacade.`isFloodfill(RouterInfo peer)`
    `protected void` | FloodfillNetworkDatabaseFacade.`lookupBeforeDropping(Hash peer, RouterInfo info)` Search for a newer router info, drop it from the db if the search fails, unless just started up or have bigger problems.
    `protected void` | KademliaNetworkDatabaseFacade.`lookupBeforeDropping(Hash peer, RouterInfo info)` Don't use directly - see F.N.D.F.
    `void` | FloodfillNetworkDatabaseFacade.`publish(RouterInfo localRouterInfo)` Send our RI to the closest floodfill.
    `void` | KademliaNetworkDatabaseFacade.`publish(RouterInfo localRouterInfo)` Stores to local db only.
    `protected void` | SearchJob.`sendLeaseSearch(RouterInfo router)` we're (probably) searching for a LeaseSet, so to be (overly) cautious, we're sending the request out through a tunnel w/ reply back through another tunnel.
    `protected void` | SearchJob.`sendRouterSearch(RouterInfo router)` We're searching for a router, so we can just send direct
    `protected void` | SearchJob.`sendSearch(RouterInfo router)` Send a search to the given peer
    `(package private) static boolean` | StoreJob.`shouldStoreEncLS2To(RouterInfo ri)` Is it new enough?
    `(package private) static boolean` | StoreJob.`shouldStoreLS2To(RouterInfo ri)` Is it new enough?
    `(package private) static boolean` | StoreJob.`shouldStoreTo(RouterInfo ri)` Is it new enough?
    `RouterInfo` | KademliaNetworkDatabaseFacade.`store(Hash key, RouterInfo routerInfo)` Store the routerInfo.
    `(package private) RouterInfo` | KademliaNetworkDatabaseFacade.`store(Hash key, RouterInfo routerInfo, boolean persist)` Store the routerInfo.
    `(package private) String` | KademliaNetworkDatabaseFacade.`validate(RouterInfo routerInfo)` Determine whether this routerInfo will be accepted as valid and current given what we know now.
    `(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.
    `static GarlicMessage` | MessageWrapper.`wrap(RouterContext ctx, I2NPMessage m, RouterInfo to)` Garlic wrap a message from nobody, destined for a router, to hide the contents from the OBEP.

    Constructors in net.i2p.router.networkdb.kademlia with parameters of type RouterInfo
    Constructor and Description
    `DirectLookupJob(RouterContext ctx, FloodfillNetworkDatabaseFacade facade, Hash peer, RouterInfo oldRI, Job onFind, Job onFail)`
    `FailedJob(RouterContext enclosingContext, RouterInfo peer)`
    `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)
    `SearchMessageSelector(RouterContext context, RouterInfo peer, long expiration, SearchState state)`
    `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)`
    `StoreMessageSelector(RouterContext ctx, long storeJobId, RouterInfo peer, long waitingForId, long expiration)`

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

    Methods in net.i2p.router.startup that return RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `(package private) RouterInfo` | CreateRouterInfoJob.`createRouterInfo()` Writes 6 files: router.info (standard RI format), router.keys.dat, and 4 individual key files under keyBackup/ router.keys.dat file format: This is the same "eepPriv.dat" format used by the client code, as documented in PrivateKeyFile.

  - ### Uses of RouterInfo in net.i2p.router.sybil

    Fields in net.i2p.router.sybil declared as RouterInfo
    Modifier and Type | Field and Description
    --- | ---
    `RouterInfo` | Pair.`r1`
    `RouterInfo` | Pair.`r2`

    Methods in net.i2p.router.sybil that return types with arguments of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `Map<Integer,List<RouterInfo>>` | Analysis.`calculateIPGroups16(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their /16 subnet to identify routers in the same /16 network.
    `Map<Integer,List<RouterInfo>>` | Analysis.`calculateIPGroups24(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their /24 subnet to identify routers in the same /24 network.
    `Map<Integer,List<RouterInfo>>` | Analysis.`calculateIPGroups32(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their IP address to identify routers sharing the same IP.
    `Map<Long,List<RouterInfo>>` | Analysis.`calculateIPGroups48(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their IPv6 /48 subnet to identify routers in the same /48 network.
    `Map<Long,List<RouterInfo>>` | Analysis.`calculateIPGroups64(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their IPv6 /64 subnet to identify routers in the same /64 network.
    `Map<String,List<RouterInfo>>` | Analysis.`calculateIPGroupsFamily(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their router family to identify routers in the same family.
    `List<RouterInfo>` | Analysis.`getAllRouters(Hash us)` Returns all routers in the network DB, excluding our own router.
    `List<RouterInfo>` | Analysis.`getFloodfills(Hash us)` Returns all floodfill routers, excluding our own router.

    Method parameters in net.i2p.router.sybil with type arguments of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `void` | Analysis.`addProfilePoints(List<RouterInfo> ris, Map<Hash,Points> points)` Analyzes router profiles and adds Sybil points for banlisted, newly observed, or poorly performing routers.
    `void` | Analysis.`addVersionPoints(List<RouterInfo> ris, Map<Hash,Points> points)` Analyzes router versions and adds Sybil points for old, unreachable, or non-floodfill routers.
    `Map<Integer,List<RouterInfo>>` | Analysis.`calculateIPGroups16(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their /16 subnet to identify routers in the same /16 network.
    `Map<Integer,List<RouterInfo>>` | Analysis.`calculateIPGroups24(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their /24 subnet to identify routers in the same /24 network.
    `Map<Integer,List<RouterInfo>>` | Analysis.`calculateIPGroups32(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their IP address to identify routers sharing the same IP.
    `Map<Long,List<RouterInfo>>` | Analysis.`calculateIPGroups48(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their IPv6 /48 subnet to identify routers in the same /48 network.
    `Map<Long,List<RouterInfo>>` | Analysis.`calculateIPGroups64(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their IPv6 /64 subnet to identify routers in the same /64 network.
    `Map<String,List<RouterInfo>>` | Analysis.`calculateIPGroupsFamily(List<RouterInfo> ris, Map<Hash,Points> points)` Categorize routers by their router family to identify routers in the same family.
    `void` | Analysis.`calculateIPGroupsUs(List<RouterInfo> ris, Map<Hash,Points> points, List<RouterInfo> ri32, List<RouterInfo> ri24, List<RouterInfo> ri16, List<RouterInfo> ri64, List<RouterInfo> ri48)` Categorize routers by their proximity to our IP address, grouping them by /32, /24, /16 for IPv4 and /64, /48 for IPv6.
    `void` | Analysis.`calculateIPGroupsUs(List<RouterInfo> ris, Map<Hash,Points> points, List<RouterInfo> ri32, List<RouterInfo> ri24, List<RouterInfo> ri16, List<RouterInfo> ri64, List<RouterInfo> ri48)` Categorize routers by their proximity to our IP address, grouping them by /32, /24, /16 for IPv4 and /64, /48 for IPv6.
    `void` | Analysis.`calculateIPGroupsUs(List<RouterInfo> ris, Map<Hash,Points> points, List<RouterInfo> ri32, List<RouterInfo> ri24, List<RouterInfo> ri16, List<RouterInfo> ri64, List<RouterInfo> ri48)` Categorize routers by their proximity to our IP address, grouping them by /32, /24, /16 for IPv4 and /64, /48 for IPv6.
    `void` | Analysis.`calculateIPGroupsUs(List<RouterInfo> ris, Map<Hash,Points> points, List<RouterInfo> ri32, List<RouterInfo> ri24, List<RouterInfo> ri16, List<RouterInfo> ri64, List<RouterInfo> ri48)` Categorize routers by their proximity to our IP address, grouping them by /32, /24, /16 for IPv4 and /64, /48 for IPv6.
    `void` | Analysis.`calculateIPGroupsUs(List<RouterInfo> ris, Map<Hash,Points> points, List<RouterInfo> ri32, List<RouterInfo> ri24, List<RouterInfo> ri16, List<RouterInfo> ri64, List<RouterInfo> ri48)` Categorize routers by their proximity to our IP address, grouping them by /32, /24, /16 for IPv4 and /64, /48 for IPv6.
    `void` | Analysis.`calculateIPGroupsUs(List<RouterInfo> ris, Map<Hash,Points> points, List<RouterInfo> ri32, List<RouterInfo> ri24, List<RouterInfo> ri16, List<RouterInfo> ri64, List<RouterInfo> ri48)` Categorize routers by their proximity to our IP address, grouping them by /32, /24, /16 for IPv4 and /64, /48 for IPv6.
    `double` | Analysis.`calculatePairDistance(List<RouterInfo> ris, Map<Hash,Points> points, List<Pair> pairs)` Calculate average pairwise distance between floodfills and identifies routers that are unusually close to each other.
    `void` | Analysis.`calculateRouterInfo(Hash us, String usName, List<RouterInfo> ris, Map<Hash,Points> points)`
    `double` | Analysis.`getAvgMinDist(List<RouterInfo> ris)` Calculates the average minimum distance from 200 random routing keys to the closest router in the provided list.

    Constructors in net.i2p.router.sybil with parameters of type RouterInfo
    Constructor and Description
    `Pair(RouterInfo ri1, RouterInfo ri2, BigInteger distance)`

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

    Methods in net.i2p.router.transport with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `TransportBid` | Transport.`bid(RouterInfo toAddress, int dataSize)` Request to send a message to the specified router.
    `static byte[]` | CommSystemFacadeImpl.`getCompatibleIP(RouterInfo ri)` Return the first IP compatible with our outbound transports.
    `List<RouterAddress>` | TransportImpl.`getTargetAddresses(RouterInfo target)` Get all available address we can use, shuffled and then sorted by cost/preference.
    `static byte[]` | CommSystemFacadeImpl.`getValidIP(RouterInfo ri)` Return first valid IP (v4 or v6) we find, any transport.
    `boolean` | CommSystemFacadeImpl.`isInStrictCountry(RouterInfo ri)` Are they in a strict country

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

    Methods in net.i2p.router.transport.ntcp with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `TransportBid` | NTCPTransport.`bid(RouterInfo toAddress, int dataSize)`
    `void` | InboundEstablishState.`gotRI(RouterInfo ri, boolean isHandshake, boolean flood)` Validates Alice's RouterInfo and extracts the static key for comparison.
    `void` | NTCP2Payload.PayloadCallback.`gotRI(RouterInfo ri, boolean isHandshake, boolean flood)`

    Constructors in net.i2p.router.transport.ntcp with parameters of type RouterInfo
    Constructor and Description
    `RIBlock(RouterInfo ri, boolean flood)`

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

    Methods in net.i2p.router.transport.udp with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `TransportBid` | UDPTransport.`bid(RouterInfo toAddress, int dataSize)`
    `UDPPacket[]` | PacketBuilder2.`buildSessionConfirmedPackets(OutboundEstablishState2 state, RouterInfo ourInfo)` Build a new series of SessionConfirmed packets for the given peer, encrypting it as necessary.
    `(package private) RouterAddress` | UDPTransport.`getTargetAddress(RouterInfo target)` Get first available address we can use.
    `void` | SSU2Payload.PayloadCallback.`gotRI(RouterInfo ri, boolean isHandshake, boolean flood)`
    `void` | OutboundEstablishState2.`gotRI(RouterInfo ri, boolean isHandshake, boolean flood)`
    `void` | InboundEstablishState2.`gotRI(RouterInfo ri, boolean isHandshake, boolean flood)` For most errors here we throw a RIException with a reason code, which is caught in processPayload() to create a PeerStateDestroyed and send a termination with that reason.
    `void` | PeerStateDestroyed.`gotRI(RouterInfo ri, boolean isHandshake, boolean flood)`
    `void` | PeerState2.`gotRI(RouterInfo ri, boolean isHandshake, boolean flood)`

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

    Methods in net.i2p.router.tunnel.pool with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | ConnectChecker.`canConnect(int ourMask, RouterInfo to)` Can we connect to "to" based on published addresses? This is intended for tunnel candidates, where we already have the RI.
    `boolean` | ConnectChecker.`canConnect(RouterInfo from, int ourMask)` Can "from" connect to us based on published addresses? This is intended for tunnel candidates, where we already have the RI.
    `int` | ConnectChecker.`getInboundMask(RouterInfo us)` Our inbound mask.
    `int` | ConnectChecker.`getOutboundMask(RouterInfo us)` Our outbound mask.
    `protected int` | TunnelPeerSelector.`getPeerConnectMask(RouterInfo ri)` Get the connect mask for a peer's addresses.
    `static boolean` | TunnelPeerSelector.`shouldExclude(RouterContext ctx, RouterInfo peer)` Should the peer be excluded based on its published caps, crypto, and version?

  - ### Uses of RouterInfo in net.i2p.router.util

    Constructors in net.i2p.router.util with parameters of type RouterInfo
    Constructor and Description
    `MaskedIPSet(RouterContext ctx, Hash peer, RouterInfo pinfo, int mask)` The Set of IPs for this peer, with a given mask.
    `MaskedIPSet(RouterContext ctx, RouterInfo pinfo, int mask)` The Set of IPs for this peer, with a given mask.

  - ### Uses of RouterInfo in net.i2p.router.web.helpers

    Methods in net.i2p.router.web.helpers with parameters of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `static int` | RouterInfoComparator.`comp(RouterInfo l, RouterInfo r)`
    `int` | RouterInfoComparator.`compare(RouterInfo l, RouterInfo r)`

    Method parameters in net.i2p.router.web.helpers with type arguments of type RouterInfo
    Modifier and Type | Method and Description
    --- | ---
    `Map<String,String>` | NetDbRenderer.`precacheReverseDNSLookups(Collection<RouterInfo> routers)` Precache reverse DNS lookups for a collection of RouterInfo entries.
    `String` | NetDbRenderer.`renderRouterInfosInParallel(Collection<RouterInfo> routerInfos, boolean isLocalRouter)` Renders multiple RouterInfo objects in parallel.
    `void` | NetDbRenderer.`renderRoutersToWriter(Collection<RouterInfo> routers, Writer out, boolean isLocal, int page, int pageSize)` Renders a list of RouterInfo objects to given Writer.
    `void` | NetDbRenderer.`renderRoutersToWriter(Collection<RouterInfo> routers, Writer out, boolean isLocal, int page, int pageSize, boolean applyPagination)` Renders a list of RouterInfo objects to given Writer.