package com.limegroup.gnutella.altlocs; import java.io.IOException; import org.limewire.io.IpPort; import com.limegroup.gnutella.PushEndpoint; import com.limegroup.gnutella.RemoteFileDesc; import com.limegroup.gnutella.URN; public interface AlternateLocationFactory { /** * Creates a new <tt>AlternateLocation</tt> for a file stored locally * with the specified <tt>URN</tt>. * <p> * Note: the altloc created this way does not know the name of the file. * * @param urn the <tt>URN</tt> of the locally stored file */ public AlternateLocation create(URN urn); /** * Creates a new <tt>AlternateLocation</tt> for the data stored in * a <tt>RemoteFileDesc</tt>. * * @param rfd the <tt>RemoteFileDesc</tt> to use in creating the * <tt>AlternateLocation</tt> * @return a new <tt>AlternateLocation</tt> * @throws <tt>IOException</tt> if the <tt>rfd</tt> does not contain * a valid urn or if it's a private address * @throws <tt>NullPointerException</tt> if the <tt>rfd</tt> is * <tt>null</tt> * @throws <tt>IOException</tt> if the port is invalid */ public AlternateLocation create(final RemoteFileDesc rfd) throws IOException; /** * Creates a new push AlternateLocation. */ public AlternateLocation createPushAltLoc(PushEndpoint pe, URN urn); /** * Creates a new direct AlternateLocation from information that was * found in the DHT. */ public AlternateLocation createDirectDHTAltLoc(IpPort ipp, URN urn, long fileSize, byte[] ttroot) throws IOException; /** * Creates a new direct AlternateLocation. */ public AlternateLocation createDirectAltLoc(IpPort ipp, URN urn) throws IOException; /** * Constructs a new <tt>AlternateLocation</tt> instance based on the * specified string argument and URN. The location created this way * assumes the name "ALT" for the file. * * @param location a string containing one of the following: * "http://my.address.com:port#/uri-res/N2R?urn:sha:SHA1LETTERS" or * "1.2.3.4[:6346]" or * http representation of a PushEndpoint. * <p> * If the first is given, then the SHA1 in the string MUST match * the SHA1 given. * * @param URN the urn to use when the location doesn't contain a URN * @param tlsCapable if the alternate location is capable of receiving * TLS connections. valid only if the location was * not a full URL. * * @throws <tt>IOException</tt> if there is any problem constructing * the new instance. */ public AlternateLocation create(String location, URN urn, boolean tlsCapable) throws IOException; /** * Constructs a new <tt>AlternateLocation</tt> instance based on the * specified string argument and URN. The location created this way * assumes the name "ALT" for the file. * * @param location a string containing one of the following: * "http://my.address.com:port#/uri-res/N2R?urn:sha:SHA1LETTERS" or * "1.2.3.4[:6346]" or * http representation of a PushEndpoint. * <p> * If the first is given, then the SHA1 in the string MUST match * the SHA1 given. * * @param URN the urn to use when the location doesn't contain a URN * * @throws <tt>IOException</tt> if there is any problem constructing * the new instance. */ public AlternateLocation create(final String location, final URN urn) throws IOException; }