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 use by 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)Checks a piece against the stored hashes using a PartialPiece. |
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. |
byte[] | getPieceHashes()Returns the piece hashes. |
int | getPieceLength(int piece)Return the length of a piece. |
int | getPieces()Returns the number of pieces in the torrent. |
int | getPrivateTrackerStatus() |
byte[] | getTorrentData()Returns the bencoded torrent file data. |
long | getTotalLength()Returns the total length of the torrent in bytes. |
List<String> | getWebSeedURLs()Returns the web seed URLs for BEP 19 HTTP seeding. |
boolean | isPaddingFile(int filenum)Is this file a padding file? |
boolean | isPrivate()Is it a private torrent? |
static void | main(String[] args)Command-line utility to inspect and optionally modify torrent file metadata. |
MetaInfo | reannounce(String announce)Creates a copy of this MetaInfo that shares everything except the announce URL. |
String | toString()Returns a human-readable summary of this torrent's metadata. |
public MetaInfo(InputStream in) throws IOException
in - the stream containing the bencoded torrent dataIOException - if the stream cannot be read or the bencoded data is malformedpublic MetaInfo(Map<String,BEValue> m) throws InvalidBEncodingException
m - the parsed bencoded dictionary as a map of keys to BEValuesInvalidBEncodingException - if the info dictionary is missing or malformedpublic MetaInfo(MetaInfo old, String new_announce, List<List<String>> new_announce_list, String new_comment, String new_created_by, List<String> new_url_list)
old - the source MetaInfo whose infohash, name, files, and hashes are reusednew_announce - the replacement announce URL, may be nullnew_announce_list - tiered list of replacement announce URLs, may be nullnew_comment - replacement comment string, may be nullnew_created_by - replacement created-by string, may be nullnew_url_list - replacement web seed URLs, 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 - the tracker announce URL, may be nullname - the file or top-level directory namename_utf8 - unused, retained for API compatibilityfiles - list of file path components per file, null for single-file torrentlengths - list of file sizes in bytes, null for single-file torrentpiece_length - the length of each data piece in bytespiece_hashes - concatenated 20-byte SHA1 hashes of all pieceslength - total torrent size in bytesprivateTorrent - whether the tracker restricts peer sharing to the swarmannounce_list - tiered list of alternate announce URLs, may be nullcreated_by - application name that created the torrent, may be nullurl_list - web seed URLs for BEP 19 HTTP seeding, may be nullcomment - free-form user comment, 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)
announce - the tracker announce URL, may be nullname - the file or top-level directory namename_utf8 - unused, retained for API compatibilityfiles - list of file path components per file, null for single-file torrentlengths - list of file sizes in bytes, null for single-file torrentpiece_length - the length of each data piece in bytespiece_hashes - concatenated 20-byte SHA1 hashes of all pieceslength - total torrent size in bytesprivateTorrent - 0 = not present, 1 = private, -1 = explicitly not privateannounce_list - tiered list of alternate announce URLs, may be nullcreated_by - application name that created the torrent, may be nullurl_list - web seed URLs for BEP 19 HTTP seeding, may be nullcomment - free-form user comment, may be nullpublic boolean checkPiece(int piece,
byte[] bs,
int off,
int length)piece - the piece indexbs - the byte array containing the piece dataoff - the offset within the byte array where the piece data startslength - the number of bytes in the pieceIndexOutOfBoundsException - if the piece index is out of rangeboolean checkPiece(PartialPiece pp)
pp - the PartialPiece containing the piece data and hashpublic String getAnnounce()
public List<List<String>> getAnnounceList()
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
in - the stream containing the bencoded torrent datainfoHashOut - 20-byte array that receives the info hashIOException - if the stream cannot be read or the data is malformedpublic 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 List<String> getWebSeedURLs()
public boolean isPaddingFile(int filenum)
filenum - the index of the file in the files listpublic boolean isPrivate()
public static void main(String[] args)
args - command-line argumentspublic MetaInfo reannounce(String announce) throws InvalidBEncodingException
announce - may be nullInvalidBEncodingException