package org.limewire.bittorrent; import java.io.File; import java.io.IOException; import java.net.URI; import java.util.List; import java.util.concurrent.locks.Lock; import org.limewire.bittorrent.TorrentTrackerScraper.ScrapeCallback; /** * The torrent manager allows for adding an removing torrents, as well as * controlling shared torrent features. * * When multiple method calls need to be called in tandem and must be valid * across calls the provided getLock method can be used to get a lock, so the * calls will stay consistent across the multiple methods. * * One thing to note, when sharing locks between the torrent manager and * individual torrents. The torrent manager must be locked first, before any * torrents are lock. If this is not adhered to then a deadlock situacion might * occur. */ public interface TorrentManager { /** * Removes torrent from control of the torrent manager. Also delegates a * remove torrent call to the libtorrent wrapper library. */ public void removeTorrent(Torrent torrent); /** * Registers the specified torrent with the TorrentManager. Delegates an add * torrent call to the underlying libtorrent wrapper library. * * Returns the torrent if it was successfully added, null otherwise. */ public Torrent addTorrent(TorrentParams params) throws IOException; /** * Returns the torrent for the given torrent file if found. null otherwise. */ public Torrent getTorrent(File torrentFile); /** * Returns the torrent for the given sha1 if found. null otherwise. */ public Torrent getTorrent(String sha1); /** * Returns true if the TorrentManager loaded properly and is in a valid * state. */ public boolean isValid(); /** * Returns true if the torrent manager currently had a torrent registered * with the specified torrent file, and the torrent is not finished * downloading yet. */ public boolean isDownloadingTorrent(File torrentFile); /** * Updates the torrent manager with any new setting values. */ void setTorrentManagerSettings(TorrentManagerSettings settings); /** * Returns the current TorrentSettings object set on the torrent session. */ public TorrentManagerSettings getTorrentManagerSettings(); /** * Starts the torrent manager, and its necessary worker threads. */ public void start(); /** * Shuts down the torrent manager, and any needed threads. */ public void stop(); /** * Initializes this torrent manager. */ public void initialize(); /** * Set a way to filter peers based on IP Address, where IP is represented as * network byte order integer * * @param ipFilter the filter to apply */ public void setIpFilter(TorrentIpFilter ipFilter); /** * Returns true if the torrent manager is initialized. */ public boolean isInitialized(); /** * Returns a snapshot list of the torrents that are currently in the torrent * manager. */ public List<Torrent> getTorrents(); /** * Returns a lock for the torrent manager. Locking is only required if state * needs to be consistent across multiple method calls. Otherwise locking is * done internally for single method calls. */ public Lock getLock(); /** * Stops the mainline bittorrent dht. */ public void stopDHT(); /** * Starts the mainline bittorrent dht. Using the given file to help * bootstrap its state. */ public void startDHT(File dhtStateFile); /** * Starts upnp for the torrents. */ public void startUPnP(); /** * Stops upnp for the torrents. */ public void stopUPnP(); /** * Returns true if upnp has been started. */ public boolean isUPnPStarted(); /** * Returns true if the dht has been started. */ public boolean isDHTStarted(); /** * Saves the current dht state into the given file. */ public void saveDHTState(File dhtStateFile); /** * Sets the peer proxy for this torrent manager. Trying to set to an http * proxy will have the same effect as passing in a null proxy. The proxy * will be removed. */ public void setPeerProxy(ProxySetting proxy); /** * Sets the web seed proxy for this torrent manager. The proxy can be * removed by setting to null. */ public void setWebSeedProxy(ProxySetting proxy); /** * Sets the dht proxy for this torrent manager. Trying to set to an http * proxy will have the same effect as passing in a null proxy. The proxy * will be removed. */ public void setDHTProxy(ProxySetting proxy); /** * Sets the tracker proxy for this torrent manager. It only effects http * tracker connections if the proxy is an http proxy. If the proxy supports * udp, udp tracker connections will be effected as well. The proxy can be * removed by setting to null. */ public void setTrackerProxy(ProxySetting proxy); public void queueTrackerScrapeRequest(String hexSha1Urn, URI trackerUri, ScrapeCallback callback); }