package com.limegroup.gnutella.uploader;
import java.io.IOException;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.protocol.HttpContext;
/**
* Defines the callback interface for response handlers to the upload manager
* which provides methods for managing uploaders.
*/
public interface HTTPUploadSessionManager {
enum QueueStatus { UNKNOWN, BYPASS, REJECTED, QUEUED, ACCEPTED, BANNED };
/**
* Returns an uploader for <code>request</code>. If the previous request
* was for <code>filename</code> as well an existing uploader is returned;
* otherwise a new uploader is created.
*/
HTTPUploader getOrCreateUploader(HttpRequest request, HttpContext context,
UploadType type, String filename);
/**
* Returns an uploader for <code>request</code>. If the previous request
* was for <code>filename</code> as well an existing uploader is returned;
* otherwise a new uploader is created. FriendID may be null if this uploader
* is associated with a gnutella Upload.
*/
HTTPUploader getOrCreateUploader(HttpRequest request, HttpContext context,
UploadType type, String filename, String friendID);
/**
* Add <code>request</code> to the queue of uploaders.
*
* @return the queue status
* @see UploadSlotManager
*/
QueueStatus enqueue(HttpContext context, HttpRequest request);
/**
* Adds an accepted HTTPUploader to the internal list of active downloads.
*/
void addAcceptedUploader(HTTPUploader uploader, HttpContext context);
/**
* Adds <code>uploader</code> to the GUI if it is not visible, yet, and
* increments the attempted uploads.
*/
void sendResponse(HTTPUploader uploader, HttpResponse response);
/**
* Sets a response code and entity on <code>response</code> for handling
* requests from unsupported clients.
*/
void handleFreeLoader(HttpRequest request, HttpResponse response,
HttpContext context, HTTPUploader uploader) throws HttpException, IOException;
}