Class MetaInfo

java.lang.Object
org.klomp.snark.MetaInfo

public class MetaInfo extends Object
Note: this class is buggy, as it doesn't propogate custom meta fields into the bencoded info data, and from there to the info_hash. At the moment, though, it seems to work with torrents created by I2P-BT, I2PRufus and Azureus.
  • Constructor Details

    • MetaInfo

      public 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
      Parameters:
      announce - may be null
      files - null for single-file torrent
      lengths - null for single-file torrent
      announce_list - may be null
      created_by - may be null
      url_list - may be null
      comment - may be null
      Since:
      public since 0.9.53, was package private
    • MetaInfo

      public MetaInfo(InputStream in) throws IOException
      Creates a new MetaInfo from the given InputStream. The InputStream must start with a correctly bencoded dictonary describing the torrent. Caller must close the stream.
      Throws:
      IOException
    • MetaInfo

      public MetaInfo(Map<String,BEValue> m) throws InvalidBEncodingException
      Creates a new MetaInfo from a Map of BEValues and the SHA1 over the original bencoded info dictonary (this is a hack, we could reconstruct the bencoded stream and recalculate the hash). Will NOT throw a InvalidBEncodingException if the given map does not contain a valid announce string. WILL throw a InvalidBEncodingException if the given map does not contain a valid info dictionary.
      Throws:
      InvalidBEncodingException
  • Method Details

    • getNameAndInfoHash

      public static String getNameAndInfoHash(InputStream in, byte[] infoHashOut) throws IOException
      Efficiently returns the name and the 20 byte SHA1 hash of the info dictionary in a torrent file Caller must close stream.
      Parameters:
      infoHashOut - 20-byte out parameter
      Throws:
      IOException
      Since:
      0.8.5
    • getAnnounce

      public String getAnnounce()
      Returns the string representing the URL of the tracker for this torrent.
      Returns:
      may be null!
    • getAnnounceList

      public List<List<String>> getAnnounceList()
      Returns a list of lists of urls.
      Since:
      0.9.5
    • getWebSeedURLs

      public List<String> getWebSeedURLs()
      Returns a list of urls or null.
      Since:
      0.9.48
    • getInfoHash

      public byte[] getInfoHash()
      Returns the original 20 byte SHA1 hash over the bencoded info map.
    • getPieceHashes

      public byte[] getPieceHashes()
      Returns the piece hashes.
      Returns:
      not a copy, do not modify
      Since:
      public since 0.9.53, was package private
    • getName

      public String getName()
      Returns the requested name for the file or toplevel directory. If it is a toplevel directory name getFiles() will return a non-null List of file name hierarchy name.
    • isPrivate

      public boolean isPrivate()
      Is it a private torrent?
      Since:
      0.9
    • getFiles

      public List<List<String>> getFiles()
      Returns a list of lists of file name hierarchies or null if it is a single name. It has the same size as the list returned by getLengths().
    • isPaddingFile

      public boolean isPaddingFile(int filenum)
      Is this file a padding file?
      Since:
      0.9.48
    • getLengths

      public List<Long> getLengths()
      Returns a list of Longs indication the size of the individual files, or null if it is a single file. It has the same size as the list returned by getFiles().
    • getComment

      public String getComment()
      The comment string or null. Not available for locally-created torrents.
      Since:
      0.9.7
    • getCreatedBy

      public String getCreatedBy()
      The created-by string or null. Not available for locally-created torrents.
      Since:
      0.9.7
    • getCreationDate

      public long getCreationDate()
      The creation date (ms) or zero. As of 0.9.19, available for locally-created torrents.
      Since:
      0.9.7
    • getPieces

      public int getPieces()
      Returns the number of pieces.
    • getPieceLength

      public int getPieceLength(int piece)
      Return the length of a piece. All pieces are of equal length except for the last one (getPieces()-1).
      Throws:
      IndexOutOfBoundsException - when piece is equal to or greater then the number of pieces in the torrent.
    • checkPiece

      public 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. Returns random results or IndexOutOfBoundsExceptions when the piece number is unknown.
    • checkPiece

      boolean checkPiece(PartialPiece pp)
      Returns:
      good
      Since:
      0.9.1
    • getTotalLength

      public long getTotalLength()
      Returns the total length of the torrent in bytes. This includes any padding files.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • reannounce

      public MetaInfo reannounce(String announce) throws InvalidBEncodingException
      Creates a copy of this MetaInfo that shares everything except the announce URL. Drops any announce-list. Preserves infohash and info map, including any non-standard fields.
      Parameters:
      announce - may be null
      Throws:
      InvalidBEncodingException
    • getTorrentData

      public byte[] getTorrentData()
      Called by servlet to save a new torrent file generated from local data
    • getInfoBytes

      public byte[] getInfoBytes()
      Side effect: Caches infoBytesLength.
      Since:
      0.8.4
    • getInfoBytesLength

      public int getInfoBytesLength()
      The size of getInfoBytes(). Cached.
      Since:
      0.9.48
    • main

      public static void main(String[] args)
      Since:
      0.8.5