package com.limegroup.gnutella;
import java.net.InetAddress;
import org.apache.http.protocol.HttpRequestHandler;
import com.limegroup.gnutella.library.FileDesc;
/**
* Defines the requirements for classes that manage Gnutella uploads.
*/
public interface UploadManager extends BandwidthTracker {
/**
* Return the last value that was measured by
* {@link BandwidthTracker#getMeasuredBandwidth()}.
*
* @return bandwidth in KB / s
*/
float getLastMeasuredBandwidth();
/**
* Returns the number of queued uploads.
*/
int getNumQueuedUploads();
/**
* Returns the number of uploads excluding forced uploads.
*/
int uploadsInProgress();
/**
* Returns true if this has ever successfully uploaded a file during this
* session.
* <p>
* This method was added to adopt more of the BearShare QHD standard.
*/
boolean hadSuccesfulUpload();
/**
* Returns true if any uploader is conneected to <code>addr</code>.
*/
boolean isConnectedTo(InetAddress addr);
/**
* Returns whether or not an upload request can be serviced immediately. In
* particular, if there are more available upload slots than queued uploads
* this will return true.
*/
boolean isServiceable();
/**
* Stops all uploads that are uploading <code>fd</code>.
*/
boolean killUploadsForFileDesc(FileDesc fd);
/**
* Returns if an incoming query (not actual upload request) may be
* serviceable.
*/
boolean mayBeServiceable();
/**
* Returns the estimated upload speed in <b>KILOBITS/s</b> [sic] of the
* next transfer, assuming the client (i.e., downloader) has infinite
*/
int measuredUploadSpeed();
/**
* Registers {@link HttpRequestHandler}s with <code>acceptor</code>.
*/
void start();
/**
* Deregisters {@link HttpRequestHandler}s with <code>acceptor</code>.
*/
void stop();
}