/**
*
*/
package org.torrent.internal.transfer;
import org.torrent.internal.data.BTPart;
import org.torrent.internal.peer.connection.BTConnection;
public interface RequestProvider {
/**
* Invoked to generate a part to request. The returned part should be unique
* for the given connection, that is - any given uncanceled part shouldn't
* be allocated more than once per connection.
*
* @param download
* @param con
* @return
*/
BTPart allocateRequest(Download download, BTConnection con);
/**
* Called to check if a call to allocateRequest would succeed. This method
* is called due to performance reasons and is expected to return faster
* than allocateRequest.
*
* @param download
* @param con
* @return
*/
boolean couldAllocateRequest(Download download, BTConnection con);
/**
* Invoked to cancel a request previously allocated.
*
* @param download
* @param con
* @param pieceInfo
*/
void cancelRequest(Download download, BTConnection con, BTPart pieceInfo);
/**
* Cancels all remaining requests of a connection.
*
* @param download
* @param con
*/
void cancelAllRequests(Download download, BTConnection con);
}