From 39935df784a8a58ed82f585f45d46cbcc373c86f Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Wed, 24 Jul 2013 16:27:17 +0000 Subject: [PATCH] move documentation from manual.rst to headers --- docs/manual.html | 1236 +++-------------------- docs/manual.rst | 252 ----- include/libtorrent/session.hpp | 147 ++- include/libtorrent/session_settings.hpp | 48 +- 4 files changed, 282 insertions(+), 1401 deletions(-) diff --git a/docs/manual.html b/docs/manual.html index cd07adfdf..03c21cdbe 100644 --- a/docs/manual.html +++ b/docs/manual.html @@ -3,7 +3,7 @@ - + libtorrent API Documentation @@ -55,39 +55,38 @@

Table of contents

@@ -98,16 +97,16 @@ the session, it contains the main loop that se
-
-

session

-

The session class has the following synopsis:

-
-class session: public boost::noncopyable
-{
-
-        session(fingerprint const& print
-                = libtorrent::fingerprint(
-                "LT", 0, 1, 0, 0)
-                , int flags = start_default_features
-                        | add_default_plugins
-                , int alert_mask = alert::error_notification);
-
-        session(
-                fingerprint const& print
-                , std::pair<int, int> listen_port_range
-                , char const* listen_interface = 0
-                , int flags = start_default_features
-                        | add_default_plugins
-                , int alert_mask = alert::error_notification);
-
-        enum save_state_flags_t
-        {
-                save_settings = 0x001,
-                save_dht_settings = 0x002,
-                save_dht_state = 0x004,
-                save_proxy = 0x008,
-                save_i2p_proxy = 0x010,
-                save_encryption_settings = 0x020,
-                save_as_map = 0x040,
-                save_feeds = 0x080,
-        };
-
-        void load_state(lazy_entry const& e);
-        void save_state(entry& e, boost::uint32_t flags) const;
-
-        torrent_handle add_torrent(
-                add_torrent_params const& params);
-        torrent_handle add_torrent(
-                add_torrent_params const& params
-                , error_code& ec);
-
-        void async_add_torrent(add_torrent_params const& params);
-
-        void pause();
-        void resume();
-
-        session_proxy abort();
-
-        enum options_t
-        {
-                none = 0,
-                delete_files = 1
-        };
-
-        enum session_flags_t
-        {
-                add_default_plugins = 1,
-                start_default_features = 2
-        };
-
-        void remove_torrent(torrent_handle const& h
-                , int options = none);
-        torrent_handle find_torrent(sha_hash const& ih);
-
-        std::vector<torrent_handle> get_torrents() const;
-        void get_torrent_status(std::vector<torrent_status>* ret
-                , boost::function<bool(torrent_status const&)> const& pred
-                , boost::uint32_t flags = 0) const;
-        void refresh_torrent_status(std::vector<torrent_status>* ret
-                , boost::uint32_t flags) const;
-
-        void set_settings(session_settings const& settings);
-        session_settings settings() const;
-        void set_pe_settings(pe_settings const& settings);
-
-        void set_proxy(proxy_settings const& s);
-        proxy_settings proxy() const;
-
-        int num_uploads() const;
-        int num_connections() const;
-
-        void load_asnum_db(char const* file);
-        void load_asnum_db(wchar_t const* file);
-        void load_country_db(char const* file);
-        void load_country_db(wchar_t const* file);
-        int as_for_ip(address const& adr);
-
-        void set_ip_filter(ip_filter const& f);
-        ip_filter get_ip_filter() const;
-
-        session_status status() const;
-        cache_status get_cache_status() const;
-
-        bool is_listening() const;
-        unsigned short listen_port() const;
-
-        enum {
-                listen_reuse_address = 1,
-                listen_no_system_port = 2
-        };
-
-        void listen_on(
-                std::pair<int, int> const& port_range
-                , error_code& ec
-                , char const* interface = 0
-                , int flags = 0);
-
-        std::auto_ptr<alert> pop_alert();
-        alert const* wait_for_alert(time_duration max_wait);
-        void set_alert_mask(int m);
-        size_t set_alert_queue_size_limit(
-                size_t queue_size_limit_);
-        void set_alert_dispatch(boost::function<void(std::auto_ptr<alert>)> const& fun);
-
-        feed_handle add_feed(feed_settings const& feed);
-        void remove_feed(feed_handle h);
-        void get_feeds(std::vector<feed_handle>& f) const;
-
-        void add_extension(boost::function<
-                boost::shared_ptr<torrent_plugin>(torrent*)> ext);
-
-        void start_dht();
-        void stop_dht();
-        void set_dht_settings(
-                dht_settings const& settings);
-        entry dht_state() const;
-        void add_dht_node(std::pair<std::string
-                , int> const& node);
-        void add_dht_router(std::pair<std::string
-                , int> const& node);
-        bool is_dht_running() const;
-
-        void start_lsd();
-        void stop_lsd();
-
-        upnp* start_upnp();
-        void stop_upnp();
-
-        natpmp* start_natpmp();
-        void stop_natpmp();
-};
-
-

Once it's created, the session object will spawn the main thread that will do all the work. -The main thread will be idle as long it doesn't have any torrents to participate in.

-
-

session()

-
-
-session(fingerprint const& print
-        = libtorrent::fingerprint("LT", 0, 1, 0, 0)
-        , int flags = start_default_features
-                | add_default_plugins
-        , int alert_mask = alert::error_notification);
-
-session(fingerprint const& print
-        , std::pair<int, int> listen_port_range
-        , char const* listen_interface = 0
-        , int flags = start_default_features
-                | add_default_plugins
-        , int alert_mask = alert::error_notification);
-
-
-

If the fingerprint in the first overload is omited, the client will get a default -fingerprint stating the version of libtorrent. The fingerprint is a short string that will be -used in the peer-id to identify the client and the client's version. For more details see the -fingerprint class. The constructor that only takes a fingerprint will not open a -listen port for the session, to get it running you'll have to call session::listen_on(). -The other constructor, that takes a port range and an interface as well as the fingerprint -will automatically try to listen on a port on the given interface. For more information about -the parameters, see listen_on() function.

-

The flags paramater can be used to start default features (upnp & nat-pmp) and default plugins -(ut_metadata, ut_pex and smart_ban). The default is to start those things. If you do not want -them to start, pass 0 as the flags parameter.

-

The alert_mask is the same mask that you would send to set_alert_mask().

-
-
-

~session()

-

The destructor of session will notify all trackers that our torrents have been shut down. -If some trackers are down, they will time out. All this before the destructor of session -returns. So, it's advised that any kind of interface (such as windows) are closed before -destructing the session object. Because it can take a few second for it to finish. The -timeout can be set with set_settings().

-
-
-

load_state() save_state()

-
-
-void load_state(lazy_entry const& e);
-void save_state(entry& e, boost::uint32_t flags) const;
-
-
-

loads and saves all session settings, including dht_settings, encryption settings and proxy -settings. save_state writes all keys to the entry that's passed in, which needs to -either not be initialized, or initialized as a dictionary.

-

load_state expects a lazy_entry which can be built from a bencoded buffer with -lazy_bdecode().

-

The flags arguments passed in to save_state can be used to filter which parts -of the session state to save. By default, all state is saved (except for the individual -torrents). These are the possible flags. A flag that's set, means those settings are saved:

-
-enum save_state_flags_t
-{
-        save_settings =     0x001,
-        save_dht_settings = 0x002,
-        save_dht_state =    0x004,
-        save_proxy =        0x008,
-        save_i2p_proxy =    0x010,
-        save_encryption_settings = 0x020,
-        save_as_map =       0x040,
-        save_feeds =        0x080
-};
-
-
-
-

pause() resume() is_paused()

-
-
-void pause();
-void resume();
-bool is_paused() const;
-
-
-

Pausing the session has the same effect as pausing every torrent in it, except that -torrents will not be resumed by the auto-manage mechanism. Resuming will restore the -torrents to their previous paused state. i.e. the session pause state is separate from -the torrent pause state. A torrent is inactive if it is paused or if the session is -paused.

-
-
-

abort()

-
-
-session_proxy abort();
-
-
-

In case you want to destruct the session asynchrounously, you can request a session -destruction proxy. If you don't do this, the destructor of the session object will -block while the trackers are contacted. If you keep one session_proxy to the -session when destructing it, the destructor will not block, but start to close down -the session, the destructor of the proxy will then synchronize the threads. So, the -destruction of the session is performed from the session destructor call until the -session_proxy destructor call. The session_proxy does not have any operations -on it (since the session is being closed down, no operations are allowed on it). The -only valid operation is calling the destructor:

-
-class session_proxy
-{
-public:
-        session_proxy();
-        ~session_proxy()
-};
-
-
-
-

async_add_torrent() add_torrent()

-
-
-typedef boost::function<storage_interface*(file_storage const&
-        , file_storage const*, std::string const&, file_pool&
-        , std::vector<boost::uint8_t> const&) storage_constructor_type;
-
-struct add_torrent_params
-{
-        add_torrent_params(storage_constructor_type s);
-
-        enum flags_t
-        {
-                flag_seed_mode = 0x001,
-                flag_override_resume_data = 0x002,
-                flag_upload_mode = 0x004,
-                flag_share_mode = 0x008,
-                flag_apply_ip_filter = 0x010,
-                flag_paused = 0x020,
-                flag_auto_managed = 0x040.
-                flag_duplicate_is_error = 0x080,
-                flag_merge_resume_trackers = 0x100,
-                flag_update_subscribe = 0x200,
-                flag_super_seeding = 0x400,
-                flag_sequential_download = 0x800
-        };
-
-        int version;
-        boost::intrusive_ptr<torrent_info> ti;
-#ifndef TORRENT_NO_DEPRECATE
-        char const* tracker_url;
-#endif
-        std::vector<std::string> trackers;
-        std::vector<std::pair<std::string, int> > dht_nodes;
-        sha1_hash info_hash;
-        std::string name;
-        std::string save_path;
-        std::vector<char> resume_data;
-        storage_mode_t storage_mode;
-        storage_constructor_type storage;
-        void* userdata;
-        std::vector<boost::uint8_t> file_priorities;
-        std::string trackerid;
-        std::string url;
-        std::string uuid;
-        std::string source_feed_url;
-        boost::uint64_t flags;
-        int max_uploads;
-        int max_connections;
-        int upload_limit;
-        int download_limit;
-};
-
-torrent_handle add_torrent(add_torrent_params const& params);
-torrent_handle add_torrent(add_torrent_params const& params
-        , error_code& ec);
-void async_add_torrent(add_torrent_params const& params);
-
-
-

You add torrents through the add_torrent() function where you give an -object with all the parameters. The add_torrent() overloads will block -until the torrent has been added (or failed to be added) and returns an -error code and a torrent_handle. In order to add torrents more efficiently, -consider using async_add_torrent() which returns immediately, without -waiting for the torrent to add. Notification of the torrent being added is sent -as add_torrent_alert.

-

The overload that does not take an error_code throws an exception on -error and is not available when building without exception support.

-

The only mandatory parameters are save_path which is the directory where you -want the files to be saved. You also need to specify either the ti (the -torrent file), the info_hash (the info hash of the torrent) or the url -(the URL to where to download the .torrent file from). If you specify the -info-hash, the torrent file will be downloaded from peers, which requires them to -support the metadata extension. For the metadata extension to work, libtorrent must -be built with extensions enabled (TORRENT_DISABLE_EXTENSIONS must not be -defined). It also takes an optional name argument. This may be left empty in case no -name should be assigned to the torrent. In case it's not, the name is used for -the torrent as long as it doesn't have metadata. See torrent_handle::name.

-

If the torrent doesn't have a tracker, but relies on the DHT to find peers, the -trackers (or the deprecated tracker_url) can specify tracker urls that -for the torrent.

-

If you specify a url, the torrent will be set in downloading_metadata state -until the .torrent file has been downloaded. If there's any error while downloading, -the torrent will be stopped and the torrent error state (torrent_status::error) -will indicate what went wrong. The url may refer to a magnet link or a regular -http URL.

-

If it refers to an HTTP URL, the info-hash for the added torrent will not be the -true info-hash of the .torrent. Instead a placeholder, unique, info-hash is used -which is later updated once the .torrent file has been downloaded.

-

Once the info-hash change happens, a torrent_update_alert is posted.

-

dht_nodes is a list of hostname and port pairs, representing DHT nodes to be -added to the session (if DHT is enabled). The hostname may be an IP address.

-

If the torrent you are trying to add already exists in the session (is either queued -for checking, being checked or downloading) add_torrent() will throw -libtorrent_exception which derives from std::exception unless duplicate_is_error -is set to false. In that case, add_torrent will return the handle to the existing -torrent.

-

The optional parameter, resume_data can be given if up to date fast-resume data -is available. The fast-resume data can be acquired from a running torrent by calling -save_resume_data() on torrent_handle. See fast resume. The vector that is -passed in will be swapped into the running torrent instance with std::vector::swap().

-

The storage_mode parameter refers to the layout of the storage for this torrent. -There are 3 different modes:

-
-
storage_mode_sparse
-
All pieces will be written to the place where they belong and sparse files -will be used. This is the recommended, and default mode.
-
storage_mode_allocate
-
All pieces will be written to their final position, all files will be -allocated in full when the torrent is first started. This is done with -fallocate() and similar calls. This mode minimizes fragmentation.
-
storage_mode_compact
-
this mode is deprecated and will be removed in future versions of libtorrent -The storage will grow as more pieces are downloaded, and pieces -are rearranged to finally be in their correct places once the entire torrent has been -downloaded.
-
-

For more information, see storage allocation.

-

storage can be used to customize how the data is stored. The default -storage will simply write the data to the files it belongs to, but it could be -overridden to save everything to a single file at a specific location or encrypt the -content on disk for instance. For more information about the storage_interface -that needs to be implemented for a custom storage, see storage_interface.

-

The userdata parameter is optional and will be passed on to the extension -constructor functions, if any (see add_extension()).

-

The torrent_handle returned by add_torrent() can be used to retrieve information -about the torrent's progress, its peers etc. It is also used to abort a torrent.

-

file_priorities can be set to control the initial file priorities when adding -a torrent. The semantics are the same as for torrent_handle::prioritize_files().

-

version is filled in by the constructor and should be left untouched. It -is used for forward binary compatibility.

-

trackerid is the default tracker id to be used when announcing to trackers. By default -this is empty, and no tracker ID is used, since this is an optional argument. If -a tracker returns a tracker ID, that ID is used instead of this.

-

if uuid is specified, it is used to find duplicates. If another torrent is already -running with the same UUID as the one being added, it will be considered a duplicate. This -is mainly useful for RSS feed items which has UUIDs specified.

-

source_feed_url should point to the URL of the RSS feed this torrent comes from, -if it comes from an RSS feed.

-

flags is a 64 bit integer used for flags controlling aspects of this torrent -and how it's added. These are the flags:

-
-enum flags_t
-{
-        flag_seed_mode = 0x001,
-        flag_override_resume_data = 0x002,
-        flag_upload_mode = 0x004,
-        flag_share_mode = 0x008,
-        flag_apply_ip_filter = 0x010,
-        flag_paused = 0x020,
-        flag_auto_managed = 0x040.
-        flag_duplicate_is_error = 0x080,
-        flag_merge_resume_trackers = 0x100,
-        flag_update_subscribe = 0x200,
-        flag_super_seeding = 0x400,
-        flag_sequential_download = 0x800
-}
-
-

flag_apply_ip_filter determines if the IP filter should apply to this torrent or not. By -default all torrents are subject to filtering by the IP filter (i.e. this flag is set by -default). This is useful if certain torrents needs to be excempt for some reason, being -an auto-update torrent for instance.

-

flag_merge_resume_trackers defaults to off and specifies whether tracker URLs loaded from -resume data should be added to the trackers in the torrent or replace the trackers.

-

flag_update_subscribe is on by default and means that this torrent will be part of state -updates when calling post_torrent_updates().

-

flag_paused specifies whether or not the torrent is to be started in a paused -state. I.e. it won't connect to the tracker or any of the peers until it's -resumed. This is typically a good way of avoiding race conditions when setting -configuration options on torrents before starting them.

-

If you pass in resume data, the paused state of the torrent when the resume data -was saved will override the paused state you pass in here. You can override this -by setting flag_override_resume_data.

-

If the torrent is auto-managed (flag_auto_managed), the torrent may be resumed -at any point, regardless of how it paused. If it's important to manually control -when the torrent is paused and resumed, don't make it auto managed.

-

If flag_auto_managed is set, the torrent will be queued, started and seeded -automatically by libtorrent. When this is set, the torrent should also be started -as paused. The default queue order is the order the torrents were added. They -are all downloaded in that order. For more details, see queuing.

-

If you pass in resume data, the auto_managed state of the torrent when the resume data -was saved will override the auto_managed state you pass in here. You can override this -by setting override_resume_data.

-

If flag_seed_mode is set, libtorrent will assume that all files are present -for this torrent and that they all match the hashes in the torrent file. Each time -a peer requests to download a block, the piece is verified against the hash, unless -it has been verified already. If a hash fails, the torrent will automatically leave -the seed mode and recheck all the files. The use case for this mode is if a torrent -is created and seeded, or if the user already know that the files are complete, this -is a way to avoid the initial file checks, and significantly reduce the startup time.

-

Setting flag_seed_mode on a torrent without metadata (a .torrent file) is a no-op -and will be ignored.

-

If resume data is passed in with this torrent, the seed mode saved in there will -override the seed mode you set here.

-

If flag_override_resume_data is set, the paused and auto_managed -state of the torrent are not loaded from the resume data, but the states requested -by the flags in add_torrent_params will override them.

-

If flag_upload_mode is set, the torrent will be initialized in upload-mode, -which means it will not make any piece requests. This state is typically entered -on disk I/O errors, and if the torrent is also auto managed, it will be taken out -of this state periodically. This mode can be used to avoid race conditions when -adjusting priorities of pieces before allowing the torrent to start downloading.

-

If the torrent is auto-managed (flag_auto_managed), the torrent will eventually -be taken out of upload-mode, regardless of how it got there. If it's important to -manually control when the torrent leaves upload mode, don't make it auto managed.

-

flag_share_mode determines if the torrent should be added in share mode or not. -Share mode indicates that we are not interested in downloading the torrent, but -merley want to improve our share ratio (i.e. increase it). A torrent started in -share mode will do its best to never download more than it uploads to the swarm. -If the swarm does not have enough demand for upload capacity, the torrent will -not download anything. This mode is intended to be safe to add any number of torrents -to, without manual screening, without the risk of downloading more than is uploaded.

-

A torrent in share mode sets the priority to all pieces to 0, except for the pieces -that are downloaded, when pieces are decided to be downloaded. This affects the progress -bar, which might be set to "100% finished" most of the time. Do not change file or piece -priorities for torrents in share mode, it will make it not work.

-

The share mode has one setting, the share ratio target, see session_settings::share_mode_target -for more info.

-

flag_super_seeding sets the torrent into super seeding mode. If the torrent -is not a seed, this flag has no effect. It has the same effect as calling -torrent_handle::super_seeding(true) on the torrent handle immediately -after adding it.

-

flag_sequential_download sets the sequential download state for the torrent. -It has the same effect as calling torrent_handle::sequential_download(true) -on the torrent handle immediately after adding it.

-

max_uploads, max_connections, upload_limit, download_limit correspond -to the set_max_uploads(), set_max_connections(), set_upload_limit() and -set_download_limit() functions on torrent_handle. These values let you initialize -these settings when the torrent is added, instead of calling these functions immediately -following adding it.

-
-
-

remove_torrent()

-
-
-void remove_torrent(torrent_handle const& h, int options = none);
-
-
-

remove_torrent() will close all peer connections associated with the torrent and tell -the tracker that we've stopped participating in the swarm. The optional second argument -options can be used to delete all the files downloaded by this torrent. To do this, pass -in the value session::delete_files. The removal of the torrent is asyncronous, there is -no guarantee that adding the same torrent immediately after it was removed will not throw -a libtorrent_exception exception. Once the torrent is deleted, a torrent_deleted_alert -is posted.

-
-
-

find_torrent() get_torrents()

-
-
-torrent_handle find_torrent(sha_hash const& ih);
-std::vector<torrent_handle> get_torrents() const;
-
-
-

find_torrent() looks for a torrent with the given info-hash. In case there -is such a torrent in the session, a torrent_handle to that torrent is returned. -In case the torrent cannot be found, an invalid torrent_handle is returned.

-

See torrent_handle::is_valid() to know if the torrent was found or not.

-

get_torrents() returns a vector of torrent_handles to all the torrents -currently in the session.

-
-
-

get_torrent_status() refresh_torrent_status()

-
-
-void get_torrent_status(std::vector<torrent_status>* ret
-        , boost::function<bool(torrent_status const&)> const& pred
-        , boost::uint32_t flags = 0) const;
-void refresh_torrent_status(std::vector<torrent_status>* ret
-        , boost::uint32_t flags = 0) const;
-
-
-
-

Note

-

these calls are potentially expensive and won't scale well -with lots of torrents. If you're concerned about performance, consider -using post_torrent_updates() instead.

-
-

get_torrent_status returns a vector of the torrent_status for every -torrent which satisfies pred, which is a predicate function which determines -if a torrent should be included in the returned set or not. Returning true means -it should be included and false means excluded. The flags argument is the same -as to torrent_handle::status(). Since pred is guaranteed to be called for -every torrent, it may be used to count the number of torrents of different categories -as well.

-

refresh_torrent_status takes a vector of torrent_status structs (for instance -the same vector that was returned by get_torrent_status()) and refreshes the -status based on the handle member. It is possible to use this function by -first setting up a vector of default constructed torrent_status objects, only -initializing the handle member, in order to request the torrent status for -multiple torrents in a single call. This can save a significant amount of time -if you have a lot of torrents.

-

Any torrent_status object whose handle member is not referring to a -valid torrent are ignored.

-
-
-

post_torrent_updates()

-
-
-void post_torrent_updates();
-
-
-

This functions instructs the session to post the state_update_alert, containing -the status of all torrents whose state changed since the last time this function -was called.

-

Only torrents who has the state subscription flag set will be included. This flag -is on by default. See add_torrent_params under async_add_torrent() add_torrent().

-
-
-

load_asnum_db() load_country_db() as_for_ip()

-
-
-void load_asnum_db(char const* file);
-void load_asnum_db(wchar_t const* file);
-void load_country_db(char const* file);
-void load_country_db(wchar_t const* file);
-int as_for_ip(address const& adr);
-
-
-

These functions are not available if TORRENT_DISABLE_GEO_IP is defined. They -expects a path to the MaxMind ASN database and MaxMind GeoIP database -respectively. This will be used to look up which AS and country peers belong to.

-

as_for_ip returns the AS number for the IP address specified. If the IP is not -in the database or the ASN database is not loaded, 0 is returned.

-

The wchar_t overloads are for wide character paths.

-
-
-

set_ip_filter()

-
-
-void set_ip_filter(ip_filter const& filter);
-
-
-

Sets a filter that will be used to reject and accept incoming as well as outgoing -connections based on their originating ip address. The default filter will allow -connections to any ip address. To build a set of rules for which addresses are -accepted and not, see ip_filter.

-

Each time a peer is blocked because of the IP filter, a peer_blocked_alert is -generated.

-
-
-

get_ip_filter()

-
-
-ip_filter get_ip_filter() const;
-
-
-

Returns the ip_filter currently in the session. See ip_filter.

-
-
-

status()

-
-
-session_status status() const;
-
-
-

status() returns session wide-statistics and status. The session_status -struct has the following members:

-
-struct dht_lookup
-{
-        char const* type;
-        int outstanding_requests;
-        int timeouts;
-        int responses;
-        int branch_factor;
-        int nodes_left;
-        int last_sent;
-        int first_timeout;
-};
-
-struct dht_routing_bucket
-{
-        int num_nodes;
-        int num_replacements;
-        int last_active;
-};
-
-struct utp_status
-{
-        int num_idle;
-        int num_syn_sent;
-        int num_connected;
-        int num_fin_sent;
-        int num_close_wait;
-};
-
-struct session_status
-{
-        bool has_incoming_connections;
-
-        int upload_rate;
-        int download_rate;
-        size_type total_download;
-        size_type total_upload;
-
-        int payload_upload_rate;
-        int payload_download_rate;
-        size_type total_payload_download;
-        size_type total_payload_upload;
-
-        int ip_overhead_upload_rate;
-        int ip_overhead_download_rate;
-        size_type total_ip_overhead_download;
-        size_type total_ip_overhead_upload;
-
-        int dht_upload_rate;
-        int dht_download_rate;
-        size_type total_dht_download;
-        size_type total_dht_upload;
-
-        int tracker_upload_rate;
-        int tracker_download_rate;
-        size_type total_tracker_download;
-        size_type total_tracker_upload;
-
-        size_type total_redundant_bytes;
-        size_type total_failed_bytes;
-
-        int num_peers;
-        int num_unchoked;
-        int allowed_upload_slots;
-
-        int up_bandwidth_queue;
-        int down_bandwidth_queue;
-
-        int up_bandwidth_bytes_queue;
-        int down_bandwidth_bytes_queue;
-
-        int optimistic_unchoke_counter;
-        int unchoke_counter;
-
-        int disk_write_queue;
-        int disk_read_queue;
-
-        int dht_nodes;
-        int dht_node_cache;
-        int dht_torrents;
-        size_type dht_global_nodes;
-        std::vector<dht_lookup> active_requests;
-        std::vector<dht_routing_table> dht_routing_table;
-        int dht_total_allocations;
-
-        utp_status utp_stats;
-};
-
-

has_incoming_connections is false as long as no incoming connections have been -established on the listening socket. Every time you change the listen port, this will -be reset to false.

-

upload_rate, download_rate are the total download and upload rates accumulated -from all torrents. This includes bittorrent protocol, DHT and an estimated TCP/IP -protocol overhead.

-

total_download and total_upload are the total number of bytes downloaded and -uploaded to and from all torrents. This also includes all the protocol overhead.

-

payload_download_rate and payload_upload_rate is the rate of the payload -down- and upload only.

-

total_payload_download and total_payload_upload is the total transfers of payload -only. The payload does not include the bittorrent protocol overhead, but only parts of the -actual files to be downloaded.

-

ip_overhead_upload_rate, ip_overhead_download_rate, total_ip_overhead_download -and total_ip_overhead_upload is the estimated TCP/IP overhead in each direction.

-

dht_upload_rate, dht_download_rate, total_dht_download and total_dht_upload -is the DHT bandwidth usage.

-

total_redundant_bytes is the number of bytes that has been received more than once. -This can happen if a request from a peer times out and is requested from a different -peer, and then received again from the first one. To make this lower, increase the -request_timeout and the piece_timeout in the session settings.

-

total_failed_bytes is the number of bytes that was downloaded which later failed -the hash-check.

-

num_peers is the total number of peer connections this session has. This includes -incoming connections that still hasn't sent their handshake or outgoing connections -that still hasn't completed the TCP connection. This number may be slightly higher -than the sum of all peers of all torrents because the incoming connections may not -be assigned a torrent yet.

-

num_unchoked is the current number of unchoked peers. -allowed_upload_slots is the current allowed number of unchoked peers.

-

up_bandwidth_queue and down_bandwidth_queue are the number of peers that are -waiting for more bandwidth quota from the torrent rate limiter. -up_bandwidth_bytes_queue and down_bandwidth_bytes_queue count the number of -bytes the connections are waiting for to be able to send and receive.

-

optimistic_unchoke_counter and unchoke_counter tells the number of -seconds until the next optimistic unchoke change and the start of the next -unchoke interval. These numbers may be reset prematurely if a peer that is -unchoked disconnects or becomes notinterested.

-

disk_write_queue and disk_read_queue are the number of peers currently -waiting on a disk write or disk read to complete before it receives or sends -any more data on the socket. It'a a metric of how disk bound you are.

-

dht_nodes, dht_node_cache and dht_torrents are only available when -built with DHT support. They are all set to 0 if the DHT isn't running. When -the DHT is running, dht_nodes is set to the number of nodes in the routing -table. This number only includes active nodes, not cache nodes. The -dht_node_cache is set to the number of nodes in the node cache. These nodes -are used to replace the regular nodes in the routing table in case any of them -becomes unresponsive.

-

dht_torrents are the number of torrents tracked by the DHT at the moment.

-

dht_global_nodes is an estimation of the total number of nodes in the DHT -network.

-

active_requests is a vector of the currently running DHT lookups.

-

dht_routing_table contains information about every bucket in the DHT routing -table.

-

dht_total_allocations is the number of nodes allocated dynamically for a -particular DHT lookup. This represents roughly the amount of memory used -by the DHT.

-

utp_stats contains statistics on the uTP sockets.

-
-
-

get_cache_status()

-
-
-cache_status get_cache_status() const;
-
-
-

Returns status of the disk cache for this session.

-
-
-struct cache_status
-{
-        size_type blocks_written;
-        size_type writes;
-        size_type blocks_read;
-        size_type blocks_read_hit;
-        size_type reads;
-        int cache_size;
-        int read_cache_size;
-        int total_used_buffers;
-        int average_queue_time;
-        int average_read_time;
-        int average_write_time;
-        int average_hash_time;
-        int average_cache_time;
-        int job_queue_length;
-};
-
-
-

blocks_written is the total number of 16 KiB blocks written to disk -since this session was started.

-

writes is the total number of write operations performed since this -session was started.

-

The ratio (blocks_written - writes) / blocks_written represents -the number of saved write operations per total write operations. i.e. a kind -of cache hit ratio for the write cahe.

-

blocks_read is the number of blocks that were requested from the -bittorrent engine (from peers), that were served from disk or cache.

-

blocks_read_hit is the number of blocks that were served from cache.

-

The ratio blocks_read_hit / blocks_read is the cache hit ratio -for the read cache.

-

cache_size is the number of 16 KiB blocks currently in the disk cache. -This includes both read and write cache.

-

read_cache_size is the number of 16KiB blocks in the read cache.

-

total_used_buffers is the total number of buffers currently in use. -This includes the read/write disk cache as well as send and receive buffers -used in peer connections.

-

average_queue_time is the number of microseconds an average disk I/O job -has to wait in the job queue before it get processed.

-

average_read_time is the time read jobs takes on average to complete -(not including the time in the queue), in microseconds. This only measures -read cache misses.

-

average_write_time is the time write jobs takes to complete, on average, -in microseconds. This does not include the time the job sits in the disk job -queue or in the write cache, only blocks that are flushed to disk.

-

average_hash_time is the time hash jobs takes to complete on average, in -microseconds. Hash jobs include running SHA-1 on the data (which for the most -part is done incrementally) and sometimes reading back parts of the piece. It -also includes checking files without valid resume data.

-

average_cache_time is the average amuount of time spent evicting cached -blocks that have expired from the disk cache.

-

job_queue_length is the number of jobs in the job queue.

-
-
-

get_cache_info()

-
-
-void get_cache_info(sha1_hash const& ih
-        , std::vector<cached_piece_info>& ret) const;
-
-
-

get_cache_info() fills out the supplied vector with information for -each piece that is currently in the disk cache for the torrent with the -specified info-hash (ih).

-
-
-struct cached_piece_info
-{
-        int piece;
-        std::vector<bool> blocks;
-        ptime last_use;
-        enum kind_t { read_cache = 0, write_cache = 1 };
-        kind_t kind;
-};
-
-
-

piece is the piece index for this cache entry.

-

blocks has one entry for each block in this piece. true represents -the data for that block being in the disk cache and false means it's not.

-

last_use is the time when a block was last written to this piece. The older -a piece is, the more likely it is to be flushed to disk.

-

kind specifies if this piece is part of the read cache or the write cache.

-

is_listening() listen_port() listen_on()

@@ -1092,70 +236,6 @@ with a DHT ping packet, and connect to those that responds first. On windows one can only connect to a few peers at a time because of a built in limitation (in XP Service pack 2).

-
-

set_alert_mask()

-
-
-void set_alert_mask(int m);
-
-
-

Changes the mask of which alerts to receive. By default only errors are reported. -m is a bitmask where each bit represents a category of alerts.

-

See alerts for mor information on the alert categories.

-
-
-

pop_alerts() pop_alert() wait_for_alert()

-
-
-std::auto_ptr<alert> pop_alert();
-void pop_alerts(std::deque<alert*>* alerts);
-alert const* wait_for_alert(time_duration max_wait);
-
-
-

pop_alert() is used to ask the session if any errors or events has occurred. With -set_alert_mask() you can filter which alerts to receive through pop_alert(). -For information about the alert categories, see alerts.

-

pop_alerts() pops all pending alerts in a single call. In high performance environments -with a very high alert churn rate, this can save significant amount of time compared to -popping alerts one at a time. Each call requires one round-trip to the network thread. If -alerts are produced in a higher rate than they can be popped (when popped one at a time) -it's easy to get stuck in an infinite loop, trying to drain the alert queue. Popping the entire -queue at once avoids this problem.

-

However, the pop_alerts function comes with significantly more responsibility. You pass -in an empty std::dequeue<alert*> to it. If it's not empty, all elements in it will -be deleted and then cleared. All currently pending alerts are returned by being swapped -into the passed in container. The responsibility of deleting the alerts is transferred -to the caller. This means you need to call delete for each item in the returned dequeue. -It's probably a good idea to delete the alerts as you handle them, to save one extra -pass over the dequeue.

-

Alternatively, you can pass in the same container the next time you call pop_alerts.

-

wait_for_alert blocks until an alert is available, or for no more than max_wait -time. If wait_for_alert returns because of the time-out, and no alerts are available, -it returns 0. If at least one alert was generated, a pointer to that alert is returned. -The alert is not popped, any subsequent calls to wait_for_alert will return the -same pointer until the alert is popped by calling pop_alert. This is useful for -leaving any alert dispatching mechanism independent of this blocking call, the dispatcher -can be called and it can pop the alert independently.

-

In the python binding, wait_for_alert takes the number of milliseconds to wait as an integer.

-

To control the max number of alerts that's queued by the session, see -session_settings::alert_queue_size.

-

save_resume_data_alert and save_resume_data_failed_alert are always posted, regardelss -of the alert mask.

-
-
-

set_alert_dispatch()

-
-
-void set_alert_dispatch(boost::function<void(std::auto_ptr<alert>)> const& fun);
-
-
-

This sets a function to be called (from within libtorrent's netowrk thread) every time an alert -is posted. Since the function (fun) is run in libtorrent's internal thread, it may not call -any of libtorrent's external API functions. Doing so results in a dead lock.

-

The main intention with this function is to support integration with platform-dependent message -queues or signalling systems. For instance, on windows, one could post a message to an HNWD or -on linux, write to a pipe or an eventfd.

-

add_feed()

@@ -1203,7 +283,7 @@ minutes between refreshes.

This object is used as a template for adding torrents from feeds, but some torrent specific fields will be overridden by the individual torrent being added. For more information on the -add_torrent_params, see async_add_torrent() add_torrent().

+add_torrent_params, see `async_add_torrent() add_torrent()`_.

The returned feed_handle is a handle which is used to interact with the feed, things like forcing a refresh or querying for information about the items in the feed. For more information, @@ -1316,142 +396,6 @@ connection to it. The only used fields in the proxy settings structs are hostname and port.

i2p_proxy returns the current i2p proxy in use.

-
-

start_dht() stop_dht() set_dht_settings() dht_state() is_dht_running()

-
-
-void start_dht(entry const& startup_state);
-void stop_dht();
-void set_dht_settings(dht_settings const& settings);
-entry dht_state() const;
-bool is_dht_running() const;
-
-
-

These functions are not available in case TORRENT_DISABLE_DHT is -defined. start_dht starts the dht node and makes the trackerless service -available to torrents. The startup state is optional and can contain nodes -and the node id from the previous session. The dht node state is a bencoded -dictionary with the following entries:

-
-
nodes
-
A list of strings, where each string is a node endpoint encoded in binary. If -the string is 6 bytes long, it is an IPv4 address of 4 bytes, encoded in -network byte order (big endian), followed by a 2 byte port number (also -network byte order). If the string is 18 bytes long, it is 16 bytes of IPv6 -address followed by a 2 bytes port number (also network byte order).
-
node-id
-
The node id written as a readable string as a hexadecimal number.
-
-

dht_state will return the current state of the dht node, this can be used -to start up the node again, passing this entry to start_dht. It is a good -idea to save this to disk when the session is closed, and read it up again -when starting.

-

If the port the DHT is supposed to listen on is already in use, and exception -is thrown, asio::error.

-

stop_dht stops the dht node.

-

add_dht_node adds a node to the routing table. This can be used if your -client has its own source of bootstrapping nodes.

-

set_dht_settings sets some parameters availavle to the dht node. The -struct has the following members:

-
-struct dht_settings
-{
-        int max_peers_reply;
-        int search_branching;
-        int max_fail_count;
-        int max_torrents;
-        bool restrict_routing_ips;
-        bool restrict_search_ips;
-        bool extended_routing_table;
-        bool aggressive_lookups;
-};
-
-

max_peers_reply is the maximum number of peers the node will send in -response to a get_peers message from another node.

-

search_branching is the number of concurrent search request the node will -send when announcing and refreshing the routing table. This parameter is -called alpha in the kademlia paper.

-

max_fail_count is the maximum number of failed tries to contact a node -before it is removed from the routing table. If there are known working nodes -that are ready to replace a failing node, it will be replaced immediately, -this limit is only used to clear out nodes that don't have any node that can -replace them.

-

max_torrents is the total number of torrents to track from the DHT. This -is simply an upper limit to make sure malicious DHT nodes cannot make us allocate -an unbounded amount of memory.

-

max_feed_items is the total number of feed items to store from the DHT. This -is simply an upper limit to make sure malicious DHT nodes cannot make us allocate -an unbounded amount of memory.

-

restrict_routing_ips determines if the routing table entries should restrict -entries to one per IP. This defaults to true, which helps mitigate some attacks -on the DHT. It prevents adding multiple nodes with IPs with a very close CIDR -distance.

-

restrict_search_ips determines if DHT searches should prevent adding nodes -with IPs with very close CIDR distance. This also defaults to true and helps -mitigate certain attacks on the DHT.

-

extended_routing_table makes the first buckets in the DHT routing -table fit 128, 64, 32 and 16 nodes respectively, as opposed to the -standard size of 8. All other buckets have size 8 still.

-

The dht_settings struct used to contain a service_port member to control -which port the DHT would listen on and send messages from. This field is deprecated -and ignored. libtorrent always tries to open the UDP socket on the same port -as the TCP socket.

-

aggressive_lookups slightly changes the lookup behavior in terms of how -many outstanding requests we keep. Instead of having branch factor be a hard -limit, we always keep branch factor outstanding requests to the closest nodes. -i.e. every time we get results back with closer nodes, we query them right away. -It lowers the lookup times at the cost of more outstanding queries.

-

is_dht_running() returns true if the DHT support has been started and false -otherwise.

-
-
-

add_dht_node() add_dht_router()

-
-
-void add_dht_node(std::pair<std::string, int> const& node);
-void add_dht_router(std::pair<std::string, int> const& node);
-
-
-

add_dht_node takes a host name and port pair. That endpoint will be -pinged, and if a valid DHT reply is received, the node will be added to -the routing table.

-

add_dht_router adds the given endpoint to a list of DHT router nodes. -If a search is ever made while the routing table is empty, those nodes will -be used as backups. Nodes in the router node list will also never be added -to the regular routing table, which effectively means they are only used -for bootstrapping, to keep the load off them.

-

An example routing node that you could typically add is -router.bittorrent.com.

-
-
-

start_lsd() stop_lsd()

-
-
-void start_lsd();
-void stop_lsd();
-
-
-

Starts and stops Local Service Discovery. This service will broadcast -the infohashes of all the non-private torrents on the local network to -look for peers on the same swarm within multicast reach.

-

It is turned off by default.

-
-
-

start_upnp() stop_upnp()

-
-
-upnp* start_upnp();
-void stop_upnp();
-
-
-

Starts and stops the UPnP service. When started, the listen port and the DHT -port are attempted to be forwarded on local UPnP router devices.

-

The upnp object returned by start_upnp() can be used to add and remove -arbitrary port mappings. Mapping status is returned through the -portmap_alert and the portmap_error_alert. The object will be valid until -stop_upnp() is called. See UPnP and NAT-PMP.

-

It is off by default.

-

start_natpmp() stop_natpmp()

@@ -1702,7 +646,7 @@ public: int metadata_size() const; }; -
+

torrent_info()

@@ -1798,7 +742,7 @@ then use remap_files().

save_path of the torrent. If the new_filename is an absolute path (i.e. is_complete(new_filename) == true), then the file is detached from the save_path of the torrent. In this case the file is -not moved when move_storage_ is invoked.

+not moved when move_storage_ is invoked.

begin_files() end_files() rbegin_files() rend_files()

@@ -2483,7 +1427,7 @@ Keep in mind that files that don't belong to the torrent but are stored in the t directory may be moved as well. This goes for files that have been renamed to absolute paths that still end up inside the save path.

-
+

rename_file()

@@ -2892,7 +1836,7 @@ void use_interface(char const* net_interface) const;
 

use_interface() sets the network interface this torrent will use when it opens outgoing -connections. By default, it uses the same interface as the session uses to listen on. The +connections. By default, it uses the same interface as the session_ uses to listen on. The parameter must be a string containing one or more, comma separated, ip-address (either an IPv4 or IPv6 address). When specifying multiple interfaces, the torrent will round-robin which interface to use for each outgoing conneciton. This is useful for clients that are @@ -2966,7 +1910,7 @@ not be ready to write resume data.

Note that by the time you receive the fast resume data, it may already be invalid if the torrent is still downloading! The recommended practice is to first pause the session, then generate the -fast resume data, and then close it down. Make sure to not remove_torrent() before you receive +fast resume data, and then close it down. Make sure to not `remove_torrent()`_ before you receive the save_resume_data_alert though. There's no need to pause when saving intermittent resume data.

Warning

@@ -2991,7 +1935,7 @@ have their resume data saved when they complete and on exit, since their statist

In full allocation mode the reume data is never invalidated by subsequent writes to the files, since pieces won't move around. This means that you don't need to pause before writing resume data in full or sparse mode. If you don't, however, any data written to -disk after you saved resume data and before the session closed is lost.

+disk after you saved resume data and before the session_ closed is lost.

It also means that if the resume data is out dated, libtorrent will not re-check the files, but assume that it is fairly recent. The assumption is that it's better to loose a little bit than to re-check @@ -3077,7 +2021,7 @@ is posted. It is important to make sure this alert is received and handled in order for this function to be meaningful.

-
+

status()

@@ -3490,7 +2434,7 @@ ip, a magnet link for instance).

case it was paused by an error. If the torrent is not paused or if it's paused but not because of an error, this string is empty.

save_path is the path to the directory where this torrent's files are stored. -It's typically the path as was given to async_add_torrent() add_torrent() when this torrent +It's typically the path as was given to `async_add_torrent() add_torrent()`_ when this torrent was started. This field is only included if the torrent status is queried with torrent_handle::query_save_path.

name is the name of the torrent. Typically this is derived from the .torrent file. @@ -4569,7 +3513,7 @@ are kept in memory after the torrent becomes a seed or not. If it is set to needed anymore since the torrent won't download anything more). If it's set to false they are not freed. If they are freed, the torrent_info returned by get_torrent_info() will return an object that may be incomplete, that -cannot be passed back to async_add_torrent() add_torrent() for instance.

+cannot be passed back to `async_add_torrent() add_torrent()`_ for instance.

upnp_ignore_nonrouters indicates whether or not the UPnP implementation should ignore any broadcast response from a device whose address is not the configured router for this machine. i.e. it's a way to not talk to other @@ -5340,7 +4284,7 @@ public: };

-
+

ip_filter()

@@ -5748,7 +4692,7 @@ torrent_handle add_magnet_uri(session& ses, std::string const& uri
 and adds the torrent to the specified session (ses). It returns the
 handle to the newly added torrent, or an invalid handle in case parsing
 failed. To control some initial settings of the torrent, sepcify those in
-the add_torrent_params, p. See async_add_torrent() add_torrent().

+the add_torrent_params, p. See `async_add_torrent() add_torrent()`_.

The overload that does not take an error_code throws an exception on error and is not available when building without exception support.

A simpler way to add a magnet link to a session is to pass in the @@ -5785,7 +4729,7 @@ been posted by libtorrent pop_alert() will ret auto_ptr object. If there is an alert in libtorrent's queue, the alert from the front of the queue is popped and returned. You can then use the alert object and query

-

By default, only errors are reported. set_alert_mask() can be +

By default, only errors are reported. `set_alert_mask()`_ can be used to specify which kinds of events should be reported. The alert mask is a bitmask with the following bits:

@@ -6053,7 +4997,7 @@ struct external_ip_alert: alert

listen_failed_alert

This alert is generated when none of the ports, given in the port range, to -session can be opened for listening. The endpoint member is the +session_ can be opened for listening. The endpoint member is the interface and port that failed, error is the error code describing the failure.

libtorrent may sometimes try to listen on port 0, if all other ports failed. @@ -7047,7 +5991,7 @@ as:

state_update_alert

-

This alert is only posted when requested by the user, by calling post_torrent_updates() +

This alert is only posted when requested by the user, by calling `post_torrent_updates()`_ on the session. It contains the torrent status of all torrents that changed since last time this message was posted. Its category is status_notification, but it's not subject to filtering, since it's only manually posted anyway.

@@ -8189,7 +7133,7 @@ int sparse_end(int start) const; region). The purpose of this is to skip parts of files that can be known to contain zeros when checking files.

-
+

move_storage()

@@ -8266,7 +7210,7 @@ should be moved to slot1.

This is only used in compact mode.

Returning true indicates an error occurred.

-
+

rename_file()

@@ -8415,7 +7359,7 @@ torrents are being downloaded at any given time, and once a torrent is completel
 downloaded, the next in line is started.

Torrents that are auto managed are subject to the queuing and the active torrents limits. To make a torrent auto managed, set auto_managed to true when adding the -torrent (see async_add_torrent() add_torrent()).

+torrent (see `async_add_torrent() add_torrent()`_).

The limits of the number of downloading and seeding torrents are controlled via active_downloads, active_seeds and active_limit in session_settings. These limits takes non auto managed torrents into account as well. If there are @@ -8463,7 +7407,7 @@ will not check the piece hashes then, and rely on the information given in the fast-resume data. The fast-resume data also contains information about which blocks, in the unfinished pieces, were downloaded, so it will not have to start from scratch on the partially downloaded pieces.

-

To use the fast-resume data you simply give it to async_add_torrent() add_torrent(), and it +

To use the fast-resume data you simply give it to `async_add_torrent() add_torrent()`_, and it will skip the time consuming checks. It may have to do the checking anyway, if the fast-resume data is corrupt or doesn't fit the storage for that torrent, then it will not trust the fast-resume data and just do the checking.

@@ -8685,7 +7629,7 @@ to where they belong. This is the recommended (and default) mode. Support for this is deprecated and will be removed in future versions of libtorrent. It's still described in here for completeness.

The allocation mode is selected when a torrent is started. It is passed as an -argument to session::add_torrent() (see async_add_torrent() add_torrent()).

+argument to session::add_torrent() (see `async_add_torrent() add_torrent()`_).

The decision to use full allocation or compact allocation typically depends on whether any files have priority 0 and if the filesystem supports sparse files.

@@ -9134,9 +8078,69 @@ private key in ./newkey.pem.

Docutils System Messages

+
+

System Message: ERROR/3 (manual.rst, line 21); backlink

+Unknown target name: "load_state() save_state()".
+
+

System Message: ERROR/3 (manual.rst, line 23); backlink

+Unknown target name: "start_dht() stop_dht() set_dht_settings() dht_state() is_dht_running()".
-

System Message: ERROR/3 (manual.rst, line 1901); backlink

+

System Message: ERROR/3 (manual.rst, line 23); backlink

+Unknown target name: "start_lsd() stop_lsd()".
+
+

System Message: ERROR/3 (manual.rst, line 23); backlink

+Unknown target name: "start_upnp() stop_upnp()".
+
+

System Message: ERROR/3 (manual.rst, line 25); backlink

+Unknown target name: "async_add_torrent() add_torrent()".
+
+

System Message: ERROR/3 (manual.rst, line 26); backlink

+Unknown target name: "session".
+
+

System Message: ERROR/3 (manual.rst, line 34); backlink

+Unknown target name: "load_state() save_state()".
+
+

System Message: ERROR/3 (manual.rst, line 218); backlink

+Unknown target name: "async_add_torrent() add_torrent()".
+
+

System Message: ERROR/3 (manual.rst, line 718); backlink

Unknown target name: "move_storage".
+
+

System Message: ERROR/3 (manual.rst, line 1920); backlink

+Unknown target name: "session".
+
+

System Message: ERROR/3 (manual.rst, line 2001); backlink

+Unknown target name: "remove_torrent()".
+
+

System Message: ERROR/3 (manual.rst, line 2021); backlink

+Unknown target name: "session".
+
+

System Message: ERROR/3 (manual.rst, line 2509); backlink

+Unknown target name: "async_add_torrent() add_torrent()".
+
+

System Message: ERROR/3 (manual.rst, line 3682); backlink

+Unknown target name: "async_add_torrent() add_torrent()".
+
+

System Message: ERROR/3 (manual.rst, line 5040); backlink

+Unknown target name: "async_add_torrent() add_torrent()".
+
+

System Message: ERROR/3 (manual.rst, line 5087); backlink

+Unknown target name: "set_alert_mask()".
+
+

System Message: ERROR/3 (manual.rst, line 5364); backlink

+Unknown target name: "session".
+
+

System Message: ERROR/3 (manual.rst, line 6527); backlink

+Unknown target name: "post_torrent_updates()".
+
+

System Message: ERROR/3 (manual.rst, line 7544); backlink

+Unknown target name: "async_add_torrent() add_torrent()".
+
+

System Message: ERROR/3 (manual.rst, line 7607); backlink

+Unknown target name: "async_add_torrent() add_torrent()".
+
+

System Message: ERROR/3 (manual.rst, line 7785); backlink

+Unknown target name: "async_add_torrent() add_torrent()".