/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.client;
import java.util.HashMap;
import java.util.Set;
import freenet.client.async.ClientGetCallback;
import freenet.client.async.ClientGetter;
import freenet.client.async.ClientPutCallback;
import freenet.client.async.ClientPutter;
import freenet.client.events.ClientEventListener;
import freenet.keys.FreenetURI;
import freenet.node.RequestClient;
import freenet.support.api.Bucket;
public interface HighLevelSimpleClient {
/**
* Set the maximum length of the fetched data.
*/
public void setMaxLength(long maxLength);
/**
* Set the maximum length of any intermediate data, e.g. ZIP manifests.
*/
public void setMaxIntermediateLength(long maxIntermediateLength);
/**
* Blocking fetch of a URI
* @throws FetchException If there is an error fetching the data
*/
public FetchResult fetch(FreenetURI uri) throws FetchException;
/**
* Blocking fetch from metadata
* @throws FetchException If there is an error fetching the data
*/
public FetchResult fetchFromMetadata(Bucket initialMetadata) throws FetchException;
/**
* Blocking fetch of a URI with a configurable max-size.
* @param maxSize The maximum size in bytes of the return data or any intermediary data processed
* to obtain the final output (e.g. containers).
*/
public FetchResult fetch(FreenetURI uri, long maxSize) throws FetchException;
/**
* Blocking fetch of a URI with a configurable max-size and context object.
* @param context Used mainly for scheduling, we round-robin between request clients within a given
* priority and retry count. Also indicates whether the request is persistent, and if so, can remove it.
*/
public FetchResult fetch(FreenetURI uri, long maxSize, RequestClient context) throws FetchException;
/**
* Non-blocking fetch of a URI with a configurable max-size (in bytes), context object, callback and context.
* Will return immediately, the callback will be called later.
* @param callback Will be called when the request completes, fails, etc. If the request is persistent
* this will be called on the database thread with a container parameter.
* @param fctx Fetch context so you can customise the search process.
* @return The ClientGetter object, which will have been started already.
*/
public ClientGetter fetch(FreenetURI uri, ClientGetCallback callback, FetchContext fctx, short prio) throws FetchException;
/**
* Non-blocking fetch of a URI with a configurable max-size (in bytes), context object, callback and context.
* Will return immediately, the callback will be called later.
* @param callback Will be called when the request completes, fails, etc. If the request is persistent
* this will be called on the database thread with a container parameter.
* @param fctx Fetch context so you can customise the search process.
* @return The ClientGetter object, which will have been started already.
*/
public ClientGetter fetchFromMetadata(Bucket initialMetadata, ClientGetCallback callback, FetchContext fctx, short prio) throws FetchException;
/**
* Non-blocking fetch of a URI with a configurable max-size (in bytes), context object, callback and context.
* Will return immediately, the callback will be called later.
* @param callback Will be called when the request completes, fails, etc. If the request is persistent
* this will be called on the database thread with a container parameter.
* @param fctx Fetch context so you can customise the search process.
* @param maxSize IGNORED. FIXME DEPRECATE
* @return The ClientGetter object, which will have been started already.
*/
public ClientGetter fetch(FreenetURI uri, long maxSize, ClientGetCallback callback, FetchContext fctx) throws FetchException;
/**
* Non-blocking fetch of a URI with a configurable max-size (in bytes), context object, callback and context.
* Will return immediately, the callback will be called later.
* @param callback Will be called when the request completes, fails, etc. If the request is persistent
* this will be called on the database thread with a container parameter.
* @param fctx Fetch context so you can customise the search process.
* @param priorityClass What priority to start at. It is much more efficient to specify it here than to change it later.
* @return The ClientGetter object, which will have been started already.
*/
public ClientGetter fetch(FreenetURI uri, long maxSize, ClientGetCallback callback, FetchContext fctx, short priorityClass) throws FetchException;
/**
* Blocking insert.
* @param filenameHint If set, insert a single-file manifest containing only this file, under the given filename.
* @throws InsertException If there is an error inserting the data
*/
public FreenetURI insert(InsertBlock insert, boolean getCHKOnly, String filenameHint) throws InsertException;
/**
* Blocking insert.
* @param filenameHint If set, insert a single-file manifest containing only this file, under the given filename.
* @throws InsertException If there is an error inserting the data
*/
public FreenetURI insert(InsertBlock insert, boolean getCHKOnly, String filenameHint, short priority) throws InsertException;
/**
* Blocking insert.
* @param filenameHint If set, insert a single-file manifest containing only this file, under the given filename.
* @throws InsertException If there is an error inserting the data
*/
public FreenetURI insert(InsertBlock insert, String filenameHint, short priority, InsertContext ctx) throws InsertException;
/**
* Non-blocking insert.
* @param isMetadata If true, insert metadata.
* @param cb Will be called when the insert completes. If the request is persistent
* this will be called on the database thread with a container parameter.
* @param ctx Insert context so you can customise the insertion process.
*/
public ClientPutter insert(InsertBlock insert, String filenameHint, boolean isMetadata, InsertContext ctx, ClientPutCallback cb) throws InsertException;
/**
* Non-blocking insert.
* @param isMetadata If true, insert metadata.
* @param cb Will be called when the insert completes. If the request is persistent
* this will be called on the database thread with a container parameter.
* @param ctx Insert context so you can customise the insertion process.
*/
public ClientPutter insert(InsertBlock insert, String filenameHint, boolean isMetadata, InsertContext ctx, ClientPutCallback cb, short priority) throws InsertException;
/**
* Blocking insert of a redirect.
*/
public FreenetURI insertRedirect(FreenetURI insertURI, FreenetURI target) throws InsertException;
/**
* Blocking insert of multiple files as a manifest (or zip manifest, etc).
* The map can contain either string -> bucket, string -> manifestitem or string -> map, the latter
* indicating subdirs.
*/
public FreenetURI insertManifest(FreenetURI insertURI, HashMap<String, Object> bucketsByName, String defaultName) throws InsertException;
/**
* Blocking insert of multiple files as a manifest (or zip manifest, etc).
* The map can contain either string -> bucket, string -> manifestitem or string -> map, the latter
* indicating subdirs.
*/
public FreenetURI insertManifest(FreenetURI insertURI, HashMap<String, Object> bucketsByName, String defaultName, short priorityClass) throws InsertException;
/**
* Blocking insert of multiple files as a manifest, with a crypto key override.
*/
public FreenetURI insertManifest(FreenetURI insertURI, HashMap<String, Object> bucketsByName, String defaultName, short priorityClass, byte[] forceCryptoKey) throws InsertException;
/**
* Get the FetchContext so you can customise the search process. Has settings for all sorts of things
* such as how many times to retry each block, whether to follow redirects, whether to open containers,
* etc. IMPORTANT: This is created new for each and every request! Changing settings here will not
* change them on fetch()'es unless you pass the modified FetchContext in to the fetch() call.
*/
public FetchContext getFetchContext();
public FetchContext getFetchContext(long size);
/**
* Get an InsertContext. Has settings for controlling the insertion process, for example which
* compression algorithms to try.
* @param forceNonPersistent If true, force the request to use the non-persistent
* bucket pool.
*/
public InsertContext getInsertContext(boolean forceNonPersistent);
/**
* Add a ClientEventListener.
*/
public void addEventHook(ClientEventListener listener);
/**
* Generates a new key pair, consisting of the insert URI at index 0 and the
* request URI at index 1.
*
* @param docName
* The document name
* @return An array containing the insert and request URI
*/
public FreenetURI[] generateKeyPair(String docName);
/**
* Prefetch a key at a very low priority. If it hasn't been fetched within the timeout,
* kill the fetch.
* @param allowedTypes Kill the request if the MIME type is not one of these types. Normally null.
*/
public void prefetch(FreenetURI uri, long timeout, long maxSize, Set<String> allowedTypes);
/**
* Prefetch a key at the given priority. If it hasn't been fetched within the timeout,
* kill the fetch.
* @param allowedTypes Kill the request if the MIME type is not one of these types. Normally null.
*/
public void prefetch(FreenetURI uri, long timeout, long maxSize, Set<String> allowedTypes, short prio);
public HighLevelSimpleClient clone();
}