package com.limegroup.gnutella;
import java.io.IOException;
import java.io.InputStream;
import com.limegroup.gnutella.library.FileDesc;
import com.limegroup.gnutella.xml.LimeXMLDocument;
public interface ResponseFactory {
/**
* Creates a fresh new response.
*
* @requires index and size can fit in 4 unsigned bytes, i.e., 0 <= index,
* size < 2^32
*/
public Response createResponse(long index, long size, String name, URN urn);
/**
* Creates a new response with parsed metadata. Typically this is used to
* respond to query requests.
* @param doc the metadata to include
*/
public Response createResponse(long index, long size, String name,
LimeXMLDocument doc, URN urn);
/**
* Constructs a new <tt>Response</tt> instance from the data in the
* specified <tt>FileDesc</tt>. LimeXmlDocument is set by default if
* the data is available. It can be unset by calling response.setDocument(null)
* to save bandwidth over the wire.
*
* @param fd the <tt>FileDesc</tt> containing the data to construct this
* <tt>Response</tt> -- must not be <tt>null</tt>
*/
public Response createResponse(FileDesc fd);
/**
* Constructs a new <tt>Response</tt> instance from the data in the
* specified <tt>FileDesc</tt>. LimeXmlDocument is set by default if
* the data is available. It can be unset by calling response.setDocument(null)
* to save bandwidth over the wire.
*
* @param fd the <tt>FileDesc</tt> containing the data to construct this
* <tt>Response</tt> -- must not be <tt>null</tt>
* @param includeNMS1Urn whether the response should contain the
* non-metadata sha1 or not
*/
public Response createResponse(FileDesc fd, boolean includeNMS1Urn);
/**
* Factory method for instantiating individual responses from an
* <tt>InputStream</tt> instance.
*
* @param is the <tt>InputStream</tt> to read from
* @throws <tt>IOException</tt> if there are any problems reading from or
* writing to the stream
*/
public Response createFromStream(InputStream is) throws IOException;
}