See: Description
| Interface | Description | 
|---|---|
| BlockSet | A set of KeyBlock's. | 
| ClientBaseCallback | A client process. | 
| ClientGetCallback | Internal callback interface for requests. | 
| ClientGetState | A ClientGetState. | 
| ClientPutCallback | Internal callback interface for inserts (including site inserts). | 
| ClientPutState | ClientPutState
 
 Represents a state in the insert process. | 
| ClientRequestSchedulerGroup | Logical grouping for a single "request" for scheduling purposes. | 
| DownloadCache | |
| FileGetCompletionCallback | If a request will return the downloaded data to a file (not a temporary file), and if the data
 doesn't need decompressing or filtering, and if we are doing the final stage of the download, we
 can create a file in the same directory and use it for temporary storage, then when the download
 completes call onSuccess(), which will check the hashes and then rename the file. | 
| GetCompletionCallback | Callback called when part of a get request completes - either with a 
 StreamGenerator full of data, or with an error. | 
| HasKeyListener | Interface to show that we can create a KeyListener callback. | 
| HealingQueue | |
| KeyListener | Transient object created on startup for persistent requests (or at creation
 time for non-persistent requests), to monitor the stream of successfully
 fetched keys. | 
| KeySalter | This is a separate interface so we don't need to pass the scheduler where it's not needed. | 
| PersistentClientCallback | Fetches which may be persistent need getClientDetail() so that we can save that data to the 
 file a splitfile download is using, so that it can be recovered later. | 
| PersistentJob | A task that affects persistent state. | 
| PersistentJobRunner | We need to be able to suspend execution of jobs changing persistent state in order to write
 it to disk consistently. | 
| PersistentJobRunner.CheckpointLock | |
| PutCompletionCallback | Callback called when part of a put request completes. | 
| RequestSelectionTreeNode | Something that can have a CooldownCacheItem: Anything in the request selection tree, including
 the actual requests at the bottom (but ClientRequestSelector isn't actually a 
 RequestSelectionTreeNode at the moment, the root is the priorities in the array on 
 ClientRequestSelector; FIXME consistency with RGA.root etc). | 
| SnoopBucket | |
| SnoopMetadata | |
| SplitFileFetcherStorageCallback | Callback used by SplitFileFetcherStorage. | 
| SplitFileInserterStorageCallback | Callback interface for a SplitFileInserterStorage. | 
| StreamGenerator | Writes an underlying data structure to an output stream. | 
| USKCallback | USK callback interface. | 
| USKFetcherCallback | Callback interface for USK fetches. | 
| USKFetcherTagCallback | |
| USKManager.HintCallback | |
| USKProgressCallback | |
| USKRetrieverCallback | Interface implemented by USKRetriever clients. | 
| WantsCooldownCallback | Interface for requests that require a callback when they go into cooldown. | 
| Class | Description | 
|---|---|
| BaseClientGetter | |
| BaseClientPutter | Base class for inserts, including site inserts, at the level of a ClientRequester. | 
| BaseManifestPutter | Base class for site insertion. | 
| BaseSingleFileFetcher | Base class implements most of what is needed for fetching a single block. | 
| BinaryBlob | |
| BinaryBlobInserter | |
| BinaryBlobWriter | Helper class to write FBlobs. | 
| CacheFetchResult | |
| ChosenBlock | A single selected request, including everything needed to execute it. | 
| ChosenBlockImpl | |
| ClientContext | Object passed in to client-layer operations, containing references to essential but mostly transient 
 objects such as the schedulers and the FEC queue. | 
| ClientGetter | A high level data request. | 
| ClientGetWorkerThread | A thread which does postprocessing of decompressed data, in particular,
 writing it to its final destination. | 
| ClientLayerPersister | Top level of persistence mechanism for ClientRequest's (persistent downloads and uploads). | 
| ClientPutter | A high level insert. | 
| ClientRequester | A high level request or insert. | 
| ClientRequestScheduler | Every X seconds, the RequestSender calls the ClientRequestScheduler to
 ask for a request to start. | 
| ClientRequestSelector | The global request queue. | 
| CompatibilityAnalyser | |
| ContainerInserter | Insert a bunch of files as single Archive with .metadata
 pack the container/archive, then hand it off to SimpleFileInserter
 TODO persistence
 TODO add a MAX_SIZE for the final container(file) | 
| CooldownBlockChooser | A block chooser including support for cooldown | 
| DatastoreChecker | |
| DefaultManifestPutter | The default manifest putter. | 
| DumperSnoopMetadata | |
| InsertCompressor | Compress a file in order to insert it. | 
| ManifestElement | Deprecated | 
| ManifestPutter | |
| MultiPutCompletionCallback | |
| OfferedKeysList | All the keys at a given priority which we have received key offers from other nodes for. | 
| PersistentJobRunnerImpl | Runs PersistentJob's and periodically, or on demand, suspends all jobs and calls 
 innerCheckpoint(). | 
| PersistentStatsPutter | Add/alter the containers contained in the database, so that
 the upload/download statistics persist. | 
| PlainManifestPutter | plain/dumb manifest putter: every file item is a redirect (no containers at all) | 
| ReadBucketAndFreeInputStream | |
| SimpleBlockChooser | Tracks which blocks have been completed, how many attempts have been made for which blocks,
 allows choosing a random block, failing a block etc. | 
| SimpleBlockSet | Simple BlockSet implementation, keeps all keys in RAM. | 
| SimpleHealingQueue | |
| SimpleSingleFileFetcher | Fetch a single block file. | 
| SingleBlockInserter | Insert a single block. | 
| SingleFileFetcher | Does most of the complicated metadata handling for fetching single files. | 
| SingleFileFetcher.MyUSKFetcherCallback | |
| SingleFileStreamGenerator | Writes a  Bucketto an output stream. | 
| SingleKeyListener | |
| SplitFileFetcher | Splitfile fetcher based on keeping as much state as possible, and in particular the downloaded blocks,
 in a single file. | 
| SplitFileFetcherCrossSegmentStorage | Cross-segments are "in parallel" with the main segments, an interlaced Reed-Solomon scheme 
 similar to that used on CD's, allowing us to fill in blocks from other segments. | 
| SplitFileFetcherGet | Actually does the splitfile fetch. | 
| SplitFileFetcherKeyListener | |
| SplitFileFetcherSegmentBlockChooser | |
| SplitFileFetcherSegmentSendableRequestItem | |
| SplitFileFetcherSegmentStorage | Represents a single segment, in memory and on disk. | 
| SplitFileFetcherStorage | Stores the state for a SplitFileFetcher, persisted to a LockableRandomAccessBuffer (i.e. | 
| SplitFileInserter | Top level class for a splitfile insert. | 
| SplitFileInserterCrossSegmentStorage | |
| SplitFileInserterSegmentBlockChooser | Tracks retry count and completion status for blocks in an insert segment. | 
| SplitFileInserterSegmentStorage | A single segment within a splitfile to be inserted. | 
| SplitFileInserterSender | Interface to the low level insertion code for inserting a splitfile. | 
| SplitFileInserterStorage | Similar to SplitFileFetcherStorage. | 
| SplitFileSegmentKeys | Contains the keys for a splitfile segment, in an efficient compressed form. | 
| USKDateHint | Utility class for date-based edition hints | 
| USKFetcher | On 0.7, this shouldn't however take more than 10 seconds or so; these are SSKs
 we are talking about. | 
| USKFetcherWrapper | Wrapper for a backgrounded USKFetcher. | 
| USKInserter | Insert a USK. | 
| USKManager | Tracks the latest version of every known USK. | 
| USKProxyCompletionCallback | Passes everything through, except that is updates the lastKnownGood on the USKManager,
 and has some code to handle new URIs. | 
| USKRetriever | Poll a USK, and when a new slot is found, fetch it. | 
| USKSparseProxyCallback | Proxy class to only pass through latest-slot updates after an onRoundFinished(). | 
| Enum | Description | 
|---|---|
| USKDateHint.Type | 
| Exception | Description | 
|---|---|
| BinaryBlobFormatException | |
| BinaryBlobWriter.BinaryBlobAlreadyClosedException | |
| NoValidBlocksException | |
| PersistenceDisabledException | |
| TooManyFilesInsertException | Thrown when there are too many files in a single folder (directory) for an insert. | 
Client layer core classes (implementation of actually fetching files etc).
for a description of the overall architecture of the client layer.
 
 This package is mainly for classes that actually run high-level requests, inserts, site 
 inserts, etc. The major components here:
 - @see ClientRequester The top level requests: A site insert, a fetch for a key on 
 Freenet (which may involve following redirects, unpacking containers, splitfiles, etc), an 
 insert of a file etc. E.g. @see ClientGetter
- @see ClientGetState The current stage in a request. E.g. fetch a block and follow the 
 metadata and redirects if necessary (@see SingleFileFetcher), or download a splitfile (@see
 SplitFileFetcher).
- @see ClientPutState The current stage in an insert. E.g. insert a single block (@see 
 SingleBlockInserter), or a splitfile (@see SplitFileInserter).
- Code for actually choosing which request to start. ClientRequestScheduler is an interface 
 class, the actual request selection tree is on ClientRequestSelector. We keep a separate 
 structure (mostly Bloom filters) using KeyListeners to identify which block belongs to which
 client, as we will often be offered blocks, or fetch them on behalf of other nodes. This is kept
 by ClientRequestSchedulerCore for persistent requests and ClientRequestSchedulerNonPersistent 
 for transient requests.
- The cooldown queue: @see CooldownTracker. This is used to ensure that we don't keep on 
 selecting the same request repeatedly, while choosing requests efficiently.
, 
for a closely related mechanism at the node level.
 - USK-related code
- The healing queue
- Misc persistence-related code, @see ClientLayerPersister for the persistence architecture.
The main connections to other layers: Code which uses the client layer:
 - @see freenet.client.HighLevelSimpleClient (a lightweight API used both internally and 
 by some plugins)
- @see freenet.clients.fcp The interface to external FCP clients
- Some code and plugins use the classes here directly.
Code which the client layer uses:
 - @see freenet.client Support classes for MIME type handling, container handling, etc
- @see freenet.node.SendableRequest The actual implementation of sending requests
- @see freenet.support Especially @see freenet.support.RandomGrabArray and related classes
- @see freenet.client.events Events are sent to other layers (especially FCP)
- @see freenet.client.filter Content filtering code. Content filtering is implemented in the 
 client layer for various reasons.