Class TorrentUtils


  • public class TorrentUtils
    extends java.lang.Object
    • Field Detail

      • NO_VALID_URL_URL

        private static final java.lang.String NO_VALID_URL_URL
        See Also:
        Constant Field Values
      • TORRENT_FLAG_METADATA_TORRENT

        public static final int TORRENT_FLAG_METADATA_TORRENT
        See Also:
        Constant Field Values
      • TORRENT_FLAG_DISABLE_RCM

        public static final int TORRENT_FLAG_DISABLE_RCM
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_DHT_BACKUP_ENABLE

        private static final java.lang.String TORRENT_AZ_PROP_DHT_BACKUP_ENABLE
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_DHT_BACKUP_REQUESTED

        private static final java.lang.String TORRENT_AZ_PROP_DHT_BACKUP_REQUESTED
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_TORRENT_FLAGS

        private static final java.lang.String TORRENT_AZ_PROP_TORRENT_FLAGS
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_PLUGINS

        private static final java.lang.String TORRENT_AZ_PROP_PLUGINS
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_OBTAINED_FROM

        public static final java.lang.String TORRENT_AZ_PROP_OBTAINED_FROM
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_DISPLAY_NAME

        public static final java.lang.String TORRENT_AZ_PROP_DISPLAY_NAME
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_NETWORK_CACHE

        private static final java.lang.String TORRENT_AZ_PROP_NETWORK_CACHE
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_TAG_CACHE

        private static final java.lang.String TORRENT_AZ_PROP_TAG_CACHE
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_INITIAL_TAGS

        private static final java.lang.String TORRENT_AZ_PROP_INITIAL_TAGS
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_INITIAL_METADATA

        private static final java.lang.String TORRENT_AZ_PROP_INITIAL_METADATA
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_PEER_CACHE

        private static final java.lang.String TORRENT_AZ_PROP_PEER_CACHE
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_PEER_CACHE_VALID

        private static final java.lang.String TORRENT_AZ_PROP_PEER_CACHE_VALID
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_INITIAL_LINKAGE

        public static final java.lang.String TORRENT_AZ_PROP_INITIAL_LINKAGE
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_INITIAL_LINKAGE2

        public static final java.lang.String TORRENT_AZ_PROP_INITIAL_LINKAGE2
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_ORIGINAL_HASH

        public static final java.lang.String TORRENT_AZ_PROP_ORIGINAL_HASH
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_HASHTREE_STATE

        public static final java.lang.String TORRENT_AZ_PROP_HASHTREE_STATE
        See Also:
        Constant Field Values
      • TORRENT_AZ_PROP_HYBRID_HASH_V2

        public static final java.lang.String TORRENT_AZ_PROP_HYBRID_HASH_V2
        See Also:
        Constant Field Values
      • MEM_ONLY_TORRENT_PATH

        private static final java.lang.String MEM_ONLY_TORRENT_PATH
        See Also:
        Constant Field Values
      • PC_MARKER

        private static final long PC_MARKER
      • created_torrents

        private static final java.util.List<byte[]> created_torrents
      • created_torrents_set

        private static final java.util.Set<HashWrapper> created_torrents_set
      • tls

        private static final java.lang.ThreadLocal<java.util.Map<java.lang.String,​java.lang.Object>> tls
      • ignore_files_set

        private static java.util.Set<java.lang.String> ignore_files_set
      • skip_extensions_set

        private static java.util.Set<java.lang.String> skip_extensions_set
      • skip_file_set

        private static java.util.Set<java.lang.Object> skip_file_set
      • bSaveTorrentBackup

        private static boolean bSaveTorrentBackup
      • DNS_HANDLING_ENABLE

        private static boolean DNS_HANDLING_ENABLE
      • dns_mapping_seq_count

        private static volatile int dns_mapping_seq_count
      • dns_threads

        private static final ThreadPool dns_threads
      • torrent_delete_level

        static final java.util.concurrent.atomic.AtomicLong torrent_delete_level
      • torrent_delete_time

        static long torrent_delete_time
      • announce_group_uid_next

        private static java.util.concurrent.atomic.AtomicLong announce_group_uid_next
      • torrent_delegates

        static final java.util.Map torrent_delegates
      • torrentFluffKeyset

        static final java.util.HashSet torrentFluffKeyset
      • fluffThombstone

        static final java.util.Map fluffThombstone
      • txt_pattern

        private static final java.util.regex.Pattern txt_pattern
      • ptd_map

        private static java.util.Map<DownloadManager,​java.lang.Integer> ptd_map
      • tracker_hosts

        private static java.util.Set<java.lang.String> tracker_hosts
      • tracker_addresses

        private static java.util.Set<java.lang.String> tracker_addresses
    • Constructor Detail

      • TorrentUtils

        public TorrentUtils()
    • Method Detail

      • getAnnounceGroupUID

        public static long getAnnounceGroupUID()
      • readDelegateFromFile

        public static TorrentUtils.ExtendedTorrent readDelegateFromFile​(java.io.File file,
                                                                        boolean force_initial_discard)
                                                                 throws TOTorrentException
        If you set "create_delegate" to true then you must understand that this results is piece hashes being discarded and then re-read from the torrent file if needed Therefore, if you delete the original torrent file you're going to get errors if you access the pieces after this (and they've been discarded)
        Parameters:
        file -
        create_delegate -
        force_initial_discard - - use to get rid of pieces immediately
        Returns:
        Throws:
        TOTorrentException
      • setMemoryOnly

        public static void setMemoryOnly​(TOTorrent torrent,
                                         boolean mem_only)
      • clearTorrentFileName

        public static void clearTorrentFileName​(TOTorrent torrent)
      • delete

        public static void delete​(java.io.File torrent_file,
                                  boolean force_no_recycle)
      • move

        public static boolean move​(java.io.File from_torrent,
                                   java.io.File to_torrent)
      • exceptionToText

        public static java.lang.String exceptionToText​(TOTorrentException e)
      • getUniqueTrackerHosts

        public static java.util.Set<java.lang.String> getUniqueTrackerHosts​(TOTorrent torrent)
      • getUniqueTrackerHosts

        public static java.util.Set<java.lang.String> getUniqueTrackerHosts​(TOTorrent torrent,
                                                                            boolean include_port)
      • announceGroupsToText

        public static java.lang.String announceGroupsToText​(TOTorrent torrent)
      • announceGroupsToText

        public static java.lang.String announceGroupsToText​(java.util.List<java.util.List<java.lang.String>> group)
      • announceTextToGroups

        public static java.util.List<java.util.List<java.lang.String>> announceTextToGroups​(java.lang.String text)
      • announceGroupsToList

        public static java.util.List<java.util.List<java.lang.String>> announceGroupsToList​(TOTorrent torrent)
      • expandTrackerLists

        private static java.util.List<java.util.List<java.lang.String>> expandTrackerLists​(java.util.List<java.util.List<java.lang.String>> groups)
      • listToAnnounceSets

        public static TOTorrentAnnounceURLSet[] listToAnnounceSets​(java.util.List<java.util.List<java.lang.String>> groups,
                                                                   TOTorrent torrent)
        This method DOES NOT MODIFY THE TORRENT
        Parameters:
        groups -
        torrent -
        Returns:
      • listToAnnounceGroups

        public static void listToAnnounceGroups​(java.util.List<java.util.List<java.lang.String>> groups,
                                                TOTorrent torrent)
      • announceGroupsInsertFirst

        public static void announceGroupsInsertFirst​(TOTorrent torrent,
                                                     java.lang.String first_url)
      • announceGroupsInsertFirst

        public static void announceGroupsInsertFirst​(TOTorrent torrent,
                                                     java.net.URL first_url)
      • announceGroupsInsertFirst

        public static void announceGroupsInsertFirst​(TOTorrent torrent,
                                                     java.net.URL[] first_urls)
      • announceGroupsInsertLast

        public static void announceGroupsInsertLast​(TOTorrent torrent,
                                                    java.net.URL[] first_urls)
      • announceGroupsSetFirst

        public static void announceGroupsSetFirst​(TOTorrent torrent,
                                                  java.lang.String first_url)
      • announceGroupsContainsURL

        public static boolean announceGroupsContainsURL​(TOTorrent torrent,
                                                        java.lang.String url)
      • canMergeAnnounceURLs

        public static boolean canMergeAnnounceURLs​(TOTorrent new_torrent,
                                                   TOTorrent dest_torrent)
      • mergeAnnounceURLs

        public static boolean mergeAnnounceURLs​(TOTorrent new_torrent,
                                                TOTorrent dest_torrent)
      • mergeAnnounceURLs

        public static java.util.List<java.util.List<java.lang.String>> mergeAnnounceURLs​(java.util.List<java.util.List<java.lang.String>> base_urls,
                                                                                         java.util.List<java.util.List<java.lang.String>> merge_urls)
      • removeAnnounceURLs

        public static java.util.List<java.util.List<java.lang.String>> removeAnnounceURLs​(java.util.List<java.util.List<java.lang.String>> base_urls,
                                                                                          java.util.List<java.util.List<java.lang.String>> remove_urls,
                                                                                          boolean use_prefix_match)
      • removeAnnounceURLs2

        public static java.util.List<java.util.List<java.lang.String>> removeAnnounceURLs2​(java.util.List<java.util.List<java.lang.String>> base_urls,
                                                                                           java.util.List<java.lang.String> remove_urls,
                                                                                           boolean use_prefix_match)
      • getClone

        public static java.util.List<java.util.List<java.lang.String>> getClone​(java.util.List<java.util.List<java.lang.String>> lls)
      • areIdentical

        public static boolean areIdentical​(java.util.List<java.util.List<java.lang.String>> ll1,
                                           java.util.List<java.util.List<java.lang.String>> ll2)
      • replaceAnnounceURL

        public static boolean replaceAnnounceURL​(TOTorrent torrent,
                                                 java.net.URL old_url,
                                                 java.net.URL new_url)
      • setResumeDataCompletelyValid

        public static void setResumeDataCompletelyValid​(DownloadManagerState download_manager_state)
      • getLocalisedName

        public static java.lang.String getLocalisedName​(TOTorrent torrent)
      • setTLSTorrentHash

        public static void setTLSTorrentHash​(HashWrapper hash)
      • getTLSTorrentHash

        public static HashWrapper getTLSTorrentHash()
      • getTLSTorrent

        public static TOTorrent getTLSTorrent()
      • setTLSDescription

        public static void setTLSDescription​(java.lang.String desc)
      • getTLSDescription

        public static java.lang.String getTLSDescription()
      • getTLS

        public static java.lang.Object getTLS()
        get tls for cloning onto another thread
        Returns:
      • setTLS

        public static void setTLS​(java.lang.Object obj)
      • getDecentralisedEmptyURL

        public static java.net.URL getDecentralisedEmptyURL()
      • getDecentralisedURL

        public static java.net.URL getDecentralisedURL​(byte[] hash)
      • getDecentralisedURL

        public static java.net.URL getDecentralisedURL​(TOTorrent torrent)
      • setDecentralised

        public static void setDecentralised​(TOTorrent torrent)
      • isDecentralised

        public static boolean isDecentralised​(TOTorrent torrent)
      • isDecentralised

        public static boolean isDecentralised​(java.net.URL url)
      • isDecentralised

        public static boolean isDecentralised​(java.lang.String host)
      • getAzureusProperties

        private static java.util.Map getAzureusProperties​(TOTorrent torrent)
      • getAzureusPrivateProperties

        private static java.util.Map getAzureusPrivateProperties​(TOTorrent torrent)
      • getContentMapString

        private static java.lang.String getContentMapString​(TOTorrent torrent,
                                                            java.lang.String key)
      • isFeaturedContent

        public static boolean isFeaturedContent​(TOTorrent torrent)
      • setObtainedFrom

        public static void setObtainedFrom​(java.io.File file,
                                           java.lang.String str)
      • setObtainedFrom

        public static void setObtainedFrom​(TOTorrent torrent,
                                           java.lang.String str)
      • getObtainedFrom

        public static java.lang.String getObtainedFrom​(TOTorrent torrent)
      • setDisplayName

        public static void setDisplayName​(TOTorrent torrent,
                                          java.lang.String str)
      • getDisplayName

        public static java.lang.String getDisplayName​(TOTorrent torrent)
      • setNetworkCache

        public static void setNetworkCache​(TOTorrent torrent,
                                           java.util.List<java.lang.String> networks)
      • getNetworkCache

        public static java.util.List<java.lang.String> getNetworkCache​(TOTorrent torrent)
      • setTagCache

        public static void setTagCache​(TOTorrent torrent,
                                       java.util.List<java.lang.String> tags)
      • getTagCache

        public static java.util.List<java.lang.String> getTagCache​(TOTorrent torrent)
      • setInitialTags

        public static void setInitialTags​(TOTorrent torrent,
                                          java.util.List<java.lang.String> tags)
      • getInitialTags

        public static java.util.List<java.lang.String> getInitialTags​(TOTorrent torrent)
      • setInitialMetadata

        public static void setInitialMetadata​(TOTorrent torrent,
                                              java.util.Map<java.lang.String,​java.lang.Object> metadata)
      • getInitialMetadata

        public static java.util.Map<java.lang.String,​java.lang.Object> getInitialMetadata​(TOTorrent torrent)
      • getInitialMetadata

        public static java.util.Map<java.lang.String,​java.lang.Object> getInitialMetadata​(DownloadManager dm)
      • setInitialMetadata

        public static void setInitialMetadata​(DownloadManager dm,
                                              java.util.Map<java.lang.String,​java.lang.Object> metadata)
      • setOriginalHash

        public static void setOriginalHash​(TOTorrent torrent,
                                           byte[] hash)
      • getOriginalHash

        public static byte[] getOriginalHash​(TOTorrent torrent)
      • setHashTreeState

        public static void setHashTreeState​(TOTorrent torrent,
                                            java.util.Map state)
      • getHashTreeState

        public static java.util.Map getHashTreeState​(TOTorrent torrent)
      • getHashForDisplay

        public static byte[] getHashForDisplay​(TOTorrent torrent)
      • setPeerCache

        public static void setPeerCache​(TOTorrent torrent,
                                        java.util.Map pc)
      • setPeerCacheValid

        public static void setPeerCacheValid​(TOTorrent torrent)
      • getPeerCache

        public static java.util.Map getPeerCache​(TOTorrent torrent)
      • setFlag

        public static void setFlag​(TOTorrent torrent,
                                   int flag,
                                   boolean value)
      • getFlag

        public static boolean getFlag​(TOTorrent torrent,
                                      int flag)
      • getInitialLinkage

        public static java.util.Map<java.lang.Integer,​java.io.File> getInitialLinkage​(TOTorrent torrent)
      • setPluginStringProperty

        public static void setPluginStringProperty​(TOTorrent torrent,
                                                   java.lang.String name,
                                                   java.lang.String value)
      • getPluginStringProperty

        public static java.lang.String getPluginStringProperty​(TOTorrent torrent,
                                                               java.lang.String name)
      • setPluginMapProperty

        public static void setPluginMapProperty​(TOTorrent torrent,
                                                java.lang.String name,
                                                java.util.Map value)
      • getPluginMapProperty

        public static java.util.Map getPluginMapProperty​(TOTorrent torrent,
                                                         java.lang.String name)
      • setDHTBackupEnabled

        public static void setDHTBackupEnabled​(TOTorrent torrent,
                                               boolean enabled)
      • getDHTBackupEnabled

        public static boolean getDHTBackupEnabled​(TOTorrent torrent)
      • isDHTBackupRequested

        public static boolean isDHTBackupRequested​(TOTorrent torrent)
      • setDHTBackupRequested

        public static void setDHTBackupRequested​(TOTorrent torrent,
                                                 boolean requested)
      • isReallyPrivate

        public static boolean isReallyPrivate​(TOTorrent torrent)
      • getPrivate

        public static boolean getPrivate​(TOTorrent torrent)
      • setPrivate

        public static void setPrivate​(TOTorrent torrent,
                                      boolean _private)
      • getSkipExtensionsSet

        public static java.util.Set<java.lang.String> getSkipExtensionsSet()
      • getSkipExtensionsSetSupport

        private static java.util.Set<java.lang.String> getSkipExtensionsSetSupport​(boolean force)
      • getSkipFileSet

        public static java.util.Set<java.lang.Object> getSkipFileSet()
      • getSkipFileSetSupport

        private static java.util.Set<java.lang.Object> getSkipFileSetSupport​(boolean force)
      • getSkipFiles

        public static boolean[] getSkipFiles​(TOTorrent torrent)
        Parameters:
        torrent -
        Returns:
        null if no files skipped otherwise entry for each file in torrent
      • getIgnoreSet

        public static java.util.Set<java.lang.String> getIgnoreSet()
      • getIgnoreSetSupport

        private static java.util.Set<java.lang.String> getIgnoreSetSupport​(boolean force)
      • registerMapFluff

        public static void registerMapFluff​(java.lang.String[] fluff)
        Register keys that are used for heavyweight maps that should be discarded when the torrent is not in use Make sure these keys are only ever used for Map objects!
      • copyTorrentFileToSaveDir

        public static java.io.File copyTorrentFileToSaveDir​(java.io.File f,
                                                            boolean persistent)
                                                     throws java.io.IOException
        Copy a file to the Torrent Save Directory, taking into account all the user config options related to that.

        Also makes the directory if it doesn't exist.

        Parameters:
        f - File to copy
        persistent - Whether the torrent is persistent
        Returns:
        File after it's been copied (may be the same as f)
        Throws:
        java.io.IOException
      • shouldDeleteTorrentFileAfterAdd

        public static boolean shouldDeleteTorrentFileAfterAdd​(java.io.File f,
                                                              boolean persistent)
      • getDownloadManager

        public static DownloadManager getDownloadManager​(HashWrapper hash)
        Get the DownloadManager related to a torrent's hashBytes
        Parameters:
        hashBytes -
        Returns:
      • recursiveEmptyDirDelete

        public static void recursiveEmptyDirDelete​(java.io.File f)
        Deletes the given dir and all dirs underneath if empty. Don't delete default save path or completed files directory, however, allow deletion of their empty subdirectories Files defined to be ignored for the sake of torrent creation are automatically deleted For example, by default this includes thumbs.db
      • recursiveEmptyDirDelete

        public static void recursiveEmptyDirDelete​(java.io.File f,
                                                   boolean log_warnings)
        Same as #recursiveEmptyDirDelete(File), except allows disabling of logging of any warnings
        Parameters:
        f - Dir to delete
        log_warnings - Whether to log warning
      • nicePrintTorrentHash

        public static java.lang.String nicePrintTorrentHash​(TOTorrent torrent)
        A nice string of a Torrent's hash
        Parameters:
        torrent - Torrent to fromat hash of
        Returns:
        Hash string in a nice format
      • nicePrintTorrentHash

        public static java.lang.String nicePrintTorrentHash​(TOTorrent torrent,
                                                            boolean tight)
        A nice string of a Torrent's hash
        Parameters:
        torrent - Torrent to fromat hash of
        tight - No spaces between groups of numbers
        Returns:
        Hash string in a nice format
      • isTorrentFile

        public static boolean isTorrentFile​(java.lang.String filename)
                                     throws java.io.FileNotFoundException,
                                            java.io.IOException
        Runs a file through a series of test to verify if it is a torrent.
        Parameters:
        filename - File to test
        Returns:
        true - file is a valid torrent file
        Throws:
        java.io.FileNotFoundException
        java.io.IOException
      • addCreatedTorrent

        public static void addCreatedTorrent​(TOTorrent torrent)
      • removeCreatedTorrent

        public static void removeCreatedTorrent​(TOTorrent torrent)
      • isCreatedTorrent

        public static boolean isCreatedTorrent​(TOTorrent torrent)
      • download

        public static TOTorrent download​(java.net.URL url)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • download

        public static TOTorrent download​(java.net.URL url,
                                         long timeout)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • fireAttributeListener

        private static void fireAttributeListener​(TOTorrent torrent,
                                                  java.lang.String attribute,
                                                  java.lang.Object value)
      • checkDNSTimeouts

        private static void checkDNSTimeouts()
      • getDNSTXTEntry

        private static TorrentUtils.DNSTXTEntry getDNSTXTEntry​(java.lang.String host,
                                                               boolean force_update,
                                                               java.util.List<java.lang.String> already_got_records)
      • applyDNSMods

        private static java.net.URL applyDNSMods​(java.net.URL url)
      • applyAllDNSMods

        private static java.util.List<java.net.URL> applyAllDNSMods​(java.net.URL url)
      • startTorrentDelete

        public static void startTorrentDelete​(DownloadManager[] dms)
      • endTorrentDelete

        public static void endTorrentDelete​(DownloadManager[] dms)
      • runTorrentDelete

        public static void runTorrentDelete​(DownloadManager[] dms,
                                            java.lang.Runnable target)
      • isTorrentDeleting

        public static boolean isTorrentDeleting()
      • setTorrentDeleted

        public static void setTorrentDeleted()
      • getMillisecondsSinceLastTorrentDelete

        public static long getMillisecondsSinceLastTorrentDelete()
      • propagateExportability

        public static boolean propagateExportability​(TOTorrent source,
                                                     java.io.File dest)
      • temporarilyDisableDNSHandling

        public static void temporarilyDisableDNSHandling()
        Disables DNS Handling, but doesn't save it to the config
      • isTrackerAddress

        public static boolean isTrackerAddress​(TOTorrent torrent,
                                               java.net.InetSocketAddress isa)
      • main

        public static void main​(java.lang.String[] args)