Class 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 Detail

      • MetaInfo

        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
      • 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 Detail

      • 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

        byte[] getPieceHashes()
        Returns the piece hashes. Only used by storage so package local.
      • 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.
      • 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