# Package net.i2p.router.networkdb.kademlia

Kademlia DHT implementation and floodfill router functionality for I2P.

See: Description

- Interface Summary
  Interface | Description
  --- | ---
  DataStore | Interface for database storage operations in the network database.

- Class Summary
  Class | Description
  --- | ---
  BlindCache | Cache for blinding data as specified in I2P proposal 123.
  DirectLookupJob | Ask a connected peer for his RI.
  DirectLookupMatchJob | Override to not call failed() in setMessage(), as it will be called from runJob()
  ExpireLeasesJob | Periodically searches 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).
  ExpireRoutersJob | Go through the routing table pick routers that are out of date, but don't expire routers we're actively connected to.
  ExploreJob | Represents an exploratory search job for a particular key in the Kademlia network database.
  FloodfillDatabaseLookupMessageHandler | Handler for DatabaseLookupMessage received on floodfills.
  FloodfillDatabaseStoreMessageHandler | Handles incoming DatabaseStoreMessage for floodfill network database operations.
  FloodfillMonitorJob | Simple job to monitor the floodfill pool.
  FloodfillNetworkDatabaseFacade | The network database
  FloodfillNetworkDatabaseSegmentor | FloodfillNetworkDatabaseSegmentor Default implementation of the SegmentedNetworkDatabaseFacade.
  FloodfillPeerSelector | This is where we implement semi-Kademlia with the floodfills, by selecting floodfills closest to a given key for searches and stores.
  FloodfillRouterInfoFloodJob | Job to flood nearby floodfill routers with our RI.
  FloodfillStoreJob | This class extends StoreJob to fire off a FloodfillVerifyStoreJob after a successful store.
  FloodfillVerifyStoreJob | Send a netDb lookup to a floodfill peer - If it is found, great, but if they reply back saying they don't know it, queue up a store of the key to a random floodfill peer again (via FloodfillStoreJob)
  FloodOnlyLookupMatchJob | Handles match processing for flood-only search operations.
  FloodOnlyLookupSelector | Message selector for flood-only database lookup operations.
  FloodOnlyLookupTimeoutJob | Timeout handler for flood-only search operations.
  FloodOnlySearchJob | Flood-only search implementation for network database lookups.
  FloodSearchJob | Base class for flood-based search operations with fallback to Kademlia.
  FloodThrottler | Provides basic denial-of-service protection for database flood operations.
  HandleFloodfillDatabaseLookupMessageJob | Processes database lookup messages received by floodfill routers.
  HandleFloodfillDatabaseStoreMessageJob | Processes and stores DatabaseStoreMessage data in the floodfill network database.
  IterativeFollowupJob | Performs targeted followup lookups during iterative search operations.
  IterativeLookupJob | Processes DatabaseSearchReplyMessage responses during iterative searches.
  IterativeLookupSelector | Slightly modified version of FloodOnlyLookupSelector.
  IterativeSearchJob | Traditional Kademlia iterative search with enhanced robustness.
  IterativeTimeoutJob | Handles timeout events for individual peer lookups in iterative searches.
  KademliaNetworkDatabaseFacade | Kademlia based version of network database.
  LocalHash | Pull the caching used only by KBucketImpl out of Hash and put it here.
  LookupBanHammer | Tracks the frequency of recent lookup requests targeting a specific reply peer/tunnel pair to provide basic denial-of-service (DOS) protection by banning excessive requesters.
  LookupThrottler | Provides denial-of-service protection for network database lookup operations.
  MessageWrapper | Method and class for garlic encrypting outbound netdb traffic, and sending keys and tags for others to encrypt inbound netdb traffic, including management of the ElGamal/AES tags.
  MessageWrapper.OneTimeSession | A single key and tag, for receiving a single message.
  MessageWrapper.WrappedMessage | Wrapper so that we can keep track of the key and tags for later notification to the SKM
  NegativeLookupCache | Negative cache for network database lookup operations.
  PeerSelector | Abstract base class for peer selection in Kademlia routing tables.
  PersistentDataStore | Persistent network database storage with disk I/O and memory management.
  RefreshRoutersJob | RefreshRoutersJob performs router info refresh operations periodically.
  RepublishLeaseSetJob | A job that periodically republishes a local LeaseSet to the network database.
  SearchJob | Base class for iterative network database search operations.
  SearchMessageSelector | Message selector for matching search operation responses from specific peers.
  SearchReplyJob | Processes DatabaseSearchReplyMessage responses from floodfill peers.
  SearchState | Manages state for network database search operations.
  SearchUpdateReplyFoundJob | Called after a match to a db search is found Used only by SearchJob which is only used by ExploreJob
  SegmentedNetworkDatabaseFacade | SegmentedNetworkDatabaseFacade This class implements an interface for managing many netDbs as part of a single I2P instance, each representing its own view of the network.
  SingleLookupJob | Performs targeted followup lookups for RouterInfo entries from search replies.
  SingleSearchJob | Performs a targeted lookup to a single peer for a specific key.
  StartExplorersJob | This job initiates exploration of the network database by selecting keys to explore and queuing ExploreJobs up to a maximum per run.
  StoreJob | Abstract base class for network database store operations.
  StoreMessageSelector | Message selector for matching database store operation confirmations.
  StoreState | Manages state for network database store operations.
  TransientDataStore | In-memory network database storage implementation.

- Exception Summary
  Exception | Description
  --- | ---
  UnsupportedCryptoException | Signature verification failed because the sig type is unknown or unavailable.

## Package net.i2p.router.networkdb.kademlia Description

Kademlia DHT implementation and floodfill router functionality for I2P.

This package contains the complete implementation of the I2P network database based on the Kademlia distributed hash table algorithm. It provides the core functionality for storing and retrieving router information and lease sets, with special support for floodfill routers that act as super-nodes in the network.

Key Components:

- FloodfillNetworkDatabaseFacade - Floodfill router implementation
- KademliaNetworkDatabaseFacade - Standard Kademlia DHT implementation
- DataStore - Persistent storage for network database entries
- SearchJob - Database lookup and search operations
- StoreJob - Database storage operations
- ExploreJob - Network exploration and discovery
- LookupThrottler - Rate limiting for database operations
- PersistentDataStore - Long-term storage management
- PeerSelector - Router selection algorithms

Main Functionality:

- Kademlia DHT routing and maintenance
- Floodfill router operations and responsibilities
- Database lookup, search, and storage operations
- Network exploration and peer discovery
- Rate limiting and throttling of database operations
- Persistent storage and caching of network data
- Router selection and peer management

Usage Notes:

- Floodfill routers provide enhanced database services
- Standard routers use the basic Kademlia implementation
- All database operations are performed through jobs
- Implements the I2P network database specification