package com.limegroup.gnutella.altlocs; import com.limegroup.gnutella.RemoteFileDesc; import com.limegroup.gnutella.URN; import com.limegroup.gnutella.downloader.RemoteFileDescFactory; import com.limegroup.gnutella.http.HTTPHeaderValue; /** * This interface defines classes that encapsulate the data for an alternate resource location, as * specified in HUGE v0.93. This also provides utility methods for such * operations as comparing alternate locations based on the date they were * stored. * * Firewalled hosts can also be alternate locations, although the format is * slightly different. */ public interface AlternateLocation extends HTTPHeaderValue, Comparable<AlternateLocation> { /** * The vendor to use. */ public static final String ALT_VENDOR = "ALT"; /** * The three types of medium altlocs travel through. */ public static final int MESH_PING = 0; public static final int MESH_LEGACY = 1; public static final int MESH_RESPONSE = 2; /** * Accessor for the SHA1 urn for this <tt>AlternateLocation</tt>. * <p> * @return the SHA1 urn for the this <tt>AlternateLocation</tt> */ URN getSHA1Urn(); /** * Accessor to find if this has been demoted. */ int getCount(); /** * package access, accessor to the value of _demoted. */ boolean isDemoted(); /** * Creates a new <tt>RemoteFileDesc</tt> from this AlternateLocation. * * @param size the size of the file for the new <tt>RemoteFileDesc</tt> * -- this is necessary to make sure the download bucketing works * correctly * @return new <tt>RemoteFileDesc</tt> based off of this, or * <tt>null</tt> if the <tt>RemoteFileDesc</tt> could not be created */ RemoteFileDesc createRemoteFileDesc(long size, RemoteFileDescFactory remoteFileDescFactory); /** * * @return whether this is an alternate location pointing to myself. */ boolean isMe(); /** * Increment the count. * @see demote */ void increment(); /** * Could return null. */ AlternateLocation createClone(); void send(long now, int meshType); boolean canBeSent(int meshType); boolean canBeSentAny(); }