/** <p>Client layer core classes (implementation of actually fetching files etc).</p> * * @see freenet.client for a description of the overall architecture of the client layer. * * <p>This package is mainly for classes that actually run high-level requests, inserts, site * inserts, etc. The major components here:</p> * <ul><li>@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</li> * <li>@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).</li> * <li>@see ClientPutState The current stage in an insert. E.g. insert a single block (@see * SingleBlockInserter), or a splitfile (@see SplitFileInserter).</li> * <li>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.</li> * <li>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. * @see freenet.node.FailureTable for a closely related mechanism at the node level.</li> * <li>USK-related code</li> * <li>The healing queue</li> * <li>Misc persistence-related code, @see ClientLayerPersister for the persistence architecture.</li> * </ul> * * <p>The main connections to other layers: Code which uses the client layer:</p> * <ul><li>@see freenet.client.HighLevelSimpleClient (a lightweight API used both internally and * by some plugins)</li> * <li>@see freenet.clients.fcp The interface to external FCP clients</li> * <li>Some code and plugins use the classes here directly.</li></ul> * <p>Code which the client layer uses:</p> * <ul><li>@see freenet.client Support classes for MIME type handling, container handling, etc</li> * <li>@see freenet.node.SendableRequest The actual implementation of sending requests</li> * <li>@see freenet.support Especially @see freenet.support.RandomGrabArray and related classes</li> * <li>@see freenet.client.events Events are sent to other layers (especially FCP)</li> * <li>@see freenet.client.filter Content filtering code. Content filtering is implemented in the * client layer for various reasons.</li></ul> */ package freenet.client.async;