public class MetaInfo extends Object
This class parses and stores the metadata from .torrent files, including:
Note: This class has a known limitation where it doesn't propagate custom meta fields into the bencoded info data, and from there to the info_hash. However, it currently works with torrents created by I2P-BT, I2PRufus and Azureus.
| Constructor and Description |
|---|
MetaInfo(InputStream in)
Creates a new MetaInfo from the given InputStream.
|
MetaInfo(Map<String,BEValue> m)
Creates a new MetaInfo from a Map of BEValues and the SHA1 over the original bencoded info
dictionary (this is a hack, we could reconstruct the bencoded stream and recalculate the
hash).
|
MetaInfo(MetaInfo old,
String new_announce,
List<List<String>> new_announce_list,
String new_comment,
String new_created_by,
List<String> new_url_list)
Will not change infohash.
|
MetaInfo(String announce,
String name,
String name_utf8,
List<List<String>> files,
List<Long> lengths,
int piece_length,
byte[] piece_hashes,
long length,
boolean privateTorrent,
List<List<String>> announce_list,
String created_by,
List<String> url_list,
String comment)
Called by Storage when creating a new torrent from local data
|
MetaInfo(String announce,
String name,
String name_utf8,
List<List<String>> files,
List<Long> lengths,
int piece_length,
byte[] piece_hashes,
long length,
int privateTorrent,
List<List<String>> announce_list,
String created_by,
List<String> url_list,
String comment)
Preserves privateTorrent int value, for main()
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
checkPiece(int piece,
byte[] bs,
int off,
int length)
Checks that the given piece has the same SHA1 hash as the given byte array.
|
(package private) boolean |
checkPiece(PartialPiece pp) |
String |
getAnnounce()
Returns the string representing the URL of the tracker for this torrent.
|
List<List<String>> |
getAnnounceList()
Returns a list of lists of urls.
|
String |
getComment()
The comment string or null.
|
String |
getCreatedBy()
The created-by string or null.
|
long |
getCreationDate()
The creation date (ms) or zero.
|
List<List<String>> |
getFiles()
Returns a list of lists of file name hierarchies or null if it is a single name.
|
byte[] |
getInfoBytes()
Side effect: Caches infoBytesLength.
|
int |
getInfoBytesLength()
The size of getInfoBytes().
|
byte[] |
getInfoHash()
Returns the original 20 byte SHA1 hash over the bencoded info map.
|
List<Long> |
getLengths()
Returns a list of Longs indication the size of the individual files, or null if it is a
single file.
|
String |
getName()
Returns the requested name for the file or toplevel directory.
|
static String |
getNameAndInfoHash(InputStream in,
byte[] infoHashOut)
Efficiently returns the name and the 20 byte SHA1 hash of the info dictionary in a torrent
file Caller must close stream.
|
byte[] |
getPieceHashes()
Returns the piece hashes.
|
int |
getPieceLength(int piece)
Return the length of a piece.
|
int |
getPieces()
Returns the number of pieces.
|
int |
getPrivateTrackerStatus() |
byte[] |
getTorrentData()
Called by servlet to save a new torrent file generated from local data
|
long |
getTotalLength()
Returns the total length of the torrent in bytes.
|
List<String> |
getWebSeedURLs()
Returns a list of urls or null.
|
boolean |
isPaddingFile(int filenum)
Is this file a padding file?
|
boolean |
isPrivate()
Is it a private torrent?
|
static void |
main(String[] args) |
MetaInfo |
reannounce(String announce)
Creates a copy of this MetaInfo that shares everything except the announce URL.
|
String |
toString() |
public MetaInfo(InputStream in) throws IOException
IOExceptionpublic MetaInfo(Map<String,BEValue> m) throws InvalidBEncodingException
InvalidBEncodingExceptionpublic MetaInfo(MetaInfo old, String new_announce, List<List<String>> new_announce_list, String new_comment, String new_created_by, List<String> new_url_list)
new_announce - may be nullnew_announce_list - may be nullnew_comment - may be nullnew_created_by - may be nullnew_url_list - may be nullpublic MetaInfo(String announce, String name, String name_utf8, List<List<String>> files, List<Long> lengths, int piece_length, byte[] piece_hashes, long length, boolean privateTorrent, List<List<String>> announce_list, String created_by, List<String> url_list, String comment)
announce - may be nullfiles - null for single-file torrentlengths - null for single-file torrentannounce_list - may be nullcreated_by - may be null and will be ignoredurl_list - may be nullcomment - may be nullpublic MetaInfo(String announce, String name, String name_utf8, List<List<String>> files, List<Long> lengths, int piece_length, byte[] piece_hashes, long length, int privateTorrent, List<List<String>> announce_list, String created_by, List<String> url_list, String comment)
public boolean checkPiece(int piece,
byte[] bs,
int off,
int length)
boolean checkPiece(PartialPiece pp)
public String getAnnounce()
public String getComment()
public String getCreatedBy()
public long getCreationDate()
public List<List<String>> getFiles()
public byte[] getInfoBytes()
public int getInfoBytesLength()
public byte[] getInfoHash()
public List<Long> getLengths()
public String getName()
public static String getNameAndInfoHash(InputStream in, byte[] infoHashOut) throws IOException
infoHashOut - 20-byte out parameterIOExceptionpublic byte[] getPieceHashes()
public int getPieceLength(int piece)
getPieces()-1).IndexOutOfBoundsException - when piece is equal to or greater then the number of pieces
in the torrent.public int getPieces()
public int getPrivateTrackerStatus()
public byte[] getTorrentData()
public long getTotalLength()
public boolean isPaddingFile(int filenum)
public boolean isPrivate()
public static void main(String[] args)
public MetaInfo reannounce(String announce) throws InvalidBEncodingException
announce - may be nullInvalidBEncodingException