/*
* File : Torrent.java
* Created : 08-Dec-2003
* By : parg
*
* Azureus - a Java Bittorrent client
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.gudy.azureus2.plugins.torrent;
/**
* @author parg
*
*/
import java.io.File;
import java.net.URL;
import java.util.Map;
public interface
Torrent
{
public String
getName();
public URL
getAnnounceURL();
public void
setAnnounceURL(
URL url );
/**
* get the announce list for multi-tracker torrents. Will always be present but
* may contain 0 sets which means that this is not a multi-tracker torrent
* @return
*/
public TorrentAnnounceURLList
getAnnounceURLList();
public byte[]
getHash();
/**
* If size is 0 then this is an "external" torrent and we only know its hash (and name
* constructed from hash). e.g. we don't know file details
* @return
*/
public long
getSize();
public String
getComment();
public void
setComment(
String comment );
public long
getCreationDate();
public String
getCreatedBy();
public long
getPieceSize();
public long
getPieceCount();
public byte[][]
getPieces();
public TorrentFile[]
getFiles();
public String
getEncoding();
public void
setEncoding(
String encoding)
throws TorrentEncodingException;
public void
setDefaultEncoding()
throws TorrentEncodingException;
/**
* Access to top-level properties in the torrent
* @param name
* @return
*/
public Object
getAdditionalProperty(
String name );
/**
* Removal all non-standard properties (excluding plugin-properties below)
* @return
*/
public Torrent
removeAdditionalProperties();
/**
* Set a property specific to this plugin
* @param name
* @param value
*/
public void
setPluginStringProperty(
String name,
String value );
/**
* Get a property specific to this plugin
* @param name
* @return
*/
public String
getPluginStringProperty(
String name );
/**
* Sets a map property in the torrent, retrievable via getMapProperty
* @param name should be unique across plugins (i.e. prefix it with something unique)
* @param value bencodable Map value
*/
public void
setMapProperty(
String name,
Map value );
/**
* Gets a previously set map value
* @see setMapProperty
* @param name should be unique across plugins (i.e. prefix it with something unique)
* @return
*/
public Map
getMapProperty(
String name );
/**
* A decentralised torrent uses the DHT only as a "tracker"
* @return
*/
public boolean
isDecentralised();
/**
* Decentralised backup permits the DHT to be used as a tracker when the
* "real" tracker is unavailable
* @return
*/
public boolean
isDecentralisedBackupEnabled();
/**
* By default torrents with OK trackers are not tracked in the DHT. This allows a specific
* torrent to be marked so that it will be
* @param requested
*/
public void
setDecentralisedBackupRequested(
boolean requested );
public boolean
isDecentralisedBackupRequested();
/**
* A private torrent is either explicitly private via info/private or
* has decentralised backup disabled and peer exchange disabled
* @return
*/
public boolean
isPrivate();
public void
setPrivate(
boolean priv );
/**
* @since 2501
* @return
*/
public boolean
wasCreatedByUs();
/**
* Gets the magnet URI for the torrent - throws exception if not available
* @return
*/
public URL
getMagnetURI()
throws TorrentException;
public Map
writeToMap()
throws TorrentException;
public void
writeToFile(
File file )
throws TorrentException;
public byte[]
writeToBEncodedData()
throws TorrentException;
/**
* Saves the torrent to its persistent location
* @throws TorrentException
*/
public void
save()
throws TorrentException;
/**
* sets the torrent complete - i.e. ready for seeding. Doing this avoids
* a recheck on torrent addition
* @param data_dir
* @throws TorrentException
*/
public void
setComplete(
File data_dir )
throws TorrentException;
public boolean
isComplete();
/**
* Returns <tt>true</tt> if the torrent is a single file torrent,
* <tt>false</tt> if it is a multi file torrent.
*
* @since 3.0.4.3
*/
public boolean isSimpleTorrent();
}