--- /srv/rebuilderd/tmp/rebuilderdHoaWnt/inputs/libtorrent-rasterbar-doc_2.0.11-1_all.deb +++ /srv/rebuilderd/tmp/rebuilderdHoaWnt/out/libtorrent-rasterbar-doc_2.0.11-1_all.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2025-01-28 14:33:12.000000 debian-binary │ --rw-r--r-- 0 0 0 3628 2025-01-28 14:33:12.000000 control.tar.xz │ --rw-r--r-- 0 0 0 1666144 2025-01-28 14:33:12.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 3636 2025-01-28 14:33:12.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 1665772 2025-01-28 14:33:12.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -79,37 +79,37 @@ │ │ │ -rw-r--r-- 0 root (0) root (0) 9768 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/index.html │ │ │ -rw-r--r-- 0 root (0) root (0) 144603 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/manual-ref.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9650 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/projects.html │ │ │ -rw-r--r-- 0 root (0) root (0) 22814 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/python_binding.html │ │ │ -rw-r--r-- 0 root (0) root (0) 33687 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Add_Torrent.html │ │ │ -rw-r--r-- 0 root (0) root (0) 256772 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Alerts.html │ │ │ -rw-r--r-- 0 root (0) root (0) 27437 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Bdecoding.html │ │ │ --rw-r--r-- 0 root (0) root (0) 25856 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Bencoding.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 25858 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Bencoding.html │ │ │ -rw-r--r-- 0 root (0) root (0) 88949 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Core.html │ │ │ -rw-r--r-- 0 root (0) root (0) 43859 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Create_Torrents.html │ │ │ -rw-r--r-- 0 root (0) root (0) 50915 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Custom_Storage.html │ │ │ -rw-r--r-- 0 root (0) root (0) 24960 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-DHT.html │ │ │ --rw-r--r-- 0 root (0) root (0) 48763 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Error_Codes.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 48765 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Error_Codes.html │ │ │ -rw-r--r-- 0 root (0) root (0) 13261 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Filter.html │ │ │ -rw-r--r-- 0 root (0) root (0) 12804 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-PeerClass.html │ │ │ -rw-r--r-- 0 root (0) root (0) 68487 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Plugins.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9618 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Resume_Data.html │ │ │ -rw-r--r-- 0 root (0) root (0) 102455 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Session.html │ │ │ -rw-r--r-- 0 root (0) root (0) 169276 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Settings.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9742 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Stats.html │ │ │ --rw-r--r-- 0 root (0) root (0) 56856 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Storage.html │ │ │ --rw-r--r-- 0 root (0) root (0) 129801 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Torrent_Handle.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 56866 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Storage.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 129803 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Torrent_Handle.html │ │ │ -rw-r--r-- 0 root (0) root (0) 55640 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Torrent_Info.html │ │ │ -rw-r--r-- 0 root (0) root (0) 48385 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Torrent_Status.html │ │ │ -rw-r--r-- 0 root (0) root (0) 16462 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Trackers.html │ │ │ -rw-r--r-- 0 root (0) root (0) 25530 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Utility.html │ │ │ -rw-r--r-- 0 root (0) root (0) 9129 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-ed25519.html │ │ │ --rw-r--r-- 0 root (0) root (0) 34353 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 34357 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/reference.html │ │ │ -rw-r--r-- 0 root (0) root (0) 29242 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/security-audit.html │ │ │ --rw-r--r-- 0 root (0) root (0) 1274764 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/single-page-ref.html │ │ │ +-rw-r--r-- 0 root (0) root (0) 1274780 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/single-page-ref.html │ │ │ -rw-r--r-- 0 root (0) root (0) 10121 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/streaming.html │ │ │ -rw-r--r-- 0 root (0) root (0) 8807 2025-01-28 10:57:42.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/style.css │ │ │ -rw-r--r-- 0 root (0) root (0) 522888 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/todo.html │ │ │ -rw-r--r-- 0 root (0) root (0) 3023 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/troubleshooting.html │ │ │ -rw-r--r-- 0 root (0) root (0) 25162 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/tuning-ref.html │ │ │ -rw-r--r-- 0 root (0) root (0) 132630 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/tutorial-ref.html │ │ │ -rw-r--r-- 0 root (0) root (0) 16383 2025-01-28 14:33:12.000000 ./usr/share/doc/libtorrent-rasterbar-doc/html/udp_tracker_protocol.html │ │ ├── ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Add_Torrent.html │ │ │ @@ -28,65 +28,23 @@ │ │ │ 2.0.11 │ │ │ │ │ │ │ │ │

home

│ │ │
│ │ │

Table of contents

│ │ │
│ │ │ -[report issue]
│ │ │ -

client_data_t

│ │ │ -

Declared in "libtorrent/client_data.hpp"

│ │ │ -

A thin wrapper around a void pointer used as "user data". i.e. an opaque │ │ │ -cookie passed in to libtorrent and returned on demand. It adds type-safety by │ │ │ -requiring the same type be requested out of it as was assigned to it.

│ │ │ -
│ │ │ -struct client_data_t
│ │ │ -{
│ │ │ -   client_data_t () = default;
│ │ │ -   explicit client_data_t (T* v);
│ │ │ -   client_data_t& operator= (T* v);
│ │ │ -   explicit operator T () const;
│ │ │ -   T* get () const;
│ │ │ -   client_data_t& operator= (void*) = delete;
│ │ │ -   operator void const* () const = delete;
│ │ │ -   operator void* () const = delete;
│ │ │ -   client_data_t& operator= (void const*) = delete;
│ │ │ -
│ │ │ -   template <typename T, typename U  = typename std::enable_if<std::is_pointer<T>::value>::type>
│ │ │ -};
│ │ │ -
│ │ │ -[report issue]
│ │ │ -

client_data_t()

│ │ │ -
│ │ │ -client_data_t () = default;
│ │ │ -
│ │ │ -

construct a nullptr client data

│ │ │ - │ │ │ - │ │ │ -[report issue]
│ │ │ -
│ │ │ -

const*() operator=() void*()

│ │ │ -
│ │ │ -client_data_t& operator= (void*) = delete;
│ │ │ -operator void const* () const = delete;
│ │ │ -operator void* () const = delete;
│ │ │ -client_data_t& operator= (void const*) = delete;
│ │ │ -
│ │ │ -

we don't allow type-unsafe operations

│ │ │ -[report issue]
│ │ │ -
│ │ │ -
│ │ │ +[report issue]
│ │ │

add_torrent_params

│ │ │

Declared in "libtorrent/add_torrent_params.hpp"

│ │ │

The add_torrent_params contains all the information in a .torrent file │ │ │ along with all information necessary to add that torrent to a session. │ │ │ The key fields when adding a torrent are:

│ │ │
│ │ │ +
│ │ │ +

client_data_t

│ │ │ +

Declared in "libtorrent/client_data.hpp"

│ │ │ +

A thin wrapper around a void pointer used as "user data". i.e. an opaque │ │ │ +cookie passed in to libtorrent and returned on demand. It adds type-safety by │ │ │ +requiring the same type be requested out of it as was assigned to it.

│ │ │ +
│ │ │ +struct client_data_t
│ │ │ +{
│ │ │ +   client_data_t () = default;
│ │ │ +   explicit client_data_t (T* v);
│ │ │ +   client_data_t& operator= (T* v);
│ │ │ +   T* get () const;
│ │ │ +   explicit operator T () const;
│ │ │ +   operator void const* () const = delete;
│ │ │ +   operator void* () const = delete;
│ │ │ +   client_data_t& operator= (void*) = delete;
│ │ │ +   client_data_t& operator= (void const*) = delete;
│ │ │ +
│ │ │ +   template <typename T, typename U  = typename std::enable_if<std::is_pointer<T>::value>::type>
│ │ │ +};
│ │ │ +
│ │ │ +[report issue]
│ │ │ +

client_data_t()

│ │ │ +
│ │ │ +client_data_t () = default;
│ │ │ +
│ │ │ +

construct a nullptr client data

│ │ │ + │ │ │ + │ │ │ +[report issue]
│ │ │ +
│ │ │ +

const*() void*() operator=()

│ │ │ +
│ │ │ +operator void const* () const = delete;
│ │ │ +operator void* () const = delete;
│ │ │ +client_data_t& operator= (void*) = delete;
│ │ │ +client_data_t& operator= (void const*) = delete;
│ │ │ +
│ │ │ +

we don't allow type-unsafe operations

│ │ │ +
│ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │
│ │ │ │ │ │

The pop_alerts() function on session is the main interface for retrieving │ │ │ alerts (warnings, messages and errors from libtorrent). If no alerts have │ │ │ @@ -551,17 +551,17 @@ │ │ │ char const* new_name () const; │ │ │ char const* old_name () const; │ │ │ │ │ │ static constexpr alert_category_t static_category = alert_category::storage; │ │ │ file_index_t const index; │ │ │ }; │ │ │ │ │ │ - │ │ │ -[report issue]

│ │ │ -

old_name() new_name()

│ │ │ + │ │ │ +[report issue]
│ │ │ +

new_name() old_name()

│ │ │
│ │ │  char const* new_name () const;
│ │ │  char const* old_name () const;
│ │ │  
│ │ │

returns the new and previous file name, respectively.

│ │ │ [report issue]
│ │ │
index
│ │ │ @@ -1293,17 +1293,17 @@ │ │ │ std::string message () const override; │ │ │ char const* old_path () const; │ │ │ char const* storage_path () const; │ │ │ │ │ │ static constexpr alert_category_t static_category = alert_category::storage; │ │ │ }; │ │ │ │ │ │ - │ │ │ -[report issue]
│ │ │ -

storage_path() old_path()

│ │ │ + │ │ │ +[report issue]
│ │ │ +

old_path() storage_path()

│ │ │
│ │ │  char const* old_path () const;
│ │ │  char const* storage_path () const;
│ │ │  
│ │ │

the path the torrent was moved to and from, respectively.

│ │ │ [report issue]
│ │ │
│ │ │ @@ -2951,17 +2951,17 @@ │ │ │ std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const; │ │ │ int num_nodes () const; │ │ │ │ │ │ static constexpr alert_category_t static_category = alert_category::dht; │ │ │ sha1_hash node_id; │ │ │ }; │ │ │ │ │ │ - │ │ │ -[report issue]
│ │ │ -

num_nodes() nodes()

│ │ │ + │ │ │ +[report issue]
│ │ │ +

nodes() num_nodes()

│ │ │
│ │ │  std::vector<std::pair<sha1_hash, udp::endpoint>> nodes () const;
│ │ │  int num_nodes () const;
│ │ │  
│ │ │

the number of nodes in the routing table and the actual nodes.

│ │ │ [report issue]
│ │ │
node_id
│ │ │ @@ -3079,16 +3079,16 @@ │ │ │

this alert is posted to indicate to the client that some alerts were │ │ │ dropped. Dropped meaning that the alert failed to be delivered to the │ │ │ client. The most common cause of such failure is that the internal alert │ │ │ queue grew too big (controlled by alert_queue_size).

│ │ │
│ │ │  struct alerts_dropped_alert final : alert
│ │ │  {
│ │ │ -   static_assert (num_alert_types <= abi_alert_count, "need to increase bitset. This is an ABI break");
│ │ │     std::string message () const override;
│ │ │ +   static_assert (num_alert_types <= abi_alert_count, "need to increase bitset. This is an ABI break");
│ │ │  
│ │ │     static constexpr alert_category_t static_category  = alert_category::error;
│ │ │     std::bitset<abi_alert_count> dropped_alerts;
│ │ │  };
│ │ │  
│ │ │ [report issue]
│ │ │
dropped_alerts
│ │ │ @@ -3294,38 +3294,38 @@ │ │ │ std::vector<announce_entry> trackers; │ │ │ }; │ │ │ │ │ │ [report issue]
│ │ │
trackers
│ │ │
list of trackers and their status for the torrent
│ │ │
│ │ │ +[report issue]
│ │ │ +
│ │ │ +

operation_name()

│ │ │ +

Declared in "libtorrent/operations.hpp"

│ │ │ +
│ │ │ +char const* operation_name (operation_t op);
│ │ │ +
│ │ │ +

maps an operation id (from peer_error_alert and peer_disconnected_alert) │ │ │ +to its name. See operation_t for the constants

│ │ │ [report issue]
│ │ │
│ │ │

alert_cast()

│ │ │

Declared in "libtorrent/alert.hpp"

│ │ │
│ │ │ -template <typename T> T* alert_cast (alert* a);
│ │ │  template <typename T> T const* alert_cast (alert const* a);
│ │ │ +template <typename T> T* alert_cast (alert* a);
│ │ │  
│ │ │

When you get an alert, you can use alert_cast<> to attempt to cast the │ │ │ pointer to a specific alert type, in order to query it for more │ │ │ information.

│ │ │
│ │ │

Note

│ │ │

alert_cast<> can only cast to an exact alert type, not a base class

│ │ │
│ │ │ -[report issue]
│ │ │ -
│ │ │ -

operation_name()

│ │ │ -

Declared in "libtorrent/operations.hpp"

│ │ │ -
│ │ │ -char const* operation_name (operation_t op);
│ │ │ -
│ │ │ -

maps an operation id (from peer_error_alert and peer_disconnected_alert) │ │ │ -to its name. See operation_t for the constants

│ │ │ [report issue]
│ │ │
│ │ │

enum operation_t

│ │ │

Declared in "libtorrent/operations.hpp"

│ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -15,15 +15,15 @@ │ │ │ │ * _p_e_e_r___a_l_e_r_t │ │ │ │ * _t_r_a_c_k_e_r___a_l_e_r_t │ │ │ │ o _t_r_a_c_k_e_r___u_r_l_(_) │ │ │ │ * _t_o_r_r_e_n_t___r_e_m_o_v_e_d___a_l_e_r_t │ │ │ │ * _r_e_a_d___p_i_e_c_e___a_l_e_r_t │ │ │ │ * _f_i_l_e___c_o_m_p_l_e_t_e_d___a_l_e_r_t │ │ │ │ * _f_i_l_e___r_e_n_a_m_e_d___a_l_e_r_t │ │ │ │ - o _o_l_d___n_a_m_e_(_)_ _n_e_w___n_a_m_e_(_) │ │ │ │ + o _n_e_w___n_a_m_e_(_)_ _o_l_d___n_a_m_e_(_) │ │ │ │ * _f_i_l_e___r_e_n_a_m_e___f_a_i_l_e_d___a_l_e_r_t │ │ │ │ * _p_e_r_f_o_r_m_a_n_c_e___a_l_e_r_t │ │ │ │ o _e_n_u_m_ _p_e_r_f_o_r_m_a_n_c_e___w_a_r_n_i_n_g___t │ │ │ │ * _s_t_a_t_e___c_h_a_n_g_e_d___a_l_e_r_t │ │ │ │ * _t_r_a_c_k_e_r___e_r_r_o_r___a_l_e_r_t │ │ │ │ o _f_a_i_l_u_r_e___r_e_a_s_o_n_(_) │ │ │ │ * _t_r_a_c_k_e_r___w_a_r_n_i_n_g___a_l_e_r_t │ │ │ │ @@ -47,15 +47,15 @@ │ │ │ │ * _p_i_e_c_e___f_i_n_i_s_h_e_d___a_l_e_r_t │ │ │ │ * _r_e_q_u_e_s_t___d_r_o_p_p_e_d___a_l_e_r_t │ │ │ │ * _b_l_o_c_k___t_i_m_e_o_u_t___a_l_e_r_t │ │ │ │ * _b_l_o_c_k___f_i_n_i_s_h_e_d___a_l_e_r_t │ │ │ │ * _b_l_o_c_k___d_o_w_n_l_o_a_d_i_n_g___a_l_e_r_t │ │ │ │ * _u_n_w_a_n_t_e_d___b_l_o_c_k___a_l_e_r_t │ │ │ │ * _s_t_o_r_a_g_e___m_o_v_e_d___a_l_e_r_t │ │ │ │ - o _s_t_o_r_a_g_e___p_a_t_h_(_)_ _o_l_d___p_a_t_h_(_) │ │ │ │ + o _o_l_d___p_a_t_h_(_)_ _s_t_o_r_a_g_e___p_a_t_h_(_) │ │ │ │ * _s_t_o_r_a_g_e___m_o_v_e_d___f_a_i_l_e_d___a_l_e_r_t │ │ │ │ o _f_i_l_e___p_a_t_h_(_) │ │ │ │ * _t_o_r_r_e_n_t___d_e_l_e_t_e_d___a_l_e_r_t │ │ │ │ * _t_o_r_r_e_n_t___d_e_l_e_t_e___f_a_i_l_e_d___a_l_e_r_t │ │ │ │ * _s_a_v_e___r_e_s_u_m_e___d_a_t_a___a_l_e_r_t │ │ │ │ * _s_a_v_e___r_e_s_u_m_e___d_a_t_a___f_a_i_l_e_d___a_l_e_r_t │ │ │ │ * _t_o_r_r_e_n_t___p_a_u_s_e_d___a_l_e_r_t │ │ │ │ @@ -120,15 +120,15 @@ │ │ │ │ o _p_k_t___b_u_f_(_) │ │ │ │ o _e_n_u_m_ _d_i_r_e_c_t_i_o_n___t │ │ │ │ * _d_h_t___g_e_t___p_e_e_r_s___r_e_p_l_y___a_l_e_r_t │ │ │ │ * _d_h_t___d_i_r_e_c_t___r_e_s_p_o_n_s_e___a_l_e_r_t │ │ │ │ * _p_i_c_k_e_r___l_o_g___a_l_e_r_t │ │ │ │ * _s_e_s_s_i_o_n___e_r_r_o_r___a_l_e_r_t │ │ │ │ * _d_h_t___l_i_v_e___n_o_d_e_s___a_l_e_r_t │ │ │ │ - o _n_u_m___n_o_d_e_s_(_)_ _n_o_d_e_s_(_) │ │ │ │ + o _n_o_d_e_s_(_)_ _n_u_m___n_o_d_e_s_(_) │ │ │ │ * _s_e_s_s_i_o_n___s_t_a_t_s___h_e_a_d_e_r___a_l_e_r_t │ │ │ │ * _d_h_t___s_a_m_p_l_e___i_n_f_o_h_a_s_h_e_s___a_l_e_r_t │ │ │ │ o _s_a_m_p_l_e_s_(_)_ _n_u_m___s_a_m_p_l_e_s_(_) │ │ │ │ o _n_u_m___n_o_d_e_s_(_) │ │ │ │ o _n_o_d_e_s_(_) │ │ │ │ * _b_l_o_c_k___u_p_l_o_a_d_e_d___a_l_e_r_t │ │ │ │ * _a_l_e_r_t_s___d_r_o_p_p_e_d___a_l_e_r_t │ │ │ │ @@ -137,16 +137,16 @@ │ │ │ │ * _o_v_e_r_s_i_z_e_d___f_i_l_e___a_l_e_r_t │ │ │ │ * _t_o_r_r_e_n_t___c_o_n_f_l_i_c_t___a_l_e_r_t │ │ │ │ * _p_e_e_r___i_n_f_o___a_l_e_r_t │ │ │ │ * _f_i_l_e___p_r_o_g_r_e_s_s___a_l_e_r_t │ │ │ │ * _p_i_e_c_e___i_n_f_o___a_l_e_r_t │ │ │ │ * _p_i_e_c_e___a_v_a_i_l_a_b_i_l_i_t_y___a_l_e_r_t │ │ │ │ * _t_r_a_c_k_e_r___l_i_s_t___a_l_e_r_t │ │ │ │ - * _a_l_e_r_t___c_a_s_t_(_) │ │ │ │ * _o_p_e_r_a_t_i_o_n___n_a_m_e_(_) │ │ │ │ + * _a_l_e_r_t___c_a_s_t_(_) │ │ │ │ * _e_n_u_m_ _o_p_e_r_a_t_i_o_n___t │ │ │ │ * _a_l_e_r_t___c_a_t_e_g_o_r_y___t │ │ │ │ * _i_n_t │ │ │ │ The _p_o_p___a_l_e_r_t_s_(_) function on _s_e_s_s_i_o_n is the main interface for retrieving │ │ │ │ alerts (warnings, messages and errors from libtorrent). If no alerts have been │ │ │ │ posted by libtorrent _p_o_p___a_l_e_r_t_s_(_) will return an empty list. │ │ │ │ By default, only errors are reported. _s_e_t_t_i_n_g_s___p_a_c_k_:_:_a_l_e_r_t___m_a_s_k can be used to │ │ │ │ @@ -408,15 +408,15 @@ │ │ │ │ char const* oolldd__nnaammee () const; │ │ │ │ │ │ │ │ static constexpr alert_category_t ssttaattiicc__ccaatteeggoorryy = alert_category:: │ │ │ │ storage; │ │ │ │ file_index_t const index; │ │ │ │ }; │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** oolldd__nnaammee(()) nneeww__nnaammee(()) ********** │ │ │ │ +********** nneeww__nnaammee(()) oolldd__nnaammee(()) ********** │ │ │ │ char const* nneeww__nnaammee () const; │ │ │ │ char const* oolldd__nnaammee () const; │ │ │ │ returns the new and previous file name, respectively. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ index │ │ │ │ refers to the index of the file that was renamed, │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ @@ -1042,15 +1042,15 @@ │ │ │ │ char const* oolldd__ppaatthh () const; │ │ │ │ char const* ssttoorraaggee__ppaatthh () const; │ │ │ │ │ │ │ │ static constexpr alert_category_t ssttaattiicc__ccaatteeggoorryy = alert_category:: │ │ │ │ storage; │ │ │ │ }; │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** ssttoorraaggee__ppaatthh(()) oolldd__ppaatthh(()) ********** │ │ │ │ +********** oolldd__ppaatthh(()) ssttoorraaggee__ppaatthh(()) ********** │ │ │ │ char const* oolldd__ppaatthh () const; │ │ │ │ char const* ssttoorraaggee__ppaatthh () const; │ │ │ │ the path the torrent was moved to and from, respectively. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ ssttoorraaggee__mmoovveedd__ffaaiilleedd__aalleerrtt ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_a_l_e_r_t___t_y_p_e_s_._h_p_p" │ │ │ │ The storage_moved_failed_alert is generated when an attempt to move the │ │ │ │ @@ -2295,15 +2295,15 @@ │ │ │ │ std::vector> nnooddeess () const; │ │ │ │ int nnuumm__nnooddeess () const; │ │ │ │ │ │ │ │ static constexpr alert_category_t ssttaattiicc__ccaatteeggoorryy = alert_category::dht; │ │ │ │ sha1_hash node_id; │ │ │ │ }; │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** nnuumm__nnooddeess(()) nnooddeess(()) ********** │ │ │ │ +********** nnooddeess(()) nnuumm__nnooddeess(()) ********** │ │ │ │ std::vector> nnooddeess () const; │ │ │ │ int nnuumm__nnooddeess () const; │ │ │ │ the number of nodes in the routing table and the actual nodes. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ node_id │ │ │ │ the local DHT node's node-ID this routing table belongs to │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ @@ -2394,17 +2394,17 @@ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_a_l_e_r_t___t_y_p_e_s_._h_p_p" │ │ │ │ this _a_l_e_r_t is posted to indicate to the client that some alerts were dropped. │ │ │ │ Dropped meaning that the _a_l_e_r_t failed to be delivered to the client. The most │ │ │ │ common cause of such failure is that the internal _a_l_e_r_t queue grew too big │ │ │ │ (controlled by alert_queue_size). │ │ │ │ struct alerts_dropped_alert final : alert │ │ │ │ { │ │ │ │ + std::string mmeessssaaggee () const override; │ │ │ │ ssttaattiicc__aasssseerrtt (num_alert_types <= abi_alert_count, "need to increase bitset. │ │ │ │ This is an ABI break"); │ │ │ │ - std::string mmeessssaaggee () const override; │ │ │ │ │ │ │ │ static constexpr alert_category_t ssttaattiicc__ccaatteeggoorryy = alert_category::error; │ │ │ │ std::bitset dropped_alerts; │ │ │ │ }; │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ dropped_alerts │ │ │ │ a bitmask indicating which alerts were dropped. Each bit represents the │ │ │ │ @@ -2572,29 +2572,29 @@ │ │ │ │ static constexpr alert_category_t ssttaattiicc__ccaatteeggoorryy = alert_category::status; │ │ │ │ std::vector trackers; │ │ │ │ }; │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ trackers │ │ │ │ list of trackers and their status for the torrent │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ ooppeerraattiioonn__nnaammee(()) ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_o_p_e_r_a_t_i_o_n_s_._h_p_p" │ │ │ │ +char const* ooppeerraattiioonn__nnaammee (operation_t op); │ │ │ │ +maps an operation id (from _p_e_e_r___e_r_r_o_r___a_l_e_r_t and _p_e_e_r___d_i_s_c_o_n_n_e_c_t_e_d___a_l_e_r_t) to its │ │ │ │ +name. See _o_p_e_r_a_t_i_o_n___t for the constants │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ aalleerrtt__ccaasstt(()) ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_a_l_e_r_t_._h_p_p" │ │ │ │ -template T* aalleerrtt__ccaasstt (alert* a); │ │ │ │ template T const* aalleerrtt__ccaasstt (alert const* a); │ │ │ │ +template T* aalleerrtt__ccaasstt (alert* a); │ │ │ │ When you get an _a_l_e_r_t, you can use alert_cast<> to attempt to cast the pointer │ │ │ │ to a specific _a_l_e_r_t type, in order to query it for more information. │ │ │ │ Note │ │ │ │ alert_cast<> can only cast to an exact _a_l_e_r_t type, not a base class │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ ooppeerraattiioonn__nnaammee(()) ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_o_p_e_r_a_t_i_o_n_s_._h_p_p" │ │ │ │ -char const* ooppeerraattiioonn__nnaammee (operation_t op); │ │ │ │ -maps an operation id (from _p_e_e_r___e_r_r_o_r___a_l_e_r_t and _p_e_e_r___d_i_s_c_o_n_n_e_c_t_e_d___a_l_e_r_t) to its │ │ │ │ -name. See _o_p_e_r_a_t_i_o_n___t for the constants │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ eennuumm ooppeerraattiioonn__tt ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_o_p_e_r_a_t_i_o_n_s_._h_p_p" │ │ │ │ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ |_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |unknown |0 |the error was unexpected and it is unknown which | │ │ │ │ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_o_p_e_r_a_t_i_o_n_ _c_a_u_s_e_d_ _i_t_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |bittorrent |1 |this is used when the bittorrent logic determines | │ │ ├── ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Bdecoding.html │ │ │ @@ -35,18 +35,18 @@ │ │ │
  • bdecode_node │ │ │ @@ -62,46 +62,46 @@ │ │ │ to be able to copy it as a reference for instance). For that, use the │ │ │ non_owning() member function.

    │ │ │

    There are 5 different types of nodes, see type_t.

    │ │ │
    │ │ │  struct bdecode_node
    │ │ │  {
    │ │ │     bdecode_node () = default;
    │ │ │ -   bdecode_node (bdecode_node const&);
    │ │ │ -   bdecode_node& operator= (bdecode_node const&) &;
    │ │ │     bdecode_node (bdecode_node&&) noexcept;
    │ │ │ +   bdecode_node (bdecode_node const&);
    │ │ │     bdecode_node& operator= (bdecode_node&&) & = default;
    │ │ │ +   bdecode_node& operator= (bdecode_node const&) &;
    │ │ │     type_t type () const noexcept;
    │ │ │     explicit operator bool () const noexcept;
    │ │ │     bdecode_node non_owning () const;
    │ │ │     span<char const> data_section () const noexcept;
    │ │ │     std::ptrdiff_t data_offset () const noexcept;
    │ │ │     string_view list_string_value_at (int i
    │ │ │        , string_view default_val = string_view()) const;
    │ │ │     bdecode_node list_at (int i) const;
    │ │ │ -   int list_size () const;
    │ │ │     std::int64_t list_int_value_at (int i
    │ │ │        , std::int64_t default_val = 0) const;
    │ │ │ -   std::pair<string_view, bdecode_node> dict_at (int i) const;
    │ │ │ +   int list_size () const;
    │ │ │     std::pair<bdecode_node, bdecode_node> dict_at_node (int i) const;
    │ │ │ -   bdecode_node dict_find_int (string_view key) const;
    │ │ │ -   std::int64_t dict_find_int_value (string_view key
    │ │ │ -      , std::int64_t default_val = 0) const;
    │ │ │ -   bdecode_node dict_find_dict (string_view key) const;
    │ │ │     string_view dict_find_string_value (string_view key
    │ │ │        , string_view default_value = string_view()) const;
    │ │ │ +   std::pair<string_view, bdecode_node> dict_at (int i) const;
    │ │ │ +   bdecode_node dict_find_string (string_view key) const;
    │ │ │ +   bdecode_node dict_find_dict (string_view key) const;
    │ │ │ +   std::int64_t dict_find_int_value (string_view key
    │ │ │ +      , std::int64_t default_val = 0) const;
    │ │ │     bdecode_node dict_find (string_view key) const;
    │ │ │     int dict_size () const;
    │ │ │     bdecode_node dict_find_list (string_view key) const;
    │ │ │ -   bdecode_node dict_find_string (string_view key) const;
    │ │ │ +   bdecode_node dict_find_int (string_view key) const;
    │ │ │     std::int64_t int_value () const;
    │ │ │ -   string_view string_value () const;
    │ │ │ -   char const* string_ptr () const;
    │ │ │     std::ptrdiff_t string_offset () const;
    │ │ │ +   string_view string_value () const;
    │ │ │     int string_length () const;
    │ │ │ +   char const* string_ptr () const;
    │ │ │     void clear ();
    │ │ │     void swap (bdecode_node& n);
    │ │ │     void reserve (int tokens);
    │ │ │     void switch_underlying_buffer (char const* buf) noexcept;
    │ │ │     bool has_soft_error (span<char> error) const;
    │ │ │  
    │ │ │     enum type_t
    │ │ │ @@ -121,18 +121,18 @@
    │ │ │  
    │ │ │

    creates a default constructed node, it will have the type none_t.

    │ │ │ │ │ │ [report issue] │ │ │
    │ │ │

    bdecode_node() operator=()

    │ │ │
    │ │ │ -bdecode_node (bdecode_node const&);
    │ │ │ -bdecode_node& operator= (bdecode_node const&) &;
    │ │ │  bdecode_node (bdecode_node&&) noexcept;
    │ │ │ +bdecode_node (bdecode_node const&);
    │ │ │  bdecode_node& operator= (bdecode_node&&) & = default;
    │ │ │ +bdecode_node& operator= (bdecode_node const&) &;
    │ │ │  
    │ │ │

    For owning nodes, the copy will create a copy of the tree, but the │ │ │ underlying buffer remains the same.

    │ │ │ [report issue]
    │ │ │
    │ │ │

    type()

    │ │ │
    │ │ │ @@ -164,57 +164,57 @@
    │ │ │  
    │ │ │

    returns the buffer and length of the section in the original bencoded │ │ │ buffer where this node is defined. For a dictionary for instance, this │ │ │ starts with d and ends with e, and has all the content of the │ │ │ dictionary in between. │ │ │ the data_offset() function returns the byte-offset to this node in, │ │ │ starting from the beginning of the buffer that was parsed.

    │ │ │ - │ │ │ │ │ │ │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    list_at() list_int_value_at() list_string_value_at() list_size()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    list_int_value_at() list_string_value_at() list_at() list_size()

    │ │ │
    │ │ │  string_view list_string_value_at (int i
    │ │ │        , string_view default_val = string_view()) const;
    │ │ │  bdecode_node list_at (int i) const;
    │ │ │ -int list_size () const;
    │ │ │  std::int64_t list_int_value_at (int i
    │ │ │        , std::int64_t default_val = 0) const;
    │ │ │ +int list_size () const;
    │ │ │  
    │ │ │

    functions with the list_ prefix operate on lists. These functions are │ │ │ only valid if type() == list_t. list_at() returns the item │ │ │ in the list at index i. i may not be greater than or equal to the │ │ │ size of the list. size() returns the size of the list.

    │ │ │ - │ │ │ │ │ │ - │ │ │ │ │ │ - │ │ │ - │ │ │ │ │ │ - │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    dict_find_dict() dict_at_node() dict_find_int() dict_find_string() dict_find() dict_find_list() dict_find_int_value() dict_size() dict_at() dict_find_string_value()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    dict_at_node() dict_find_string() dict_find_int_value() dict_find_int() dict_find_dict() dict_find() dict_find_string_value() dict_at() dict_size() dict_find_list()

    │ │ │
    │ │ │ -std::pair<string_view, bdecode_node> dict_at (int i) const;
    │ │ │  std::pair<bdecode_node, bdecode_node> dict_at_node (int i) const;
    │ │ │ -bdecode_node dict_find_int (string_view key) const;
    │ │ │ -std::int64_t dict_find_int_value (string_view key
    │ │ │ -      , std::int64_t default_val = 0) const;
    │ │ │ -bdecode_node dict_find_dict (string_view key) const;
    │ │ │  string_view dict_find_string_value (string_view key
    │ │ │        , string_view default_value = string_view()) const;
    │ │ │ +std::pair<string_view, bdecode_node> dict_at (int i) const;
    │ │ │ +bdecode_node dict_find_string (string_view key) const;
    │ │ │ +bdecode_node dict_find_dict (string_view key) const;
    │ │ │ +std::int64_t dict_find_int_value (string_view key
    │ │ │ +      , std::int64_t default_val = 0) const;
    │ │ │  bdecode_node dict_find (string_view key) const;
    │ │ │  int dict_size () const;
    │ │ │  bdecode_node dict_find_list (string_view key) const;
    │ │ │ -bdecode_node dict_find_string (string_view key) const;
    │ │ │ +bdecode_node dict_find_int (string_view key) const;
    │ │ │  
    │ │ │

    Functions with the dict_ prefix operates on dictionaries. They are │ │ │ only valid if type() == dict_t. In case a key you're looking up │ │ │ contains a 0 byte, you cannot use the 0-terminated string overloads, │ │ │ but have to use string_view instead. dict_find_list will return a │ │ │ valid bdecode_node if the key is found _and_ it is a list. Otherwise │ │ │ it will return a default-constructed bdecode_node.

    │ │ │ @@ -229,25 +229,25 @@ │ │ │
    │ │ │

    int_value()

    │ │ │
    │ │ │  std::int64_t int_value () const;
    │ │ │  
    │ │ │

    this function is only valid if type() == int_t. It returns the │ │ │ value of the integer.

    │ │ │ - │ │ │ │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    string_ptr() string_offset() string_length() string_value()

    │ │ │ + │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    string_offset() string_ptr() string_value() string_length()

    │ │ │
    │ │ │ -string_view string_value () const;
    │ │ │ -char const* string_ptr () const;
    │ │ │  std::ptrdiff_t string_offset () const;
    │ │ │ +string_view string_value () const;
    │ │ │  int string_length () const;
    │ │ │ +char const* string_ptr () const;
    │ │ │  
    │ │ │

    these functions are only valid if type() == string_t. They return │ │ │ the string values. Note that string_ptr() is not 0-terminated. │ │ │ string_length() returns the number of bytes in the string. │ │ │ string_offset() returns the byte offset from the start of the parsed │ │ │ bencoded buffer this string can be found.

    │ │ │ [report issue]
    │ │ │ @@ -346,18 +346,18 @@ │ │ │ that's returned.

    │ │ │ [report issue]
    │ │ │
    │ │ │

    bdecode()

    │ │ │

    Declared in "libtorrent/bdecode.hpp"

    │ │ │
    │ │ │  bdecode_node bdecode (span<char const> buffer
    │ │ │ +   , int depth_limit = 100, int token_limit = 2000000);
    │ │ │ +bdecode_node bdecode (span<char const> buffer
    │ │ │     , error_code& ec, int* error_pos = nullptr, int depth_limit = 100
    │ │ │     , int token_limit = 2000000);
    │ │ │ -bdecode_node bdecode (span<char const> buffer
    │ │ │ -   , int depth_limit = 100, int token_limit = 2000000);
    │ │ │  int bdecode (char const* start, char const* end, bdecode_node& ret
    │ │ │     , error_code& ec, int* error_pos = nullptr, int depth_limit = 100
    │ │ │     , int token_limit = 2000000);
    │ │ │  
    │ │ │

    This function decodes/parses bdecoded data (for example a .torrent file). │ │ │ The data structure is returned in the ret argument. the buffer to parse │ │ │ is specified by the start of the buffer as well as the end, i.e. one │ │ │ ├── html2text {} │ │ │ │ @@ -6,20 +6,20 @@ │ │ │ │ * _b_d_e_c_o_d_e___n_o_d_e │ │ │ │ o _b_d_e_c_o_d_e___n_o_d_e_(_) │ │ │ │ o _b_d_e_c_o_d_e___n_o_d_e_(_)_ _o_p_e_r_a_t_o_r_=_(_) │ │ │ │ o _t_y_p_e_(_) │ │ │ │ o _b_o_o_l_(_) │ │ │ │ o _n_o_n___o_w_n_i_n_g_(_) │ │ │ │ o _d_a_t_a___o_f_f_s_e_t_(_)_ _d_a_t_a___s_e_c_t_i_o_n_(_) │ │ │ │ - o _l_i_s_t___a_t_(_)_ _l_i_s_t___i_n_t___v_a_l_u_e___a_t_(_)_ _l_i_s_t___s_t_r_i_n_g___v_a_l_u_e___a_t_(_)_ _l_i_s_t___s_i_z_e_(_) │ │ │ │ - o _d_i_c_t___f_i_n_d___d_i_c_t_(_)_ _d_i_c_t___a_t___n_o_d_e_(_)_ _d_i_c_t___f_i_n_d___i_n_t_(_)_ _d_i_c_t___f_i_n_d___s_t_r_i_n_g_(_) │ │ │ │ - _d_i_c_t___f_i_n_d_(_)_ _d_i_c_t___f_i_n_d___l_i_s_t_(_)_ _d_i_c_t___f_i_n_d___i_n_t___v_a_l_u_e_(_)_ _d_i_c_t___s_i_z_e_(_) │ │ │ │ - _d_i_c_t___a_t_(_)_ _d_i_c_t___f_i_n_d___s_t_r_i_n_g___v_a_l_u_e_(_) │ │ │ │ + o _l_i_s_t___i_n_t___v_a_l_u_e___a_t_(_)_ _l_i_s_t___s_t_r_i_n_g___v_a_l_u_e___a_t_(_)_ _l_i_s_t___a_t_(_)_ _l_i_s_t___s_i_z_e_(_) │ │ │ │ + o _d_i_c_t___a_t___n_o_d_e_(_)_ _d_i_c_t___f_i_n_d___s_t_r_i_n_g_(_)_ _d_i_c_t___f_i_n_d___i_n_t___v_a_l_u_e_(_) │ │ │ │ + _d_i_c_t___f_i_n_d___i_n_t_(_)_ _d_i_c_t___f_i_n_d___d_i_c_t_(_)_ _d_i_c_t___f_i_n_d_(_)_ _d_i_c_t___f_i_n_d___s_t_r_i_n_g___v_a_l_u_e │ │ │ │ + _(_)_ _d_i_c_t___a_t_(_)_ _d_i_c_t___s_i_z_e_(_)_ _d_i_c_t___f_i_n_d___l_i_s_t_(_) │ │ │ │ o _i_n_t___v_a_l_u_e_(_) │ │ │ │ - o _s_t_r_i_n_g___p_t_r_(_)_ _s_t_r_i_n_g___o_f_f_s_e_t_(_)_ _s_t_r_i_n_g___l_e_n_g_t_h_(_)_ _s_t_r_i_n_g___v_a_l_u_e_(_) │ │ │ │ + o _s_t_r_i_n_g___o_f_f_s_e_t_(_)_ _s_t_r_i_n_g___p_t_r_(_)_ _s_t_r_i_n_g___v_a_l_u_e_(_)_ _s_t_r_i_n_g___l_e_n_g_t_h_(_) │ │ │ │ o _c_l_e_a_r_(_) │ │ │ │ o _s_w_a_p_(_) │ │ │ │ o _r_e_s_e_r_v_e_(_) │ │ │ │ o _s_w_i_t_c_h___u_n_d_e_r_l_y_i_n_g___b_u_f_f_e_r_(_) │ │ │ │ o _h_a_s___s_o_f_t___e_r_r_o_r_(_) │ │ │ │ o _e_n_u_m_ _t_y_p_e___t │ │ │ │ * _p_r_i_n_t___e_n_t_r_y_(_) │ │ │ │ @@ -30,46 +30,46 @@ │ │ │ │ Sometimes it's important to get a non-owning reference to the root node ( to be │ │ │ │ able to copy it as a reference for instance). For that, use the _n_o_n___o_w_n_i_n_g_(_) │ │ │ │ member function. │ │ │ │ There are 5 different types of nodes, see _t_y_p_e___t. │ │ │ │ struct bdecode_node │ │ │ │ { │ │ │ │ bbddeeccooddee__nnooddee () = default; │ │ │ │ - bbddeeccooddee__nnooddee (bdecode_node const&); │ │ │ │ - bdecode_node& ooppeerraattoorr== (bdecode_node const&) &; │ │ │ │ bbddeeccooddee__nnooddee (bdecode_node&&) noexcept; │ │ │ │ + bbddeeccooddee__nnooddee (bdecode_node const&); │ │ │ │ bdecode_node& ooppeerraattoorr== (bdecode_node&&) & = default; │ │ │ │ + bdecode_node& ooppeerraattoorr== (bdecode_node const&) &; │ │ │ │ type_t ttyyppee () const noexcept; │ │ │ │ explicit operator bbooooll () const noexcept; │ │ │ │ bdecode_node nnoonn__oowwnniinngg () const; │ │ │ │ span ddaattaa__sseeccttiioonn () const noexcept; │ │ │ │ std::ptrdiff_t ddaattaa__ooffffsseett () const noexcept; │ │ │ │ string_view lliisstt__ssttrriinngg__vvaalluuee__aatt (int i │ │ │ │ , string_view default_val = string_view()) const; │ │ │ │ bdecode_node lliisstt__aatt (int i) const; │ │ │ │ - int lliisstt__ssiizzee () const; │ │ │ │ std::int64_t lliisstt__iinntt__vvaalluuee__aatt (int i │ │ │ │ , std::int64_t default_val = 0) const; │ │ │ │ - std::pair ddiicctt__aatt (int i) const; │ │ │ │ + int lliisstt__ssiizzee () const; │ │ │ │ std::pair ddiicctt__aatt__nnooddee (int i) const; │ │ │ │ - bdecode_node ddiicctt__ffiinndd__iinntt (string_view key) const; │ │ │ │ - std::int64_t ddiicctt__ffiinndd__iinntt__vvaalluuee (string_view key │ │ │ │ - , std::int64_t default_val = 0) const; │ │ │ │ - bdecode_node ddiicctt__ffiinndd__ddiicctt (string_view key) const; │ │ │ │ string_view ddiicctt__ffiinndd__ssttrriinngg__vvaalluuee (string_view key │ │ │ │ , string_view default_value = string_view()) const; │ │ │ │ + std::pair ddiicctt__aatt (int i) const; │ │ │ │ + bdecode_node ddiicctt__ffiinndd__ssttrriinngg (string_view key) const; │ │ │ │ + bdecode_node ddiicctt__ffiinndd__ddiicctt (string_view key) const; │ │ │ │ + std::int64_t ddiicctt__ffiinndd__iinntt__vvaalluuee (string_view key │ │ │ │ + , std::int64_t default_val = 0) const; │ │ │ │ bdecode_node ddiicctt__ffiinndd (string_view key) const; │ │ │ │ int ddiicctt__ssiizzee () const; │ │ │ │ bdecode_node ddiicctt__ffiinndd__lliisstt (string_view key) const; │ │ │ │ - bdecode_node ddiicctt__ffiinndd__ssttrriinngg (string_view key) const; │ │ │ │ + bdecode_node ddiicctt__ffiinndd__iinntt (string_view key) const; │ │ │ │ std::int64_t iinntt__vvaalluuee () const; │ │ │ │ - string_view ssttrriinngg__vvaalluuee () const; │ │ │ │ - char const* ssttrriinngg__ppttrr () const; │ │ │ │ std::ptrdiff_t ssttrriinngg__ooffffsseett () const; │ │ │ │ + string_view ssttrriinngg__vvaalluuee () const; │ │ │ │ int ssttrriinngg__lleennggtthh () const; │ │ │ │ + char const* ssttrriinngg__ppttrr () const; │ │ │ │ void cclleeaarr (); │ │ │ │ void sswwaapp (bdecode_node& n); │ │ │ │ void rreesseerrvvee (int tokens); │ │ │ │ void sswwiittcchh__uunnddeerrllyyiinngg__bbuuffffeerr (char const* buf) noexcept; │ │ │ │ bool hhaass__ssoofftt__eerrrroorr (span error) const; │ │ │ │ │ │ │ │ enum type_t │ │ │ │ @@ -83,18 +83,18 @@ │ │ │ │ }; │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** bbddeeccooddee__nnooddee(()) ********** │ │ │ │ bbddeeccooddee__nnooddee () = default; │ │ │ │ creates a default constructed node, it will have the type none_t. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** bbddeeccooddee__nnooddee(()) ooppeerraattoorr==(()) ********** │ │ │ │ -bbddeeccooddee__nnooddee (bdecode_node const&); │ │ │ │ -bdecode_node& ooppeerraattoorr== (bdecode_node const&) &; │ │ │ │ bbddeeccooddee__nnooddee (bdecode_node&&) noexcept; │ │ │ │ +bbddeeccooddee__nnooddee (bdecode_node const&); │ │ │ │ bdecode_node& ooppeerraattoorr== (bdecode_node&&) & = default; │ │ │ │ +bdecode_node& ooppeerraattoorr== (bdecode_node const&) &; │ │ │ │ For owning nodes, the copy will create a copy of the tree, but the underlying │ │ │ │ buffer remains the same. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** ttyyppee(()) ********** │ │ │ │ type_t ttyyppee () const noexcept; │ │ │ │ the type of this node. See _t_y_p_e___t. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ @@ -112,41 +112,41 @@ │ │ │ │ std::ptrdiff_t ddaattaa__ooffffsseett () const noexcept; │ │ │ │ returns the buffer and length of the section in the original bencoded buffer │ │ │ │ where this node is defined. For a dictionary for instance, this starts with d │ │ │ │ and ends with e, and has all the content of the dictionary in between. the │ │ │ │ data_offset() function returns the byte-offset to this node in, starting from │ │ │ │ the beginning of the buffer that was parsed. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** lliisstt__aatt(()) lliisstt__iinntt__vvaalluuee__aatt(()) lliisstt__ssttrriinngg__vvaalluuee__aatt(()) lliisstt__ssiizzee(()) ********** │ │ │ │ +********** lliisstt__iinntt__vvaalluuee__aatt(()) lliisstt__ssttrriinngg__vvaalluuee__aatt(()) lliisstt__aatt(()) lliisstt__ssiizzee(()) ********** │ │ │ │ string_view lliisstt__ssttrriinngg__vvaalluuee__aatt (int i │ │ │ │ , string_view default_val = string_view()) const; │ │ │ │ bdecode_node lliisstt__aatt (int i) const; │ │ │ │ -int lliisstt__ssiizzee () const; │ │ │ │ std::int64_t lliisstt__iinntt__vvaalluuee__aatt (int i │ │ │ │ , std::int64_t default_val = 0) const; │ │ │ │ +int lliisstt__ssiizzee () const; │ │ │ │ functions with the list_ prefix operate on lists. These functions are only │ │ │ │ valid if type() == list_t. list_at() returns the item in the list at index i. i │ │ │ │ may not be greater than or equal to the size of the list. size() returns the │ │ │ │ size of the list. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** ddiicctt__ffiinndd__ddiicctt(()) ddiicctt__aatt__nnooddee(()) ddiicctt__ffiinndd__iinntt(()) ddiicctt__ffiinndd__ssttrriinngg(()) │ │ │ │ -ddiicctt__ffiinndd(()) ddiicctt__ffiinndd__lliisstt(()) ddiicctt__ffiinndd__iinntt__vvaalluuee(()) ddiicctt__ssiizzee(()) ddiicctt__aatt(()) │ │ │ │ -ddiicctt__ffiinndd__ssttrriinngg__vvaalluuee(()) ********** │ │ │ │ -std::pair ddiicctt__aatt (int i) const; │ │ │ │ +********** ddiicctt__aatt__nnooddee(()) ddiicctt__ffiinndd__ssttrriinngg(()) ddiicctt__ffiinndd__iinntt__vvaalluuee(()) ddiicctt__ffiinndd__iinntt(()) │ │ │ │ +ddiicctt__ffiinndd__ddiicctt(()) ddiicctt__ffiinndd(()) ddiicctt__ffiinndd__ssttrriinngg__vvaalluuee(()) ddiicctt__aatt(()) ddiicctt__ssiizzee(()) │ │ │ │ +ddiicctt__ffiinndd__lliisstt(()) ********** │ │ │ │ std::pair ddiicctt__aatt__nnooddee (int i) const; │ │ │ │ -bdecode_node ddiicctt__ffiinndd__iinntt (string_view key) const; │ │ │ │ -std::int64_t ddiicctt__ffiinndd__iinntt__vvaalluuee (string_view key │ │ │ │ - , std::int64_t default_val = 0) const; │ │ │ │ -bdecode_node ddiicctt__ffiinndd__ddiicctt (string_view key) const; │ │ │ │ string_view ddiicctt__ffiinndd__ssttrriinngg__vvaalluuee (string_view key │ │ │ │ , string_view default_value = string_view()) const; │ │ │ │ +std::pair ddiicctt__aatt (int i) const; │ │ │ │ +bdecode_node ddiicctt__ffiinndd__ssttrriinngg (string_view key) const; │ │ │ │ +bdecode_node ddiicctt__ffiinndd__ddiicctt (string_view key) const; │ │ │ │ +std::int64_t ddiicctt__ffiinndd__iinntt__vvaalluuee (string_view key │ │ │ │ + , std::int64_t default_val = 0) const; │ │ │ │ bdecode_node ddiicctt__ffiinndd (string_view key) const; │ │ │ │ int ddiicctt__ssiizzee () const; │ │ │ │ bdecode_node ddiicctt__ffiinndd__lliisstt (string_view key) const; │ │ │ │ -bdecode_node ddiicctt__ffiinndd__ssttrriinngg (string_view key) const; │ │ │ │ +bdecode_node ddiicctt__ffiinndd__iinntt (string_view key) const; │ │ │ │ Functions with the dict_ prefix operates on dictionaries. They are only valid │ │ │ │ if type() == dict_t. In case a key you're looking up contains a 0 byte, you │ │ │ │ cannot use the 0-terminated string overloads, but have to use string_view │ │ │ │ instead. dict_find_list will return a valid bdecode_node if the key is found │ │ │ │ _and_ it is a list. Otherwise it will return a default-constructed │ │ │ │ _b_d_e_c_o_d_e___n_o_d_e. │ │ │ │ Functions with the _value suffix return the value of the node directly, rather │ │ │ │ @@ -158,19 +158,19 @@ │ │ │ │ string). │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** iinntt__vvaalluuee(()) ********** │ │ │ │ std::int64_t iinntt__vvaalluuee () const; │ │ │ │ this function is only valid if type() == int_t. It returns the value of the │ │ │ │ integer. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** ssttrriinngg__ppttrr(()) ssttrriinngg__ooffffsseett(()) ssttrriinngg__lleennggtthh(()) ssttrriinngg__vvaalluuee(()) ********** │ │ │ │ -string_view ssttrriinngg__vvaalluuee () const; │ │ │ │ -char const* ssttrriinngg__ppttrr () const; │ │ │ │ +********** ssttrriinngg__ooffffsseett(()) ssttrriinngg__ppttrr(()) ssttrriinngg__vvaalluuee(()) ssttrriinngg__lleennggtthh(()) ********** │ │ │ │ std::ptrdiff_t ssttrriinngg__ooffffsseett () const; │ │ │ │ +string_view ssttrriinngg__vvaalluuee () const; │ │ │ │ int ssttrriinngg__lleennggtthh () const; │ │ │ │ +char const* ssttrriinngg__ppttrr () const; │ │ │ │ these functions are only valid if type() == string_t. They return the string │ │ │ │ values. Note that string_ptr() is nnoott 0-terminated. string_length() returns the │ │ │ │ number of bytes in the string. string_offset() returns the byte offset from the │ │ │ │ start of the parsed bencoded buffer this string can be found. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** cclleeaarr(()) ********** │ │ │ │ void cclleeaarr (); │ │ │ │ @@ -215,18 +215,18 @@ │ │ │ │ , bool single_line = false, int indent = 0); │ │ │ │ print the bencoded structure in a human-readable format to a string that's │ │ │ │ returned. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ bbddeeccooddee(()) ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_b_d_e_c_o_d_e_._h_p_p" │ │ │ │ bdecode_node bbddeeccooddee (span buffer │ │ │ │ + , int depth_limit = 100, int token_limit = 2000000); │ │ │ │ +bdecode_node bbddeeccooddee (span buffer │ │ │ │ , error_code& ec, int* error_pos = nullptr, int depth_limit = 100 │ │ │ │ , int token_limit = 2000000); │ │ │ │ -bdecode_node bbddeeccooddee (span buffer │ │ │ │ - , int depth_limit = 100, int token_limit = 2000000); │ │ │ │ int bbddeeccooddee (char const* start, char const* end, bdecode_node& ret │ │ │ │ , error_code& ec, int* error_pos = nullptr, int depth_limit = 100 │ │ │ │ , int token_limit = 2000000); │ │ │ │ This function decodes/parses bdecoded data (for example a .torrent file). The │ │ │ │ data structure is returned in the ret argument. the buffer to parse is │ │ │ │ specified by the start of the buffer as well as the end, i.e. one byte past the │ │ │ │ end. If the buffer fails to parse, the function returns a non-zero value and │ │ ├── ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Bencoding.html │ │ │ @@ -34,28 +34,28 @@ │ │ │

    │ │ │
    │ │ │

    Bencoding is a common representation in bittorrent used for dictionary, │ │ │ -list, int and string hierarchies. It's used to encode .torrent files and │ │ │ +list, int and string hierarchies. It's used to encode .torrent files and │ │ │ some messages in the network protocol. libtorrent also uses it to store │ │ │ settings, resume data and other session state.

    │ │ │

    Strings in bencoded structures do not necessarily represent text. │ │ │ Strings are raw byte buffers of a certain length. If a string is meant to be │ │ │ interpreted as text, it is required to be UTF-8 encoded. See BEP 3.

    │ │ │

    The function for decoding bencoded data bdecode(), returning a bdecode_node. │ │ │ This function builds a tree that points back into the original buffer. The │ │ │ @@ -69,46 +69,46 @@ │ │ │

    The entry class represents one node in a bencoded hierarchy. It works as a │ │ │ variant type, it can be either a list, a dictionary (std::map), an integer │ │ │ or a string.

    │ │ │
    │ │ │  class entry
    │ │ │  {
    │ │ │     data_type type () const;
    │ │ │ -   entry (list_type);
    │ │ │ -   entry (preformatted_type);
    │ │ │ -   entry (integer_type);
    │ │ │     entry (dictionary_type);
    │ │ │ +   entry (integer_type);
    │ │ │     entry (span<char const>);
    │ │ │ +   entry (preformatted_type);
    │ │ │ +   entry (list_type);
    │ │ │     entry (U v);
    │ │ │     entry (data_type t);
    │ │ │     entry (bdecode_node const& n);
    │ │ │ -   entry& operator= (span<char const>) &;
    │ │ │ +   entry& operator= (bdecode_node const&) &;
    │ │ │ +   entry& operator= (integer_type) &;
    │ │ │ +   entry& operator= (entry&&) & noexcept;
    │ │ │     entry& operator= (preformatted_type) &;
    │ │ │ -   entry& operator= (list_type) &;
    │ │ │     entry& operator= (dictionary_type) &;
    │ │ │ +   entry& operator= (span<char const>) &;
    │ │ │ +   entry& operator= (list_type) &;
    │ │ │     entry& operator= (entry const&) &;
    │ │ │ -   entry& operator= (entry&&) & noexcept;
    │ │ │ -   entry& operator= (integer_type) &;
    │ │ │ -   entry& operator= (bdecode_node const&) &;
    │ │ │     entry& operator= (U v) &;
    │ │ │ -   list_type const& list () const;
    │ │ │ -   dictionary_type& dict ();
    │ │ │ -   integer_type const& integer () const;
    │ │ │ -   integer_type& integer ();
    │ │ │ -   string_type& string ();
    │ │ │ -   list_type& list ();
    │ │ │     preformatted_type& preformatted ();
    │ │ │ -   preformatted_type const& preformatted () const;
    │ │ │ -   string_type const& string () const;
    │ │ │ +   list_type& list ();
    │ │ │     dictionary_type const& dict () const;
    │ │ │ +   string_type const& string () const;
    │ │ │ +   preformatted_type const& preformatted () const;
    │ │ │ +   integer_type const& integer () const;
    │ │ │ +   string_type& string ();
    │ │ │ +   dictionary_type& dict ();
    │ │ │ +   list_type const& list () const;
    │ │ │ +   integer_type& integer ();
    │ │ │     void swap (entry& e);
    │ │ │ -   entry const& operator[] (string_view key) const;
    │ │ │     entry& operator[] (string_view key);
    │ │ │ -   entry const* find_key (string_view key) const;
    │ │ │ +   entry const& operator[] (string_view key) const;
    │ │ │     entry* find_key (string_view key);
    │ │ │ +   entry const* find_key (string_view key) const;
    │ │ │     std::string to_string (bool single_line = false) const;
    │ │ │  
    │ │ │     enum data_type
    │ │ │     {
    │ │ │        int_t,
    │ │ │        string_t,
    │ │ │        list_t,
    │ │ │ @@ -124,19 +124,19 @@
    │ │ │  data_type type () const;
    │ │ │  
    │ │ │

    returns the concrete type of the entry

    │ │ │ [report issue] │ │ │
    │ │ │

    entry()

    │ │ │
    │ │ │ -entry (list_type);
    │ │ │ -entry (preformatted_type);
    │ │ │ -entry (integer_type);
    │ │ │  entry (dictionary_type);
    │ │ │ +entry (integer_type);
    │ │ │  entry (span<char const>);
    │ │ │ +entry (preformatted_type);
    │ │ │ +entry (list_type);
    │ │ │  
    │ │ │

    constructors directly from a specific type. │ │ │ The content of the argument is copied into the │ │ │ newly constructed entry

    │ │ │ [report issue]
    │ │ │
    │ │ │

    entry()

    │ │ │ @@ -152,43 +152,43 @@ │ │ │ entry (bdecode_node const& n); │ │ │ │ │ │

    construct from bdecode_node parsed form (see bdecode())

    │ │ │ [report issue]
    │ │ │
    │ │ │

    operator=()

    │ │ │
    │ │ │ -entry& operator= (span<char const>) &;
    │ │ │ +entry& operator= (bdecode_node const&) &;
    │ │ │ +entry& operator= (integer_type) &;
    │ │ │ +entry& operator= (entry&&) & noexcept;
    │ │ │  entry& operator= (preformatted_type) &;
    │ │ │ -entry& operator= (list_type) &;
    │ │ │  entry& operator= (dictionary_type) &;
    │ │ │ +entry& operator= (span<char const>) &;
    │ │ │ +entry& operator= (list_type) &;
    │ │ │  entry& operator= (entry const&) &;
    │ │ │ -entry& operator= (entry&&) & noexcept;
    │ │ │ -entry& operator= (integer_type) &;
    │ │ │ -entry& operator= (bdecode_node const&) &;
    │ │ │  
    │ │ │

    copies the structure of the right hand side into this │ │ │ entry.

    │ │ │ - │ │ │ - │ │ │ │ │ │ │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    dict() integer() preformatted() list() string()

    │ │ │ + │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    preformatted() list() dict() integer() string()

    │ │ │
    │ │ │ -list_type const& list () const;
    │ │ │ -dictionary_type& dict ();
    │ │ │ -integer_type const& integer () const;
    │ │ │ -integer_type& integer ();
    │ │ │ -string_type& string ();
    │ │ │ -list_type& list ();
    │ │ │  preformatted_type& preformatted ();
    │ │ │ -preformatted_type const& preformatted () const;
    │ │ │ -string_type const& string () const;
    │ │ │ +list_type& list ();
    │ │ │  dictionary_type const& dict () const;
    │ │ │ +string_type const& string () const;
    │ │ │ +preformatted_type const& preformatted () const;
    │ │ │ +integer_type const& integer () const;
    │ │ │ +string_type& string ();
    │ │ │ +dictionary_type& dict ();
    │ │ │ +list_type const& list () const;
    │ │ │ +integer_type& integer ();
    │ │ │  
    │ │ │

    The integer(), string(), list() and dict() functions │ │ │ are accessors that return the respective type. If the entry object │ │ │ isn't of the type you request, the accessor will throw │ │ │ system_error. You can ask an entry for its type through the │ │ │ type() function.

    │ │ │

    If you want to create an entry you give it the type you want it to │ │ │ @@ -232,32 +232,32 @@ │ │ │ void swap (entry& e); │ │ │ │ │ │

    swaps the content of this with e.

    │ │ │ [report issue]
    │ │ │
    │ │ │

    operator[]()

    │ │ │
    │ │ │ -entry const& operator[] (string_view key) const;
    │ │ │  entry& operator[] (string_view key);
    │ │ │ +entry const& operator[] (string_view key) const;
    │ │ │  
    │ │ │

    All of these functions requires the entry to be a dictionary, if it │ │ │ isn't they will throw system_error.

    │ │ │

    The non-const versions of the operator[] will return a reference │ │ │ to either the existing element at the given key or, if there is no │ │ │ element with the given key, a reference to a newly inserted element at │ │ │ that key.

    │ │ │

    The const version of operator[] will only return a reference to an │ │ │ existing element at the given key. If the key is not found, it will │ │ │ throw system_error.

    │ │ │ [report issue]
    │ │ │
    │ │ │

    find_key()

    │ │ │
    │ │ │ -entry const* find_key (string_view key) const;
    │ │ │  entry* find_key (string_view key);
    │ │ │ +entry const* find_key (string_view key) const;
    │ │ │  
    │ │ │

    These functions requires the entry to be a dictionary, if it isn't │ │ │ they will throw system_error.

    │ │ │

    They will look for an element at the given key in the dictionary, if │ │ │ the element cannot be found, they will return nullptr. If an element │ │ │ with the given key is found, the return a pointer to it.

    │ │ │ [report issue]
    │ │ │ @@ -307,24 +307,16 @@ │ │ │ │ │ │
  • │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
    preformatted_t5 
    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -
    │ │ │ -

    operator<<()

    │ │ │ -

    Declared in "libtorrent/entry.hpp"

    │ │ │ -
    │ │ │ -inline std::ostream& operator<< (std::ostream& os, const entry& e);
    │ │ │ -
    │ │ │ -

    prints the bencoded structure to the ostream as a JSON-style structure.

    │ │ │ [report issue]
    │ │ │ +
    │ │ │
    │ │ │

    bencode()

    │ │ │

    Declared in "libtorrent/bencode.hpp"

    │ │ │
    │ │ │  template<class OutIt> int bencode (OutIt out, const entry& e);
    │ │ │  
    │ │ │

    This function will encode data to bencoded form.

    │ │ │ @@ -336,14 +328,22 @@ │ │ │ instantiated as ostream_iterator or back_insert_iterator. This │ │ │ function assumes the value_type of the iterator is a char. │ │ │ In order to encode entry e into a buffer, do:

    │ │ │
    │ │ │  std::vector<char> buf;
    │ │ │  bencode(std::back_inserter(buf), e);
    │ │ │  
    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    operator<<()

    │ │ │ +

    Declared in "libtorrent/entry.hpp"

    │ │ │ +
    │ │ │ +inline std::ostream& operator<< (std::ostream& os, const entry& e);
    │ │ │ +
    │ │ │ +

    prints the bencoded structure to the ostream as a JSON-style structure.

    │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │
    │ │ │
    │ │ │ │ │ │
    │ │ │ +
    │ │ │ +

    gzip_category()

    │ │ │ +

    Declared in "libtorrent/gzip.hpp"

    │ │ │ +
    │ │ │ +boost::system::error_category& gzip_category ();
    │ │ │ +
    │ │ │ +

    get the error_category for zip errors

    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    pcp_category()

    │ │ │ +

    Declared in "libtorrent/natpmp.hpp"

    │ │ │ +
    │ │ │ +boost::system::error_category& pcp_category ();
    │ │ │ +
    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    socks_category()

    │ │ │ +

    Declared in "libtorrent/socks5_stream.hpp"

    │ │ │ +
    │ │ │ +boost::system::error_category& socks_category ();
    │ │ │ +
    │ │ │ +

    returns the error_category for SOCKS5 errors

    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    i2p_category()

    │ │ │ +

    Declared in "libtorrent/i2p_stream.hpp"

    │ │ │ +
    │ │ │ +boost::system::error_category& i2p_category ();
    │ │ │ +
    │ │ │ +

    returns the error category for I2P errors

    │ │ │ +[report issue]
    │ │ │
    │ │ │

    libtorrent_category()

    │ │ │

    Declared in "libtorrent/error_code.hpp"

    │ │ │
    │ │ │  boost::system::error_category& libtorrent_category ();
    │ │ │  
    │ │ │

    return the instance of the libtorrent_error_category which │ │ │ @@ -112,63 +143,317 @@ │ │ │

    │ │ │

    http_category()

    │ │ │

    Declared in "libtorrent/error_code.hpp"

    │ │ │
    │ │ │  boost::system::error_category& http_category ();
    │ │ │  
    │ │ │

    returns the error_category for HTTP errors

    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    gzip_category()

    │ │ │ -

    Declared in "libtorrent/gzip.hpp"

    │ │ │ -
    │ │ │ -boost::system::error_category& gzip_category ();
    │ │ │ -
    │ │ │ -

    get the error_category for zip errors

    │ │ │ [report issue]
    │ │ │
    │ │ │

    upnp_category()

    │ │ │

    Declared in "libtorrent/upnp.hpp"

    │ │ │
    │ │ │  boost::system::error_category& upnp_category ();
    │ │ │  
    │ │ │

    the boost.system error category for UPnP errors

    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    i2p_category()

    │ │ │ -

    Declared in "libtorrent/i2p_stream.hpp"

    │ │ │ -
    │ │ │ -boost::system::error_category& i2p_category ();
    │ │ │ -
    │ │ │ -

    returns the error category for I2P errors

    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    socks_category()

    │ │ │ -

    Declared in "libtorrent/socks5_stream.hpp"

    │ │ │ -
    │ │ │ -boost::system::error_category& socks_category ();
    │ │ │ -
    │ │ │ -

    returns the error_category for SOCKS5 errors

    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    pcp_category()

    │ │ │ -

    Declared in "libtorrent/natpmp.hpp"

    │ │ │ -
    │ │ │ -boost::system::error_category& pcp_category ();
    │ │ │ -
    │ │ │ [report issue]
    │ │ │
    │ │ │

    bdecode_category()

    │ │ │

    Declared in "libtorrent/bdecode.hpp"

    │ │ │
    │ │ │  boost::system::error_category& bdecode_category ();
    │ │ │  
    │ │ │ [report issue]
    │ │ │
    │ │ │

    enum error_code_enum

    │ │ │ +

    Declared in "libtorrent/gzip.hpp"

    │ │ │ + │ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
    namevaluedescription
    no_error0Not an error
    invalid_gzip_header1the supplied gzip buffer has invalid header
    inflated_data_too_large2the gzip buffer would inflate to more bytes than the specified │ │ │ +maximum size, and was rejected.
    data_did_not_terminate3available inflate data did not terminate
    space_exhausted4output space exhausted before completing inflate
    invalid_block_type5invalid block type (type == 3)
    invalid_stored_block_length6stored block length did not match one's complement
    too_many_length_or_distance_codes7dynamic block code description: too many length or distance codes
    code_lengths_codes_incomplete8dynamic block code description: code lengths codes incomplete
    repeat_lengths_with_no_first_length9dynamic block code description: repeat lengths with no first length
    repeat_more_than_specified_lengths10dynamic block code description: repeat more than specified lengths
    invalid_literal_length_code_lengths11dynamic block code description: invalid literal/length code lengths
    invalid_distance_code_lengths12dynamic block code description: invalid distance code lengths
    invalid_literal_code_in_block13invalid literal/length or distance code in fixed or dynamic block
    distance_too_far_back_in_block14distance is too far back in fixed or dynamic block
    unknown_gzip_error15an unknown error occurred during gzip inflation
    error_code_max16the number of error codes
    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    enum pcp_errors

    │ │ │ +

    Declared in "libtorrent/natpmp.hpp"

    │ │ │ + │ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
    namevaluedescription
    pcp_success0 
    pcp_unsupp_version1 
    pcp_not_authorized2 
    pcp_malformed_request3 
    pcp_unsupp_opcode4 
    pcp_unsupp_option5 
    pcp_malformed_option6 
    pcp_network_failure7 
    pcp_no_resources8 
    pcp_unsupp_protocol9 
    pcp_user_ex_quota10 
    pcp_cannot_provide_external11 
    pcp_address_mismatch12 
    pcp_excessive_remote_peers13 
    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    enum socks_error_code

    │ │ │ +

    Declared in "libtorrent/socks5_stream.hpp"

    │ │ │ + │ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
    namevaluedescription
    no_error0 
    unsupported_version1 
    unsupported_authentication_method2 
    unsupported_authentication_version3 
    authentication_error4 
    username_required5 
    general_failure6 
    command_not_supported7 
    no_identd8 
    identd_error9 
    num_errors10 
    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    enum i2p_error_code

    │ │ │ +

    Declared in "libtorrent/i2p_stream.hpp"

    │ │ │ + │ │ │ +│ │ │ +│ │ │ +│ │ │ +│ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ +
    namevaluedescription
    no_error0 
    parse_failed1 
    cant_reach_peer2 
    i2p_error3 
    invalid_key4 
    invalid_id5 
    timeout6 
    key_not_found7 
    duplicated_id8 
    num_errors9 
    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    enum error_code_enum

    │ │ │

    Declared in "libtorrent/error_code.hpp"

    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -992,102 +1277,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
    service_unavailable503 
    │ │ │ [report issue]
    │ │ │ -
    │ │ │ -

    enum error_code_enum

    │ │ │ -

    Declared in "libtorrent/gzip.hpp"

    │ │ │ - │ │ │ -│ │ │ -│ │ │ -│ │ │ -│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
    namevaluedescription
    no_error0Not an error
    invalid_gzip_header1the supplied gzip buffer has invalid header
    inflated_data_too_large2the gzip buffer would inflate to more bytes than the specified │ │ │ -maximum size, and was rejected.
    data_did_not_terminate3available inflate data did not terminate
    space_exhausted4output space exhausted before completing inflate
    invalid_block_type5invalid block type (type == 3)
    invalid_stored_block_length6stored block length did not match one's complement
    too_many_length_or_distance_codes7dynamic block code description: too many length or distance codes
    code_lengths_codes_incomplete8dynamic block code description: code lengths codes incomplete
    repeat_lengths_with_no_first_length9dynamic block code description: repeat lengths with no first length
    repeat_more_than_specified_lengths10dynamic block code description: repeat more than specified lengths
    invalid_literal_length_code_lengths11dynamic block code description: invalid literal/length code lengths
    invalid_distance_code_lengths12dynamic block code description: invalid distance code lengths
    invalid_literal_code_in_block13invalid literal/length or distance code in fixed or dynamic block
    distance_too_far_back_in_block14distance is too far back in fixed or dynamic block
    unknown_gzip_error15an unknown error occurred during gzip inflation
    error_code_max16the number of error codes
    │ │ │ -[report issue]
    │ │ │
    │ │ │

    enum error_code_enum

    │ │ │

    Declared in "libtorrent/upnp.hpp"

    │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1148,211 +1345,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
    external_port_must_be_wildcard727ExternalPort must be a wildcard and cannot be a │ │ │ specific port
    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    enum i2p_error_code

    │ │ │ -

    Declared in "libtorrent/i2p_stream.hpp"

    │ │ │ - │ │ │ -│ │ │ -│ │ │ -│ │ │ -│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
    namevaluedescription
    no_error0 
    parse_failed1 
    cant_reach_peer2 
    i2p_error3 
    invalid_key4 
    invalid_id5 
    timeout6 
    key_not_found7 
    duplicated_id8 
    num_errors9 
    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    enum socks_error_code

    │ │ │ -

    Declared in "libtorrent/socks5_stream.hpp"

    │ │ │ - │ │ │ -│ │ │ -│ │ │ -│ │ │ -│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
    namevaluedescription
    no_error0 
    unsupported_version1 
    unsupported_authentication_method2 
    unsupported_authentication_version3 
    authentication_error4 
    username_required5 
    general_failure6 
    command_not_supported7 
    no_identd8 
    identd_error9 
    num_errors10 
    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    enum pcp_errors

    │ │ │ -

    Declared in "libtorrent/natpmp.hpp"

    │ │ │ - │ │ │ -│ │ │ -│ │ │ -│ │ │ -│ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ -
    namevaluedescription
    pcp_success0 
    pcp_unsupp_version1 
    pcp_not_authorized2 
    pcp_malformed_request3 
    pcp_unsupp_opcode4 
    pcp_unsupp_option5 
    pcp_malformed_option6 
    pcp_network_failure7 
    pcp_no_resources8 
    pcp_unsupp_protocol9 
    pcp_user_ex_quota10 
    pcp_cannot_provide_external11 
    pcp_address_mismatch12 
    pcp_excessive_remote_peers13 
    │ │ │ [report issue]
    │ │ │
    │ │ │

    enum error_code_enum

    │ │ │

    Declared in "libtorrent/bdecode.hpp"

    │ │ │ │ │ │ │ │ │ │ │ │ @@ -1380,15 +1380,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ @@ -2,30 +2,30 @@ │ │ │ │ _[_l_i_b_t_o_r_r_e_n_t_ _l_o_g_o_] │ │ │ │ VVeerrssiioonn:: 2.0.11 │ │ │ │ _h_o_m_e │ │ │ │ Table of contents │ │ │ │ * _s_t_o_r_a_g_e___e_r_r_o_r │ │ │ │ o _b_o_o_l_(_) │ │ │ │ o _f_i_l_e_(_) │ │ │ │ + * _g_z_i_p___c_a_t_e_g_o_r_y_(_) │ │ │ │ + * _p_c_p___c_a_t_e_g_o_r_y_(_) │ │ │ │ + * _s_o_c_k_s___c_a_t_e_g_o_r_y_(_) │ │ │ │ + * _i_2_p___c_a_t_e_g_o_r_y_(_) │ │ │ │ * _l_i_b_t_o_r_r_e_n_t___c_a_t_e_g_o_r_y_(_) │ │ │ │ * _h_t_t_p___c_a_t_e_g_o_r_y_(_) │ │ │ │ - * _g_z_i_p___c_a_t_e_g_o_r_y_(_) │ │ │ │ * _u_p_n_p___c_a_t_e_g_o_r_y_(_) │ │ │ │ - * _i_2_p___c_a_t_e_g_o_r_y_(_) │ │ │ │ - * _s_o_c_k_s___c_a_t_e_g_o_r_y_(_) │ │ │ │ - * _p_c_p___c_a_t_e_g_o_r_y_(_) │ │ │ │ * _b_d_e_c_o_d_e___c_a_t_e_g_o_r_y_(_) │ │ │ │ * _e_n_u_m_ _e_r_r_o_r___c_o_d_e___e_n_u_m │ │ │ │ + * _e_n_u_m_ _p_c_p___e_r_r_o_r_s │ │ │ │ + * _e_n_u_m_ _s_o_c_k_s___e_r_r_o_r___c_o_d_e │ │ │ │ + * _e_n_u_m_ _i_2_p___e_r_r_o_r___c_o_d_e │ │ │ │ + * _e_n_u_m_ _e_r_r_o_r___c_o_d_e___e_n_u_m │ │ │ │ * _e_n_u_m_ _h_t_t_p___e_r_r_o_r_s │ │ │ │ * _e_n_u_m_ _e_r_r_o_r___c_o_d_e___e_n_u_m │ │ │ │ * _e_n_u_m_ _e_r_r_o_r___c_o_d_e___e_n_u_m │ │ │ │ - * _e_n_u_m_ _i_2_p___e_r_r_o_r___c_o_d_e │ │ │ │ - * _e_n_u_m_ _s_o_c_k_s___e_r_r_o_r___c_o_d_e │ │ │ │ - * _e_n_u_m_ _p_c_p___e_r_r_o_r_s │ │ │ │ - * _e_n_u_m_ _e_r_r_o_r___c_o_d_e___e_n_u_m │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ ssttoorraaggee__eerrrroorr ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_e_r_r_o_r___c_o_d_e_._h_p_p" │ │ │ │ used by storage to return errors also includes which underlying file the error │ │ │ │ happened on │ │ │ │ struct storage_error │ │ │ │ { │ │ │ │ @@ -50,52 +50,139 @@ │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ec │ │ │ │ the error that occurred │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ operation │ │ │ │ A code from _o_p_e_r_a_t_i_o_n___t enum, indicating what kind of operation failed. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ ggzziipp__ccaatteeggoorryy(()) ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_g_z_i_p_._h_p_p" │ │ │ │ +boost::system::error_category& ggzziipp__ccaatteeggoorryy (); │ │ │ │ +get the error_category for zip errors │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ ppccpp__ccaatteeggoorryy(()) ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_n_a_t_p_m_p_._h_p_p" │ │ │ │ +boost::system::error_category& ppccpp__ccaatteeggoorryy (); │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ ssoocckkss__ccaatteeggoorryy(()) ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_o_c_k_s_5___s_t_r_e_a_m_._h_p_p" │ │ │ │ +boost::system::error_category& ssoocckkss__ccaatteeggoorryy (); │ │ │ │ +returns the error_category for SOCKS5 errors │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ ii22pp__ccaatteeggoorryy(()) ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_i_2_p___s_t_r_e_a_m_._h_p_p" │ │ │ │ +boost::system::error_category& ii22pp__ccaatteeggoorryy (); │ │ │ │ +returns the error category for I2P errors │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ lliibbttoorrrreenntt__ccaatteeggoorryy(()) ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_e_r_r_o_r___c_o_d_e_._h_p_p" │ │ │ │ boost::system::error_category& lliibbttoorrrreenntt__ccaatteeggoorryy (); │ │ │ │ return the instance of the libtorrent_error_category which maps libtorrent │ │ │ │ error codes to human readable error messages. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ hhttttpp__ccaatteeggoorryy(()) ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_e_r_r_o_r___c_o_d_e_._h_p_p" │ │ │ │ boost::system::error_category& hhttttpp__ccaatteeggoorryy (); │ │ │ │ returns the error_category for HTTP errors │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ ggzziipp__ccaatteeggoorryy(()) ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_g_z_i_p_._h_p_p" │ │ │ │ -boost::system::error_category& ggzziipp__ccaatteeggoorryy (); │ │ │ │ -get the error_category for zip errors │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ uuppnnpp__ccaatteeggoorryy(()) ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_u_p_n_p_._h_p_p" │ │ │ │ boost::system::error_category& uuppnnpp__ccaatteeggoorryy (); │ │ │ │ the boost.system error category for UPnP errors │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ ii22pp__ccaatteeggoorryy(()) ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_i_2_p___s_t_r_e_a_m_._h_p_p" │ │ │ │ -boost::system::error_category& ii22pp__ccaatteeggoorryy (); │ │ │ │ -returns the error category for I2P errors │ │ │ │ +************ bbddeeccooddee__ccaatteeggoorryy(()) ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_b_d_e_c_o_d_e_._h_p_p" │ │ │ │ +boost::system::error_category& bbddeeccooddee__ccaatteeggoorryy (); │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ ssoocckkss__ccaatteeggoorryy(()) ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_o_c_k_s_5___s_t_r_e_a_m_._h_p_p" │ │ │ │ -boost::system::error_category& ssoocckkss__ccaatteeggoorryy (); │ │ │ │ -returns the error_category for SOCKS5 errors │ │ │ │ +************ eennuumm eerrrroorr__ccooddee__eennuumm ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_g_z_i_p_._h_p_p" │ │ │ │ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ +|_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_n_o___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_0_ _ _ _ _|_N_o_t_ _a_n_ _e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|invalid_gzip_header |1 |the supplied gzip buffer has | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_i_n_v_a_l_i_d_ _h_e_a_d_e_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +| | |the gzip buffer would inflate to | │ │ │ │ +|inflated_data_too_large |2 |more bytes than the specified | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_m_a_x_i_m_u_m_ _s_i_z_e_,_ _a_n_d_ _w_a_s_ _r_e_j_e_c_t_e_d_._ _ _ _ | │ │ │ │ +|data_did_not_terminate |3 |available inflate data did not | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_t_e_r_m_i_n_a_t_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|space_exhausted |4 |output space exhausted before | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_c_o_m_p_l_e_t_i_n_g_ _i_n_f_l_a_t_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_i_n_v_a_l_i_d___b_l_o_c_k___t_y_p_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_5_ _ _ _ _|_i_n_v_a_l_i_d_ _b_l_o_c_k_ _t_y_p_e_ _(_t_y_p_e_ _=_=_ _3_)_ _ _ _ _ | │ │ │ │ +|invalid_stored_block_length |6 |stored block length did not match | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_o_n_e_'_s_ _c_o_m_p_l_e_m_e_n_t_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|too_many_length_or_distance_codes |7 |dynamic block code description: too| │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_m_a_n_y_ _l_e_n_g_t_h_ _o_r_ _d_i_s_t_a_n_c_e_ _c_o_d_e_s_ _ _ _ _ _ | │ │ │ │ +|code_lengths_codes_incomplete |8 |dynamic block code description: | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_c_o_d_e_ _l_e_n_g_t_h_s_ _c_o_d_e_s_ _i_n_c_o_m_p_l_e_t_e_ _ _ _ _ _ | │ │ │ │ +|repeat_lengths_with_no_first_length|9 |dynamic block code description: | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_r_e_p_e_a_t_ _l_e_n_g_t_h_s_ _w_i_t_h_ _n_o_ _f_i_r_s_t_ _l_e_n_g_t_h| │ │ │ │ +|repeat_more_than_specified_lengths |10 |dynamic block code description: | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_r_e_p_e_a_t_ _m_o_r_e_ _t_h_a_n_ _s_p_e_c_i_f_i_e_d_ _l_e_n_g_t_h_s_ | │ │ │ │ +|invalid_literal_length_code_lengths|11 |dynamic block code description: | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_i_n_v_a_l_i_d_ _l_i_t_e_r_a_l_/_l_e_n_g_t_h_ _c_o_d_e_ _l_e_n_g_t_h_s| │ │ │ │ +|invalid_distance_code_lengths |12 |dynamic block code description: | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_i_n_v_a_l_i_d_ _d_i_s_t_a_n_c_e_ _c_o_d_e_ _l_e_n_g_t_h_s_ _ _ _ _ _ | │ │ │ │ +|invalid_literal_code_in_block |13 |invalid literal/length or distance | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_c_o_d_e_ _i_n_ _f_i_x_e_d_ _o_r_ _d_y_n_a_m_i_c_ _b_l_o_c_k_ _ _ _ _ | │ │ │ │ +|distance_too_far_back_in_block |14 |distance is too far back in fixed | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_o_r_ _d_y_n_a_m_i_c_ _b_l_o_c_k_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|unknown_gzip_error |15 |an unknown error occurred during | │ │ │ │ +|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_g_z_i_p_ _i_n_f_l_a_t_i_o_n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_e_r_r_o_r___c_o_d_e___m_a_x_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_1_6_ _ _ _|_t_h_e_ _n_u_m_b_e_r_ _o_f_ _e_r_r_o_r_ _c_o_d_e_s_ _ _ _ _ _ _ _ _ _ | │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ ppccpp__ccaatteeggoorryy(()) ************ │ │ │ │ +************ eennuumm ppccpp__eerrrroorrss ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_n_a_t_p_m_p_._h_p_p" │ │ │ │ -boost::system::error_category& ppccpp__ccaatteeggoorryy (); │ │ │ │ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ +|_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn| │ │ │ │ +|_p_c_p___s_u_c_c_e_s_s_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_0_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___u_n_s_u_p_p___v_e_r_s_i_o_n_ _ _ _ _ _ _ _ _ _|_1_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___n_o_t___a_u_t_h_o_r_i_z_e_d_ _ _ _ _ _ _ _ _ _|_2_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___m_a_l_f_o_r_m_e_d___r_e_q_u_e_s_t_ _ _ _ _ _ _|_3_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___u_n_s_u_p_p___o_p_c_o_d_e_ _ _ _ _ _ _ _ _ _ _|_4_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___u_n_s_u_p_p___o_p_t_i_o_n_ _ _ _ _ _ _ _ _ _ _|_5_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___m_a_l_f_o_r_m_e_d___o_p_t_i_o_n_ _ _ _ _ _ _ _|_6_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___n_e_t_w_o_r_k___f_a_i_l_u_r_e_ _ _ _ _ _ _ _ _|_7_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___n_o___r_e_s_o_u_r_c_e_s_ _ _ _ _ _ _ _ _ _ _ _|_8_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___u_n_s_u_p_p___p_r_o_t_o_c_o_l_ _ _ _ _ _ _ _ _|_9_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___u_s_e_r___e_x___q_u_o_t_a_ _ _ _ _ _ _ _ _ _ _|_1_0_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___c_a_n_n_o_t___p_r_o_v_i_d_e___e_x_t_e_r_n_a_l_|_1_1_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___a_d_d_r_e_s_s___m_i_s_m_a_t_c_h_ _ _ _ _ _ _ _|_1_2_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_c_p___e_x_c_e_s_s_i_v_e___r_e_m_o_t_e___p_e_e_r_s_ _|_1_3_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ bbddeeccooddee__ccaatteeggoorryy(()) ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_b_d_e_c_o_d_e_._h_p_p" │ │ │ │ -boost::system::error_category& bbddeeccooddee__ccaatteeggoorryy (); │ │ │ │ +************ eennuumm ssoocckkss__eerrrroorr__ccooddee ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_o_c_k_s_5___s_t_r_e_a_m_._h_p_p" │ │ │ │ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ +|_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn| │ │ │ │ +|_n_o___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_0_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_u_n_s_u_p_p_o_r_t_e_d___v_e_r_s_i_o_n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_1_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_u_n_s_u_p_p_o_r_t_e_d___a_u_t_h_e_n_t_i_c_a_t_i_o_n___m_e_t_h_o_d_ _|_2_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_u_n_s_u_p_p_o_r_t_e_d___a_u_t_h_e_n_t_i_c_a_t_i_o_n___v_e_r_s_i_o_n_|_3_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_a_u_t_h_e_n_t_i_c_a_t_i_o_n___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_4_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_u_s_e_r_n_a_m_e___r_e_q_u_i_r_e_d_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_5_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_g_e_n_e_r_a_l___f_a_i_l_u_r_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_6_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_c_o_m_m_a_n_d___n_o_t___s_u_p_p_o_r_t_e_d_ _ _ _ _ _ _ _ _ _ _ _ _ _|_7_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_n_o___i_d_e_n_t_d_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_8_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_i_d_e_n_t_d___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_9_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_n_u_m___e_r_r_o_r_s_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_1_0_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ eennuumm ii22pp__eerrrroorr__ccooddee ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_i_2_p___s_t_r_e_a_m_._h_p_p" │ │ │ │ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ +|_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn| │ │ │ │ +|_n_o___e_r_r_o_r_ _ _ _ _ _ _ _|_0_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_p_a_r_s_e___f_a_i_l_e_d_ _ _ _|_1_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_c_a_n_t___r_e_a_c_h___p_e_e_r_|_2_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_i_2_p___e_r_r_o_r_ _ _ _ _ _ _|_3_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_i_n_v_a_l_i_d___k_e_y_ _ _ _ _|_4_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_i_n_v_a_l_i_d___i_d_ _ _ _ _ _|_5_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_t_i_m_e_o_u_t_ _ _ _ _ _ _ _ _|_6_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_k_e_y___n_o_t___f_o_u_n_d_ _ _|_7_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_d_u_p_l_i_c_a_t_e_d___i_d_ _ _|_8_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ +|_n_u_m___e_r_r_o_r_s_ _ _ _ _ _|_9_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ eennuumm eerrrroorr__ccooddee__eennuumm ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_e_r_r_o_r___c_o_d_e_._h_p_p" │ │ │ │ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ |_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_n_o___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_0_ _ _ _ _|_N_o_t_ _a_n_ _e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |file_collision |1 |Two torrents has files which end | │ │ │ │ @@ -493,51 +580,14 @@ │ │ │ │ |_n_o_t___f_o_u_n_d_ _ _ _ _ _ _ _ _ _ _ _ _|_4_0_4_ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_i_n_t_e_r_n_a_l___s_e_r_v_e_r___e_r_r_o_r_|_5_0_0_ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_n_o_t___i_m_p_l_e_m_e_n_t_e_d_ _ _ _ _ _ _|_5_0_1_ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_b_a_d___g_a_t_e_w_a_y_ _ _ _ _ _ _ _ _ _ _|_5_0_2_ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_s_e_r_v_i_c_e___u_n_a_v_a_i_l_a_b_l_e_ _ _|_5_0_3_ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ eennuumm eerrrroorr__ccooddee__eennuumm ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_g_z_i_p_._h_p_p" │ │ │ │ - _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ -|_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_n_o___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_0_ _ _ _ _|_N_o_t_ _a_n_ _e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|invalid_gzip_header |1 |the supplied gzip buffer has | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_i_n_v_a_l_i_d_ _h_e_a_d_e_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -| | |the gzip buffer would inflate to | │ │ │ │ -|inflated_data_too_large |2 |more bytes than the specified | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_m_a_x_i_m_u_m_ _s_i_z_e_,_ _a_n_d_ _w_a_s_ _r_e_j_e_c_t_e_d_._ _ _ _ | │ │ │ │ -|data_did_not_terminate |3 |available inflate data did not | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_t_e_r_m_i_n_a_t_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|space_exhausted |4 |output space exhausted before | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_c_o_m_p_l_e_t_i_n_g_ _i_n_f_l_a_t_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_i_n_v_a_l_i_d___b_l_o_c_k___t_y_p_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_5_ _ _ _ _|_i_n_v_a_l_i_d_ _b_l_o_c_k_ _t_y_p_e_ _(_t_y_p_e_ _=_=_ _3_)_ _ _ _ _ | │ │ │ │ -|invalid_stored_block_length |6 |stored block length did not match | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_o_n_e_'_s_ _c_o_m_p_l_e_m_e_n_t_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|too_many_length_or_distance_codes |7 |dynamic block code description: too| │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_m_a_n_y_ _l_e_n_g_t_h_ _o_r_ _d_i_s_t_a_n_c_e_ _c_o_d_e_s_ _ _ _ _ _ | │ │ │ │ -|code_lengths_codes_incomplete |8 |dynamic block code description: | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_c_o_d_e_ _l_e_n_g_t_h_s_ _c_o_d_e_s_ _i_n_c_o_m_p_l_e_t_e_ _ _ _ _ _ | │ │ │ │ -|repeat_lengths_with_no_first_length|9 |dynamic block code description: | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_r_e_p_e_a_t_ _l_e_n_g_t_h_s_ _w_i_t_h_ _n_o_ _f_i_r_s_t_ _l_e_n_g_t_h| │ │ │ │ -|repeat_more_than_specified_lengths |10 |dynamic block code description: | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_r_e_p_e_a_t_ _m_o_r_e_ _t_h_a_n_ _s_p_e_c_i_f_i_e_d_ _l_e_n_g_t_h_s_ | │ │ │ │ -|invalid_literal_length_code_lengths|11 |dynamic block code description: | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_i_n_v_a_l_i_d_ _l_i_t_e_r_a_l_/_l_e_n_g_t_h_ _c_o_d_e_ _l_e_n_g_t_h_s| │ │ │ │ -|invalid_distance_code_lengths |12 |dynamic block code description: | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_i_n_v_a_l_i_d_ _d_i_s_t_a_n_c_e_ _c_o_d_e_ _l_e_n_g_t_h_s_ _ _ _ _ _ | │ │ │ │ -|invalid_literal_code_in_block |13 |invalid literal/length or distance | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_c_o_d_e_ _i_n_ _f_i_x_e_d_ _o_r_ _d_y_n_a_m_i_c_ _b_l_o_c_k_ _ _ _ _ | │ │ │ │ -|distance_too_far_back_in_block |14 |distance is too far back in fixed | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_o_r_ _d_y_n_a_m_i_c_ _b_l_o_c_k_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|unknown_gzip_error |15 |an unknown error occurred during | │ │ │ │ -|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_g_z_i_p_ _i_n_f_l_a_t_i_o_n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_e_r_r_o_r___c_o_d_e___m_a_x_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_1_6_ _ _ _|_t_h_e_ _n_u_m_b_e_r_ _o_f_ _e_r_r_o_r_ _c_o_d_e_s_ _ _ _ _ _ _ _ _ _ | │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ eennuumm eerrrroorr__ccooddee__eennuumm ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_u_p_n_p_._h_p_p" │ │ │ │ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ |_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_n_o___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_0_ _ _ _ _|_N_o_ _e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |invalid_argument |402 |One of the arguments in the request | │ │ │ │ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_i_s_ _i_n_v_a_l_i_d_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_a_c_t_i_o_n___f_a_i_l_e_d_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_5_0_1_ _ _|_T_h_e_ _r_e_q_u_e_s_t_ _f_a_i_l_e_d_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ @@ -558,64 +608,14 @@ │ │ │ │ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_m_a_p_p_i_n_g_s_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ | | |RemoteHost must be a wildcard and | │ │ │ │ |remote_host_must_be_wildcard |726 |cannot be a specific IP address or | │ │ │ │ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_D_N_S_ _n_a_m_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |external_port_must_be_wildcard |727 |ExternalPort must be a wildcard and | │ │ │ │ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _|_c_a_n_n_o_t_ _b_e_ _a_ _s_p_e_c_i_f_i_c_ _p_o_r_t_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ eennuumm ii22pp__eerrrroorr__ccooddee ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_i_2_p___s_t_r_e_a_m_._h_p_p" │ │ │ │ - _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ -|_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn| │ │ │ │ -|_n_o___e_r_r_o_r_ _ _ _ _ _ _ _|_0_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_a_r_s_e___f_a_i_l_e_d_ _ _ _|_1_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_c_a_n_t___r_e_a_c_h___p_e_e_r_|_2_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_i_2_p___e_r_r_o_r_ _ _ _ _ _ _|_3_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_i_n_v_a_l_i_d___k_e_y_ _ _ _ _|_4_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_i_n_v_a_l_i_d___i_d_ _ _ _ _ _|_5_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_t_i_m_e_o_u_t_ _ _ _ _ _ _ _ _|_6_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_k_e_y___n_o_t___f_o_u_n_d_ _ _|_7_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_d_u_p_l_i_c_a_t_e_d___i_d_ _ _|_8_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_n_u_m___e_r_r_o_r_s_ _ _ _ _ _|_9_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ eennuumm ssoocckkss__eerrrroorr__ccooddee ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_o_c_k_s_5___s_t_r_e_a_m_._h_p_p" │ │ │ │ - _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ -|_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn| │ │ │ │ -|_n_o___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_0_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_u_n_s_u_p_p_o_r_t_e_d___v_e_r_s_i_o_n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_1_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_u_n_s_u_p_p_o_r_t_e_d___a_u_t_h_e_n_t_i_c_a_t_i_o_n___m_e_t_h_o_d_ _|_2_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_u_n_s_u_p_p_o_r_t_e_d___a_u_t_h_e_n_t_i_c_a_t_i_o_n___v_e_r_s_i_o_n_|_3_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_a_u_t_h_e_n_t_i_c_a_t_i_o_n___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_4_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_u_s_e_r_n_a_m_e___r_e_q_u_i_r_e_d_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_5_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_g_e_n_e_r_a_l___f_a_i_l_u_r_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_6_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_c_o_m_m_a_n_d___n_o_t___s_u_p_p_o_r_t_e_d_ _ _ _ _ _ _ _ _ _ _ _ _ _|_7_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_n_o___i_d_e_n_t_d_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_8_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_i_d_e_n_t_d___e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_9_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_n_u_m___e_r_r_o_r_s_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_1_0_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ eennuumm ppccpp__eerrrroorrss ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_n_a_t_p_m_p_._h_p_p" │ │ │ │ - _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ -|_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn| │ │ │ │ -|_p_c_p___s_u_c_c_e_s_s_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|_0_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___u_n_s_u_p_p___v_e_r_s_i_o_n_ _ _ _ _ _ _ _ _ _|_1_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___n_o_t___a_u_t_h_o_r_i_z_e_d_ _ _ _ _ _ _ _ _ _|_2_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___m_a_l_f_o_r_m_e_d___r_e_q_u_e_s_t_ _ _ _ _ _ _|_3_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___u_n_s_u_p_p___o_p_c_o_d_e_ _ _ _ _ _ _ _ _ _ _|_4_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___u_n_s_u_p_p___o_p_t_i_o_n_ _ _ _ _ _ _ _ _ _ _|_5_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___m_a_l_f_o_r_m_e_d___o_p_t_i_o_n_ _ _ _ _ _ _ _|_6_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___n_e_t_w_o_r_k___f_a_i_l_u_r_e_ _ _ _ _ _ _ _ _|_7_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___n_o___r_e_s_o_u_r_c_e_s_ _ _ _ _ _ _ _ _ _ _ _|_8_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___u_n_s_u_p_p___p_r_o_t_o_c_o_l_ _ _ _ _ _ _ _ _|_9_ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___u_s_e_r___e_x___q_u_o_t_a_ _ _ _ _ _ _ _ _ _ _|_1_0_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___c_a_n_n_o_t___p_r_o_v_i_d_e___e_x_t_e_r_n_a_l_|_1_1_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___a_d_d_r_e_s_s___m_i_s_m_a_t_c_h_ _ _ _ _ _ _ _|_1_2_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -|_p_c_p___e_x_c_e_s_s_i_v_e___r_e_m_o_t_e___p_e_e_r_s_ _|_1_3_ _ _ _|_ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ eennuumm eerrrroorr__ccooddee__eennuumm ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_b_d_e_c_o_d_e_._h_p_p" │ │ │ │ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ │ │ │ │ |_nn_aa_mm_ee_ _ _ _ _ _ _ _ _ _ _|_vv_aa_ll_uu_ee_|_dd_ee_ss_cc_rr_ii_pp_tt_ii_oo_nn_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_n_o___e_r_r_o_r_ _ _ _ _ _ _|_0_ _ _ _ _|_N_o_t_ _a_n_ _e_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_e_x_p_e_c_t_e_d___d_i_g_i_t_|_1_ _ _ _ _|_e_x_p_e_c_t_e_d_ _d_i_g_i_t_ _i_n_ _b_e_n_c_o_d_e_d_ _s_t_r_i_n_g_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ │ │ |_e_x_p_e_c_t_e_d___c_o_l_o_n_|_2_ _ _ _ _|_e_x_p_e_c_t_e_d_ _c_o_l_o_n_ _i_n_ _b_e_n_c_o_d_e_d_ _s_t_r_i_n_g_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | │ │ ├── ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Filter.html │ │ │┄ Ordering differences only │ │ │ @@ -56,20 +56,20 @@ │ │ │ a single rule that allows all addresses (0.0.0.0 - 255.255.255.255 for │ │ │ the IPv4 range, and the equivalent range covering all addresses for the │ │ │ IPv6 range).

    │ │ │

    A default constructed ip_filter does not filter any address.

    │ │ │
    │ │ │  struct ip_filter
    │ │ │  {
    │ │ │ -   ~ip_filter ();
    │ │ │     ip_filter (ip_filter const&);
    │ │ │ -   ip_filter (ip_filter&&);
    │ │ │ +   ip_filter& operator= (ip_filter&&);
    │ │ │     ip_filter& operator= (ip_filter const&);
    │ │ │     ip_filter ();
    │ │ │ -   ip_filter& operator= (ip_filter&&);
    │ │ │ +   ~ip_filter ();
    │ │ │ +   ip_filter (ip_filter&&);
    │ │ │     bool empty () const;
    │ │ │     void add_rule (address const& first, address const& last, std::uint32_t flags);
    │ │ │     std::uint32_t access (address const& addr) const;
    │ │ │     filter_tuple_t export_filter () const;
    │ │ │  
    │ │ │     enum access_flags
    │ │ │     {
    │ │ │ @@ -153,19 +153,19 @@
    │ │ │  

    the port filter maps non-overlapping port ranges to flags. This │ │ │ is primarily used to indicate whether a range of ports should │ │ │ be connected to or not. The default is to have the full port │ │ │ range (0-65535) set to flag 0.

    │ │ │
    │ │ │  class port_filter
    │ │ │  {
    │ │ │ -   port_filter (port_filter const&);
    │ │ │     port_filter ();
    │ │ │ -   port_filter& operator= (port_filter&&);
    │ │ │     port_filter (port_filter&&);
    │ │ │     port_filter& operator= (port_filter const&);
    │ │ │ +   port_filter& operator= (port_filter&&);
    │ │ │ +   port_filter (port_filter const&);
    │ │ │     ~port_filter ();
    │ │ │     void add_rule (std::uint16_t first, std::uint16_t last, std::uint32_t flags);
    │ │ │     std::uint32_t access (std::uint16_t port) const;
    │ │ │  
    │ │ │     enum access_flags
    │ │ │     {
    │ │ │        blocked,
    │ │ │ ├── html2text {}
    │ │ │ │ @@ -19,20 +19,20 @@
    │ │ │ │  The ip_filter class is a set of rules that uniquely categorizes all ip
    │ │ │ │  addresses as allowed or disallowed. The default constructor creates a single
    │ │ │ │  rule that allows all addresses (0.0.0.0 - 255.255.255.255 for the IPv4 range,
    │ │ │ │  and the equivalent range covering all addresses for the IPv6 range).
    │ │ │ │  A default constructed _i_p___f_i_l_t_e_r does not filter any address.
    │ │ │ │  struct ip_filter
    │ │ │ │  {
    │ │ │ │ -   ~~iipp__ffiilltteerr ();
    │ │ │ │     iipp__ffiilltteerr (ip_filter const&);
    │ │ │ │ -   iipp__ffiilltteerr (ip_filter&&);
    │ │ │ │ +   ip_filter& ooppeerraattoorr== (ip_filter&&);
    │ │ │ │     ip_filter& ooppeerraattoorr== (ip_filter const&);
    │ │ │ │     iipp__ffiilltteerr ();
    │ │ │ │ -   ip_filter& ooppeerraattoorr== (ip_filter&&);
    │ │ │ │ +   ~~iipp__ffiilltteerr ();
    │ │ │ │ +   iipp__ffiilltteerr (ip_filter&&);
    │ │ │ │     bool eemmppttyy () const;
    │ │ │ │     void aadddd__rruullee (address const& first, address const& last, std::uint32_t
    │ │ │ │  flags);
    │ │ │ │     std::uint32_t aacccceessss (address const& addr) const;
    │ │ │ │     filter_tuple_t eexxppoorrtt__ffiilltteerr () const;
    │ │ │ │  
    │ │ │ │     enum access_flags
    │ │ │ │ @@ -81,19 +81,19 @@
    │ │ │ │  ************ ppoorrtt__ffiilltteerr ************
    │ │ │ │  Declared in "_l_i_b_t_o_r_r_e_n_t_/_i_p___f_i_l_t_e_r_._h_p_p"
    │ │ │ │  the port filter maps non-overlapping port ranges to flags. This is primarily
    │ │ │ │  used to indicate whether a range of ports should be connected to or not. The
    │ │ │ │  default is to have the full port range (0-65535) set to flag 0.
    │ │ │ │  class port_filter
    │ │ │ │  {
    │ │ │ │ -   ppoorrtt__ffiilltteerr (port_filter const&);
    │ │ │ │     ppoorrtt__ffiilltteerr ();
    │ │ │ │ -   port_filter& ooppeerraattoorr== (port_filter&&);
    │ │ │ │     ppoorrtt__ffiilltteerr (port_filter&&);
    │ │ │ │     port_filter& ooppeerraattoorr== (port_filter const&);
    │ │ │ │ +   port_filter& ooppeerraattoorr== (port_filter&&);
    │ │ │ │ +   ppoorrtt__ffiilltteerr (port_filter const&);
    │ │ │ │     ~~ppoorrtt__ffiilltteerr ();
    │ │ │ │     void aadddd__rruullee (std::uint16_t first, std::uint16_t last, std::uint32_t
    │ │ │ │  flags);
    │ │ │ │     std::uint32_t aacccceessss (std::uint16_t port) const;
    │ │ │ │  
    │ │ │ │     enum access_flags
    │ │ │ │     {
    │ │ ├── ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-PeerClass.html
    │ │ │ @@ -28,94 +28,37 @@
    │ │ │  
    │ │ │ │ │ │
    unexpected_eof3unexpected end of file in bencoded string
    expected_value4expected value (list, dict, int or string) in bencoded stringexpected value (list, dict, int or string) in bencoded string
    depth_exceeded5bencoded recursion depth limit exceeded
    limit_exceeded62.0.11
    │ │ │

    home

    │ │ │
    │ │ │

    Table of contents

    │ │ │
    │ │ │ -[report issue]
    │ │ │ -

    peer_class_info

    │ │ │ -

    Declared in "libtorrent/peer_class.hpp"

    │ │ │ -

    holds settings for a peer class. Used in set_peer_class() and │ │ │ -get_peer_class() calls.

    │ │ │ -
    │ │ │ -struct peer_class_info
    │ │ │ -{
    │ │ │ -   bool ignore_unchoke_slots;
    │ │ │ -   int connection_limit_factor;
    │ │ │ -   std::string label;
    │ │ │ -   int upload_limit;
    │ │ │ -   int download_limit;
    │ │ │ -   int upload_priority;
    │ │ │ -   int download_priority;
    │ │ │ -};
    │ │ │ -
    │ │ │ -[report issue]
    │ │ │ -
    ignore_unchoke_slots
    │ │ │ -
    ignore_unchoke_slots determines whether peers should always │ │ │ -unchoke a peer, regardless of the choking algorithm, or if it should │ │ │ -honor the unchoke slot limits. It's used for local peers by default. │ │ │ -If any of the peer classes a peer belongs to has this set to true, │ │ │ -that peer will be unchoked at all times.
    │ │ │ -
    │ │ │ -[report issue]
    │ │ │ -
    connection_limit_factor
    │ │ │ -
    adjusts the connection limit (global and per torrent) that applies to │ │ │ -this peer class. By default, local peers are allowed to exceed the │ │ │ -normal connection limit for instance. This is specified as a percent │ │ │ -factor. 100 makes the peer class apply normally to the limit. 200 │ │ │ -means as long as there are fewer connections than twice the limit, we │ │ │ -accept this peer. This factor applies both to the global connection │ │ │ -limit and the per-torrent limit. Note that if not used carefully one │ │ │ -peer class can potentially completely starve out all other over time.
    │ │ │ -
    │ │ │ -[report issue]
    │ │ │ -
    label
    │ │ │ -
    not used by libtorrent. It's intended as a potentially user-facing │ │ │ -identifier of this peer class.
    │ │ │ -
    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    upload_limit download_limit
    │ │ │ -
    transfer rates limits for the whole peer class. They are specified in │ │ │ -bytes per second and apply to the sum of all peers that are members of │ │ │ -this class.
    │ │ │ -
    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    upload_priority download_priority
    │ │ │ -
    relative priorities used by the bandwidth allocator in the rate │ │ │ -limiter. If no rate limits are in use, the priority is not used │ │ │ -either. Priorities start at 1 (0 is not a valid priority) and may not │ │ │ -exceed 255.
    │ │ │ -
    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ +[report issue]
    │ │ │

    peer_class_type_filter

    │ │ │

    Declared in "libtorrent/peer_class_type_filter.hpp"

    │ │ │

    peer_class_type_filter is a simple container for rules for adding and subtracting │ │ │ peer-classes from peers. It is applied after the peer class filter is applied (which │ │ │ is based on the peer's IP address).

    │ │ │
    │ │ │  struct peer_class_type_filter
    │ │ │  {
    │ │ │     void add (socket_type_t const st, peer_class_t const peer_class);
    │ │ │     void remove (socket_type_t const st, peer_class_t const peer_class);
    │ │ │ -   void disallow (socket_type_t const st, peer_class_t const peer_class);
    │ │ │     void allow (socket_type_t const st, peer_class_t const peer_class);
    │ │ │ +   void disallow (socket_type_t const st, peer_class_t const peer_class);
    │ │ │     std::uint32_t apply (socket_type_t const st, std::uint32_t peer_class_mask);
    │ │ │     friend bool operator== (peer_class_type_filter const& lhs
    │ │ │        , peer_class_type_filter const& rhs);
    │ │ │  
    │ │ │     enum socket_type_t
    │ │ │     {
    │ │ │        tcp_socket,
    │ │ │ @@ -123,30 +66,30 @@
    │ │ │        ssl_tcp_socket,
    │ │ │        ssl_utp_socket,
    │ │ │        i2p_socket,
    │ │ │        num_socket_types,
    │ │ │     };
    │ │ │  };
    │ │ │  
    │ │ │ - │ │ │ -[report issue]
    │ │ │ -

    add() remove()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +

    remove() add()

    │ │ │
    │ │ │  void add (socket_type_t const st, peer_class_t const peer_class);
    │ │ │  void remove (socket_type_t const st, peer_class_t const peer_class);
    │ │ │  
    │ │ │

    add() and remove() adds and removes a peer class to be added │ │ │ to new peers based on socket type.

    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    allow() disallow()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    disallow() allow()

    │ │ │
    │ │ │ -void disallow (socket_type_t const st, peer_class_t const peer_class);
    │ │ │  void allow (socket_type_t const st, peer_class_t const peer_class);
    │ │ │ +void disallow (socket_type_t const st, peer_class_t const peer_class);
    │ │ │  
    │ │ │

    disallow() and allow() adds and removes a peer class to be │ │ │ removed from new peers based on socket type.

    │ │ │

    The peer_class argument cannot be greater than 31. The bitmasks representing │ │ │ peer classes in the peer_class_type_filter are 32 bits.

    │ │ │ [report issue]
    │ │ │
    │ │ │ @@ -197,15 +140,72 @@ │ │ │ │ │ │ num_socket_types │ │ │ 5 │ │ │   │ │ │ │ │ │ │ │ │ │ │ │ +[report issue]
    │ │ │
    │ │ │ +
    │ │ │ +

    peer_class_info

    │ │ │ +

    Declared in "libtorrent/peer_class.hpp"

    │ │ │ +

    holds settings for a peer class. Used in set_peer_class() and │ │ │ +get_peer_class() calls.

    │ │ │ +
    │ │ │ +struct peer_class_info
    │ │ │ +{
    │ │ │ +   bool ignore_unchoke_slots;
    │ │ │ +   int connection_limit_factor;
    │ │ │ +   std::string label;
    │ │ │ +   int upload_limit;
    │ │ │ +   int download_limit;
    │ │ │ +   int upload_priority;
    │ │ │ +   int download_priority;
    │ │ │ +};
    │ │ │ +
    │ │ │ +[report issue]
    │ │ │ +
    ignore_unchoke_slots
    │ │ │ +
    ignore_unchoke_slots determines whether peers should always │ │ │ +unchoke a peer, regardless of the choking algorithm, or if it should │ │ │ +honor the unchoke slot limits. It's used for local peers by default. │ │ │ +If any of the peer classes a peer belongs to has this set to true, │ │ │ +that peer will be unchoked at all times.
    │ │ │ +
    │ │ │ +[report issue]
    │ │ │ +
    connection_limit_factor
    │ │ │ +
    adjusts the connection limit (global and per torrent) that applies to │ │ │ +this peer class. By default, local peers are allowed to exceed the │ │ │ +normal connection limit for instance. This is specified as a percent │ │ │ +factor. 100 makes the peer class apply normally to the limit. 200 │ │ │ +means as long as there are fewer connections than twice the limit, we │ │ │ +accept this peer. This factor applies both to the global connection │ │ │ +limit and the per-torrent limit. Note that if not used carefully one │ │ │ +peer class can potentially completely starve out all other over time.
    │ │ │ +
    │ │ │ +[report issue]
    │ │ │ +
    label
    │ │ │ +
    not used by libtorrent. It's intended as a potentially user-facing │ │ │ +identifier of this peer class.
    │ │ │ +
    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    upload_limit download_limit
    │ │ │ +
    transfer rates limits for the whole peer class. They are specified in │ │ │ +bytes per second and apply to the sum of all peers that are members of │ │ │ +this class.
    │ │ │ +
    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    upload_priority download_priority
    │ │ │ +
    relative priorities used by the bandwidth allocator in the rate │ │ │ +limiter. If no rate limits are in use, the priority is not used │ │ │ +either. Priorities start at 1 (0 is not a valid priority) and may not │ │ │ +exceed 255.
    │ │ │ +
    │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │
    │ │ │
    │ │ │ │ │ │ +
    │ │ │ +

    peer_connection_handle

    │ │ │ +

    Declared in "libtorrent/peer_connection_handle.hpp"

    │ │ │ +

    the peer_connection_handle class provides a handle to the internal peer │ │ │ +connection object, to be used by plugins. This is a low level interface that │ │ │ +may not be stable across libtorrent versions

    │ │ │ +
    │ │ │ +struct peer_connection_handle
    │ │ │ +{
    │ │ │ +   explicit peer_connection_handle (std::weak_ptr<peer_connection> impl);
    │ │ │ +   connection_type type () const;
    │ │ │ +   void add_extension (std::shared_ptr<peer_plugin>);
    │ │ │ +   peer_plugin const* find_plugin (string_view type) const;
    │ │ │ +   bool is_seed () const;
    │ │ │ +   bool upload_only () const;
    │ │ │ +   bool has_piece (piece_index_t i) const;
    │ │ │ +   peer_id const& pid () const;
    │ │ │ +   bool is_interesting () const;
    │ │ │ +   bool is_choked () const;
    │ │ │ +   bool is_peer_interested () const;
    │ │ │ +   bool has_peer_choked () const;
    │ │ │ +   void choke_this_peer ();
    │ │ │ +   void maybe_unchoke_this_peer ();
    │ │ │ +   void get_peer_info (peer_info& p) const;
    │ │ │ +   torrent_handle associated_torrent () const;
    │ │ │ +   tcp::endpoint const& remote () const;
    │ │ │ +   tcp::endpoint local_endpoint () const;
    │ │ │ +   bool is_connecting () const;
    │ │ │ +   bool is_outgoing () const;
    │ │ │ +   void disconnect (error_code const& ec, operation_t op
    │ │ │ +      , disconnect_severity_t = peer_connection_interface::normal);
    │ │ │ +   bool is_disconnecting () const;
    │ │ │ +   bool on_local_network () const;
    │ │ │ +   bool ignore_unchoke_slots () const;
    │ │ │ +   bool failed () const;
    │ │ │ +   void peer_log (peer_log_alert::direction_t direction
    │ │ │ +      , char const* event, char const* fmt = "", ...) const TORRENT_FORMAT(4,5);
    │ │ │ +   bool should_log (peer_log_alert::direction_t direction) const;
    │ │ │ +   bool can_disconnect (error_code const& ec) const;
    │ │ │ +   bool has_metadata () const;
    │ │ │ +   bool in_handshake () const;
    │ │ │ +   void send_buffer (char const* begin, int size);
    │ │ │ +   time_point time_of_last_unchoke () const;
    │ │ │ +   std::time_t last_seen_complete () const;
    │ │ │ +   bool operator== (peer_connection_handle const& o) const;
    │ │ │ +   bool operator!= (peer_connection_handle const& o) const;
    │ │ │ +   bool operator< (peer_connection_handle const& o) const;
    │ │ │ +   std::shared_ptr<peer_connection> native_handle () const;
    │ │ │ +};
    │ │ │ +
    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    bt_peer_connection_handle

    │ │ │ +

    Declared in "libtorrent/peer_connection_handle.hpp"

    │ │ │ +

    The bt_peer_connection_handle provides a handle to the internal bittorrent │ │ │ +peer connection object to plugins. It's low level and may not be a stable API │ │ │ +across libtorrent versions.

    │ │ │ +
    │ │ │ +struct bt_peer_connection_handle : peer_connection_handle
    │ │ │ +{
    │ │ │ +   explicit bt_peer_connection_handle (peer_connection_handle pc);
    │ │ │ +   bool support_extensions () const;
    │ │ │ +   bool packet_finished () const;
    │ │ │ +   bool supports_encryption () const;
    │ │ │ +   void switch_recv_crypto (std::shared_ptr<crypto_plugin> crypto);
    │ │ │ +   void switch_send_crypto (std::shared_ptr<crypto_plugin> crypto);
    │ │ │ +   std::shared_ptr<bt_peer_connection> native_handle () const;
    │ │ │ +};
    │ │ │ +
    │ │ │ [report issue]
    │ │ │
    │ │ │

    plugin

    │ │ │

    Declared in "libtorrent/extensions.hpp"

    │ │ │

    this is the base class for a session plugin. One primary feature │ │ │ is that it is notified of all torrents that are added to the session, │ │ │ and can add its own torrent_plugins.

    │ │ │ @@ -348,16 +418,16 @@ │ │ │
    │ │ │  struct torrent_plugin
    │ │ │  {
    │ │ │     virtual std::shared_ptr<peer_plugin> new_connection (peer_connection_handle const&);
    │ │ │     virtual void on_piece_failed (piece_index_t);
    │ │ │     virtual void on_piece_pass (piece_index_t);
    │ │ │     virtual void tick ();
    │ │ │ -   virtual bool on_resume ();
    │ │ │     virtual bool on_pause ();
    │ │ │ +   virtual bool on_resume ();
    │ │ │     virtual void on_files_checked ();
    │ │ │     virtual void on_state (torrent_status::state_t);
    │ │ │     virtual void on_add_peer (tcp::endpoint const&,
    │ │ │        peer_source_flags_t, add_peer_flags_t);
    │ │ │  
    │ │ │     static constexpr add_peer_flags_t first_time  = 1_bit;
    │ │ │     static constexpr add_peer_flags_t filtered  = 2_bit;
    │ │ │ @@ -376,18 +446,18 @@
    │ │ │  are supposed to return an instance of your peer_plugin class. Which in
    │ │ │  turn will have its hook functions called on event specific to that peer.

    │ │ │

    The peer_connection_handle will be valid as long as the shared_ptr │ │ │ is being held by the torrent object. So, it is generally a good idea to not │ │ │ keep a shared_ptr to your own peer_plugin. If you want to keep references │ │ │ to it, use weak_ptr.

    │ │ │

    If this function throws an exception, the connection will be closed.

    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    on_piece_pass() on_piece_failed()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    on_piece_failed() on_piece_pass()

    │ │ │
    │ │ │  virtual void on_piece_failed (piece_index_t);
    │ │ │  virtual void on_piece_pass (piece_index_t);
    │ │ │  
    │ │ │

    These hooks are called when a piece passes the hash check or fails the hash │ │ │ check, respectively. The index is the piece index that was downloaded. │ │ │ It is possible to access the list of peers that participated in sending the │ │ │ @@ -396,21 +466,21 @@ │ │ │

    │ │ │

    tick()

    │ │ │
    │ │ │  virtual void tick ();
    │ │ │  
    │ │ │

    This hook is called approximately once per second. It is a way of making it │ │ │ easy for plugins to do timed events, for sending messages or whatever.

    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    on_pause() on_resume()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    on_resume() on_pause()

    │ │ │
    │ │ │ -virtual bool on_resume ();
    │ │ │  virtual bool on_pause ();
    │ │ │ +virtual bool on_resume ();
    │ │ │  
    │ │ │

    These hooks are called when the torrent is paused and resumed respectively. │ │ │ The return value indicates if the event was handled. A return value of │ │ │ true indicates that it was handled, and no other plugin after this one │ │ │ will have this hook function called, and the standard handler will also not be │ │ │ invoked. So, returning true effectively overrides the standard behavior of │ │ │ pause or resume.

    │ │ │ @@ -475,43 +545,43 @@ │ │ │ { │ │ │ virtual string_view type () const; │ │ │ virtual void add_handshake (entry&); │ │ │ virtual void on_disconnect (error_code const&); │ │ │ virtual void on_connected (); │ │ │ virtual bool on_handshake (span<char const>); │ │ │ virtual bool on_extension_handshake (bdecode_node const&); │ │ │ + virtual bool on_dont_have (piece_index_t); │ │ │ + virtual bool on_interested (); │ │ │ virtual bool on_have_none (); │ │ │ + virtual bool on_unchoke (); │ │ │ virtual bool on_have (piece_index_t); │ │ │ - virtual bool on_request (peer_request const&); │ │ │ - virtual bool on_not_interested (); │ │ │ virtual bool on_allowed_fast (piece_index_t); │ │ │ - virtual bool on_bitfield (bitfield const& /*bitfield*/); │ │ │ - virtual bool on_interested (); │ │ │ - virtual bool on_choke (); │ │ │ - virtual bool on_unchoke (); │ │ │ virtual bool on_have_all (); │ │ │ - virtual bool on_dont_have (piece_index_t); │ │ │ + virtual bool on_choke (); │ │ │ + virtual bool on_request (peer_request const&); │ │ │ + virtual bool on_bitfield (bitfield const& /*bitfield*/); │ │ │ + virtual bool on_not_interested (); │ │ │ virtual bool on_piece (peer_request const& /*piece*/ │ │ │ , span<char const> /*buf*/); │ │ │ virtual bool on_reject (peer_request const&); │ │ │ virtual bool on_suggest (piece_index_t); │ │ │ virtual bool on_cancel (peer_request const&); │ │ │ + virtual void sent_cancel (peer_request const&); │ │ │ + virtual void sent_have_none (); │ │ │ + virtual void sent_request (peer_request const&); │ │ │ virtual void sent_allow_fast (piece_index_t); │ │ │ + virtual void sent_reject_request (peer_request const&); │ │ │ + virtual void sent_suggest (piece_index_t); │ │ │ virtual void sent_choke (); │ │ │ virtual void sent_have_all (); │ │ │ - virtual void sent_suggest (piece_index_t); │ │ │ - virtual void sent_request (peer_request const&); │ │ │ - virtual void sent_have_none (); │ │ │ - virtual void sent_reject_request (peer_request const&); │ │ │ - virtual void sent_cancel (peer_request const&); │ │ │ - virtual void sent_have (piece_index_t); │ │ │ - virtual void sent_interested (); │ │ │ - virtual void sent_piece (peer_request const&); │ │ │ virtual void sent_not_interested (); │ │ │ virtual void sent_unchoke (); │ │ │ + virtual void sent_interested (); │ │ │ + virtual void sent_have (piece_index_t); │ │ │ + virtual void sent_piece (peer_request const&); │ │ │ virtual void sent_payload (int /* bytes */); │ │ │ virtual bool can_disconnect (error_code const& /*ec*/); │ │ │ virtual bool on_extended (int /*length*/, int /*msg*/, │ │ │ span<char const> /*body*/); │ │ │ virtual bool on_unknown_message (int /*length*/, int /*msg*/, │ │ │ span<char const> /*body*/); │ │ │ virtual void on_piece_failed (piece_index_t); │ │ │ @@ -569,39 +639,39 @@ │ │ │ virtual bool on_extension_handshake (bdecode_node const&); │ │ │ │ │ │

    called when the extension handshake from the other end is received │ │ │ if this returns false, it means that this extension isn't │ │ │ supported by this peer. It will result in this peer_plugin │ │ │ being removed from the peer_connection and destructed. │ │ │ this is not called for web seeds

    │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ - │ │ │ │ │ │ + │ │ │ │ │ │ + │ │ │ + │ │ │ + │ │ │ + │ │ │ │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    on_unchoke() on_have_none() on_not_interested() on_request() on_dont_have() on_have_all() on_bitfield() on_have() on_allowed_fast() on_choke() on_interested()

    │ │ │ + │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    on_have() on_interested() on_allowed_fast() on_request() on_dont_have() on_have_none() on_not_interested() on_choke() on_have_all() on_unchoke() on_bitfield()

    │ │ │
    │ │ │ +virtual bool on_dont_have (piece_index_t);
    │ │ │ +virtual bool on_interested ();
    │ │ │  virtual bool on_have_none ();
    │ │ │ +virtual bool on_unchoke ();
    │ │ │  virtual bool on_have (piece_index_t);
    │ │ │ -virtual bool on_request (peer_request const&);
    │ │ │ -virtual bool on_not_interested ();
    │ │ │  virtual bool on_allowed_fast (piece_index_t);
    │ │ │ -virtual bool on_bitfield (bitfield const& /*bitfield*/);
    │ │ │ -virtual bool on_interested ();
    │ │ │ -virtual bool on_choke ();
    │ │ │ -virtual bool on_unchoke ();
    │ │ │  virtual bool on_have_all ();
    │ │ │ -virtual bool on_dont_have (piece_index_t);
    │ │ │ +virtual bool on_choke ();
    │ │ │ +virtual bool on_request (peer_request const&);
    │ │ │ +virtual bool on_bitfield (bitfield const& /*bitfield*/);
    │ │ │ +virtual bool on_not_interested ();
    │ │ │  
    │ │ │

    returning true from any of the message handlers │ │ │ indicates that the plugin has handled the message. │ │ │ it will break the plugin chain traversing and not let │ │ │ anyone else handle the message, including the default │ │ │ handler.

    │ │ │ [report issue]
    │ │ │ @@ -613,27 +683,27 @@ │ │ │ │ │ │

    This function is called when the peer connection is receiving │ │ │ a piece. buf points (non-owning pointer) to the data in an │ │ │ internal immutable disk buffer. The length of the data is specified │ │ │ in the length member of the piece parameter. │ │ │ returns true to indicate that the piece is handled and the │ │ │ rest of the logic should be ignored.

    │ │ │ - │ │ │ - │ │ │ │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    sent_unchoke() sent_have() sent_not_interested() sent_piece() sent_interested()

    │ │ │ + │ │ │ + │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    sent_not_interested() sent_have() sent_unchoke() sent_interested() sent_piece()

    │ │ │
    │ │ │ -virtual void sent_have (piece_index_t);
    │ │ │ -virtual void sent_interested ();
    │ │ │ -virtual void sent_piece (peer_request const&);
    │ │ │  virtual void sent_not_interested ();
    │ │ │  virtual void sent_unchoke ();
    │ │ │ +virtual void sent_interested ();
    │ │ │ +virtual void sent_have (piece_index_t);
    │ │ │ +virtual void sent_piece (peer_request const&);
    │ │ │  
    │ │ │

    called after a choke message has been sent to the peer

    │ │ │ [report issue]
    │ │ │
    │ │ │

    sent_payload()

    │ │ │
    │ │ │  virtual void sent_payload (int /* bytes */);
    │ │ │ @@ -669,18 +739,18 @@
    │ │ │  
    │ │ │

    on_unknown_message()

    │ │ │
    │ │ │  virtual bool on_unknown_message (int /*length*/, int /*msg*/,
    │ │ │        span<char const> /*body*/);
    │ │ │  
    │ │ │

    this is not called for web seeds

    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    on_piece_pass() on_piece_failed()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    on_piece_failed() on_piece_pass()

    │ │ │
    │ │ │  virtual void on_piece_failed (piece_index_t);
    │ │ │  virtual void on_piece_pass (piece_index_t);
    │ │ │  
    │ │ │

    called when a piece that this peer participated in either │ │ │ fails or passes the hash_check

    │ │ │ [report issue]
    │ │ │ @@ -723,112 +793,42 @@ │ │ │ (consume, produce, packet_size)

    │ │ │

    consume is set to the number of bytes which should be trimmed from the │ │ │ head of the buffers, default is 0

    │ │ │

    produce is set to the number of bytes of payload which are now ready to │ │ │ be sent to the upper layer. default is the number of bytes passed in receive_vec

    │ │ │

    packet_size is set to the minimum number of bytes which must be read to │ │ │ advance the next step of decryption. default is 0

    │ │ │ -[report issue]
    │ │ │ +[report issue]
    │ │ │
    │ │ │ -
    │ │ │ -

    peer_connection_handle

    │ │ │ -

    Declared in "libtorrent/peer_connection_handle.hpp"

    │ │ │ -

    the peer_connection_handle class provides a handle to the internal peer │ │ │ -connection object, to be used by plugins. This is a low level interface that │ │ │ -may not be stable across libtorrent versions

    │ │ │ -
    │ │ │ -struct peer_connection_handle
    │ │ │ -{
    │ │ │ -   explicit peer_connection_handle (std::weak_ptr<peer_connection> impl);
    │ │ │ -   connection_type type () const;
    │ │ │ -   peer_plugin const* find_plugin (string_view type) const;
    │ │ │ -   void add_extension (std::shared_ptr<peer_plugin>);
    │ │ │ -   bool is_seed () const;
    │ │ │ -   bool upload_only () const;
    │ │ │ -   peer_id const& pid () const;
    │ │ │ -   bool has_piece (piece_index_t i) const;
    │ │ │ -   bool is_interesting () const;
    │ │ │ -   bool is_choked () const;
    │ │ │ -   bool is_peer_interested () const;
    │ │ │ -   bool has_peer_choked () const;
    │ │ │ -   void choke_this_peer ();
    │ │ │ -   void maybe_unchoke_this_peer ();
    │ │ │ -   void get_peer_info (peer_info& p) const;
    │ │ │ -   torrent_handle associated_torrent () const;
    │ │ │ -   tcp::endpoint const& remote () const;
    │ │ │ -   tcp::endpoint local_endpoint () const;
    │ │ │ -   void disconnect (error_code const& ec, operation_t op
    │ │ │ -      , disconnect_severity_t = peer_connection_interface::normal);
    │ │ │ -   bool is_outgoing () const;
    │ │ │ -   bool is_connecting () const;
    │ │ │ -   bool is_disconnecting () const;
    │ │ │ -   bool on_local_network () const;
    │ │ │ -   bool ignore_unchoke_slots () const;
    │ │ │ -   bool failed () const;
    │ │ │ -   bool should_log (peer_log_alert::direction_t direction) const;
    │ │ │ -   void peer_log (peer_log_alert::direction_t direction
    │ │ │ -      , char const* event, char const* fmt = "", ...) const TORRENT_FORMAT(4,5);
    │ │ │ -   bool can_disconnect (error_code const& ec) const;
    │ │ │ -   bool has_metadata () const;
    │ │ │ -   bool in_handshake () const;
    │ │ │ -   void send_buffer (char const* begin, int size);
    │ │ │ -   std::time_t last_seen_complete () const;
    │ │ │ -   time_point time_of_last_unchoke () const;
    │ │ │ -   bool operator== (peer_connection_handle const& o) const;
    │ │ │ -   bool operator< (peer_connection_handle const& o) const;
    │ │ │ -   bool operator!= (peer_connection_handle const& o) const;
    │ │ │ -   std::shared_ptr<peer_connection> native_handle () const;
    │ │ │ -};
    │ │ │ -
    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    bt_peer_connection_handle

    │ │ │ -

    Declared in "libtorrent/peer_connection_handle.hpp"

    │ │ │ -

    The bt_peer_connection_handle provides a handle to the internal bittorrent │ │ │ -peer connection object to plugins. It's low level and may not be a stable API │ │ │ -across libtorrent versions.

    │ │ │ +
    │ │ │ +

    create_smart_ban_plugin()

    │ │ │ +

    Declared in "libtorrent/extensions/smart_ban.hpp"

    │ │ │
    │ │ │ -struct bt_peer_connection_handle : peer_connection_handle
    │ │ │ -{
    │ │ │ -   explicit bt_peer_connection_handle (peer_connection_handle pc);
    │ │ │ -   bool packet_finished () const;
    │ │ │ -   bool support_extensions () const;
    │ │ │ -   bool supports_encryption () const;
    │ │ │ -   void switch_send_crypto (std::shared_ptr<crypto_plugin> crypto);
    │ │ │ -   void switch_recv_crypto (std::shared_ptr<crypto_plugin> crypto);
    │ │ │ -   std::shared_ptr<bt_peer_connection> native_handle () const;
    │ │ │ -};
    │ │ │ +std::shared_ptr<torrent_plugin> create_smart_ban_plugin (torrent_handle const&, client_data_t);
    │ │ │  
    │ │ │ +

    constructor function for the smart ban extension. The extension keeps │ │ │ +track of the data peers have sent us for failing pieces and once the │ │ │ +piece completes and passes the hash check bans the peers that turned │ │ │ +out to have sent corrupt data. │ │ │ +This function can either be passed in the add_torrent_params::extensions │ │ │ +field, or via torrent_handle::add_extension().

    │ │ │ [report issue]
    │ │ │
    │ │ │

    create_ut_pex_plugin()

    │ │ │

    Declared in "libtorrent/extensions/ut_pex.hpp"

    │ │ │
    │ │ │  std::shared_ptr<torrent_plugin> create_ut_pex_plugin (torrent_handle const&, client_data_t);
    │ │ │  
    │ │ │

    constructor function for the ut_pex extension. The ut_pex │ │ │ extension allows peers to gossip about their connections, allowing │ │ │ the swarm stay well connected and peers aware of more peers in the │ │ │ swarm. This extension is enabled by default unless explicitly disabled in │ │ │ the session constructor.

    │ │ │

    This can either be passed in the add_torrent_params::extensions field, or │ │ │ via torrent_handle::add_extension().

    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    create_smart_ban_plugin()

    │ │ │ -

    Declared in "libtorrent/extensions/smart_ban.hpp"

    │ │ │ -
    │ │ │ -std::shared_ptr<torrent_plugin> create_smart_ban_plugin (torrent_handle const&, client_data_t);
    │ │ │ -
    │ │ │ -

    constructor function for the smart ban extension. The extension keeps │ │ │ -track of the data peers have sent us for failing pieces and once the │ │ │ -piece completes and passes the hash check bans the peers that turned │ │ │ -out to have sent corrupt data. │ │ │ -This function can either be passed in the add_torrent_params::extensions │ │ │ -field, or via torrent_handle::add_extension().

    │ │ │ [report issue]
    │ │ │
    │ │ │

    create_ut_metadata_plugin()

    │ │ │

    Declared in "libtorrent/extensions/ut_metadata.hpp"

    │ │ │
    │ │ │  std::shared_ptr<torrent_plugin> create_ut_metadata_plugin (torrent_handle const&, client_data_t);
    │ │ │  
    │ │ │ ├── html2text {} │ │ │ │ @@ -2,59 +2,59 @@ │ │ │ │ _[_l_i_b_t_o_r_r_e_n_t_ _l_o_g_o_] │ │ │ │ VVeerrssiioonn:: 2.0.11 │ │ │ │ _h_o_m_e │ │ │ │ Table of contents │ │ │ │ * _a_ _w_o_r_d_ _o_f_ _c_a_u_t_i_o_n │ │ │ │ * _p_l_u_g_i_n_-_i_n_t_e_r_f_a_c_e │ │ │ │ * _c_u_s_t_o_m_ _a_l_e_r_t_s │ │ │ │ + * _p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e │ │ │ │ + * _b_t___p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e │ │ │ │ * _p_l_u_g_i_n │ │ │ │ o _i_m_p_l_e_m_e_n_t_e_d___f_e_a_t_u_r_e_s_(_) │ │ │ │ o _n_e_w___t_o_r_r_e_n_t_(_) │ │ │ │ o _a_d_d_e_d_(_) │ │ │ │ o _a_b_o_r_t_(_) │ │ │ │ o _o_n___d_h_t___r_e_q_u_e_s_t_(_) │ │ │ │ o _o_n___a_l_e_r_t_(_) │ │ │ │ o _o_n___u_n_k_n_o_w_n___t_o_r_r_e_n_t_(_) │ │ │ │ o _o_n___t_i_c_k_(_) │ │ │ │ o _g_e_t___u_n_c_h_o_k_e___p_r_i_o_r_i_t_y_(_) │ │ │ │ o _l_o_a_d___s_t_a_t_e_(_) │ │ │ │ * _t_o_r_r_e_n_t___p_l_u_g_i_n │ │ │ │ o _n_e_w___c_o_n_n_e_c_t_i_o_n_(_) │ │ │ │ - o _o_n___p_i_e_c_e___p_a_s_s_(_)_ _o_n___p_i_e_c_e___f_a_i_l_e_d_(_) │ │ │ │ + o _o_n___p_i_e_c_e___f_a_i_l_e_d_(_)_ _o_n___p_i_e_c_e___p_a_s_s_(_) │ │ │ │ o _t_i_c_k_(_) │ │ │ │ - o _o_n___p_a_u_s_e_(_)_ _o_n___r_e_s_u_m_e_(_) │ │ │ │ + o _o_n___r_e_s_u_m_e_(_)_ _o_n___p_a_u_s_e_(_) │ │ │ │ o _o_n___f_i_l_e_s___c_h_e_c_k_e_d_(_) │ │ │ │ o _o_n___s_t_a_t_e_(_) │ │ │ │ o _o_n___a_d_d___p_e_e_r_(_) │ │ │ │ * _p_e_e_r___p_l_u_g_i_n │ │ │ │ o _t_y_p_e_(_) │ │ │ │ o _a_d_d___h_a_n_d_s_h_a_k_e_(_) │ │ │ │ o _o_n___d_i_s_c_o_n_n_e_c_t_(_) │ │ │ │ o _o_n___c_o_n_n_e_c_t_e_d_(_) │ │ │ │ o _o_n___h_a_n_d_s_h_a_k_e_(_) │ │ │ │ o _o_n___e_x_t_e_n_s_i_o_n___h_a_n_d_s_h_a_k_e_(_) │ │ │ │ - o _o_n___u_n_c_h_o_k_e_(_)_ _o_n___h_a_v_e___n_o_n_e_(_)_ _o_n___n_o_t___i_n_t_e_r_e_s_t_e_d_(_)_ _o_n___r_e_q_u_e_s_t_(_) │ │ │ │ - _o_n___d_o_n_t___h_a_v_e_(_)_ _o_n___h_a_v_e___a_l_l_(_)_ _o_n___b_i_t_f_i_e_l_d_(_)_ _o_n___h_a_v_e_(_) │ │ │ │ - _o_n___a_l_l_o_w_e_d___f_a_s_t_(_)_ _o_n___c_h_o_k_e_(_)_ _o_n___i_n_t_e_r_e_s_t_e_d_(_) │ │ │ │ + o _o_n___h_a_v_e_(_)_ _o_n___i_n_t_e_r_e_s_t_e_d_(_)_ _o_n___a_l_l_o_w_e_d___f_a_s_t_(_)_ _o_n___r_e_q_u_e_s_t_(_) │ │ │ │ + _o_n___d_o_n_t___h_a_v_e_(_)_ _o_n___h_a_v_e___n_o_n_e_(_)_ _o_n___n_o_t___i_n_t_e_r_e_s_t_e_d_(_)_ _o_n___c_h_o_k_e_(_) │ │ │ │ + _o_n___h_a_v_e___a_l_l_(_)_ _o_n___u_n_c_h_o_k_e_(_)_ _o_n___b_i_t_f_i_e_l_d_(_) │ │ │ │ o _o_n___p_i_e_c_e_(_) │ │ │ │ - o _s_e_n_t___u_n_c_h_o_k_e_(_)_ _s_e_n_t___h_a_v_e_(_)_ _s_e_n_t___n_o_t___i_n_t_e_r_e_s_t_e_d_(_)_ _s_e_n_t___p_i_e_c_e_(_) │ │ │ │ - _s_e_n_t___i_n_t_e_r_e_s_t_e_d_(_) │ │ │ │ + o _s_e_n_t___n_o_t___i_n_t_e_r_e_s_t_e_d_(_)_ _s_e_n_t___h_a_v_e_(_)_ _s_e_n_t___u_n_c_h_o_k_e_(_)_ _s_e_n_t___i_n_t_e_r_e_s_t_e_d_(_) │ │ │ │ + _s_e_n_t___p_i_e_c_e_(_) │ │ │ │ o _s_e_n_t___p_a_y_l_o_a_d_(_) │ │ │ │ o _c_a_n___d_i_s_c_o_n_n_e_c_t_(_) │ │ │ │ o _o_n___e_x_t_e_n_d_e_d_(_) │ │ │ │ o _o_n___u_n_k_n_o_w_n___m_e_s_s_a_g_e_(_) │ │ │ │ - o _o_n___p_i_e_c_e___p_a_s_s_(_)_ _o_n___p_i_e_c_e___f_a_i_l_e_d_(_) │ │ │ │ + o _o_n___p_i_e_c_e___f_a_i_l_e_d_(_)_ _o_n___p_i_e_c_e___p_a_s_s_(_) │ │ │ │ o _t_i_c_k_(_) │ │ │ │ o _w_r_i_t_e___r_e_q_u_e_s_t_(_) │ │ │ │ * _c_r_y_p_t_o___p_l_u_g_i_n │ │ │ │ o _d_e_c_r_y_p_t_(_) │ │ │ │ - * _p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e │ │ │ │ - * _b_t___p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e │ │ │ │ - * _c_r_e_a_t_e___u_t___p_e_x___p_l_u_g_i_n_(_) │ │ │ │ * _c_r_e_a_t_e___s_m_a_r_t___b_a_n___p_l_u_g_i_n_(_) │ │ │ │ + * _c_r_e_a_t_e___u_t___p_e_x___p_l_u_g_i_n_(_) │ │ │ │ * _c_r_e_a_t_e___u_t___m_e_t_a_d_a_t_a___p_l_u_g_i_n_(_) │ │ │ │ libtorrent has a _p_l_u_g_i_n interface for implementing extensions to the protocol. │ │ │ │ These can be general extensions for transferring metadata or peer exchange │ │ │ │ extensions, or it could be used to provide a way to customize the protocol to │ │ │ │ fit a particular (closed) network. │ │ │ │ In short, the _p_l_u_g_i_n interface makes it possible to: │ │ │ │ * register extension messages (sent in the extension handshake), see │ │ │ │ @@ -131,14 +131,79 @@ │ │ │ │ The static category is required for checking whether or not the category for a │ │ │ │ specific _a_l_e_r_t is enabled or not, without instantiating the _a_l_e_r_t. The category │ │ │ │ virtual function is the run-time equivalence. │ │ │ │ The what() virtual function may simply be a string literal of the class name of │ │ │ │ your _a_l_e_r_t. │ │ │ │ For more information, see the _a_l_e_r_t_ _s_e_c_t_i_o_n. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ ppeeeerr__ccoonnnneeccttiioonn__hhaannddllee ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e_._h_p_p" │ │ │ │ +the _p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e class provides a handle to the internal peer │ │ │ │ +connection object, to be used by plugins. This is a low level interface that │ │ │ │ +may not be stable across libtorrent versions │ │ │ │ +struct peer_connection_handle │ │ │ │ +{ │ │ │ │ + explicit ppeeeerr__ccoonnnneeccttiioonn__hhaannddllee (std::weak_ptr impl); │ │ │ │ + connection_type ttyyppee () const; │ │ │ │ + void aadddd__eexxtteennssiioonn (std::shared_ptr); │ │ │ │ + peer_plugin const* ffiinndd__pplluuggiinn (string_view type) const; │ │ │ │ + bool iiss__sseeeedd () const; │ │ │ │ + bool uuppllooaadd__oonnllyy () const; │ │ │ │ + bool hhaass__ppiieeccee (piece_index_t i) const; │ │ │ │ + peer_id const& ppiidd () const; │ │ │ │ + bool iiss__iinntteerreessttiinngg () const; │ │ │ │ + bool iiss__cchhookkeedd () const; │ │ │ │ + bool iiss__ppeeeerr__iinntteerreesstteedd () const; │ │ │ │ + bool hhaass__ppeeeerr__cchhookkeedd () const; │ │ │ │ + void cchhookkee__tthhiiss__ppeeeerr (); │ │ │ │ + void mmaayybbee__uunncchhookkee__tthhiiss__ppeeeerr (); │ │ │ │ + void ggeett__ppeeeerr__iinnffoo (peer_info& p) const; │ │ │ │ + torrent_handle aassssoocciiaatteedd__ttoorrrreenntt () const; │ │ │ │ + _t_c_p_:_:_e_n_d_p_o_i_n_t const& rreemmoottee () const; │ │ │ │ + _t_c_p_:_:_e_n_d_p_o_i_n_t llooccaall__eennddppooiinntt () const; │ │ │ │ + bool iiss__ccoonnnneeccttiinngg () const; │ │ │ │ + bool iiss__oouuttggooiinngg () const; │ │ │ │ + void ddiissccoonnnneecctt (error_code const& ec, operation_t op │ │ │ │ + , disconnect_severity_t = peer_connection_interface::normal); │ │ │ │ + bool iiss__ddiissccoonnnneeccttiinngg () const; │ │ │ │ + bool oonn__llooccaall__nneettwwoorrkk () const; │ │ │ │ + bool iiggnnoorree__uunncchhookkee__sslloottss () const; │ │ │ │ + bool ffaaiilleedd () const; │ │ │ │ + void ppeeeerr__lloogg (peer_log_alert::direction_t direction │ │ │ │ + , char const* event, char const* fmt = "", ...) const TORRENT_FORMAT │ │ │ │ +(4,5); │ │ │ │ + bool sshhoouulldd__lloogg (peer_log_alert::direction_t direction) const; │ │ │ │ + bool ccaann__ddiissccoonnnneecctt (error_code const& ec) const; │ │ │ │ + bool hhaass__mmeettaaddaattaa () const; │ │ │ │ + bool iinn__hhaannddsshhaakkee () const; │ │ │ │ + void sseenndd__bbuuffffeerr (char const* begin, int size); │ │ │ │ + time_point ttiimmee__ooff__llaasstt__uunncchhookkee () const; │ │ │ │ + std::time_t llaasstt__sseeeenn__ccoommpplleettee () const; │ │ │ │ + bool ooppeerraattoorr==== (peer_connection_handle const& o) const; │ │ │ │ + bool ooppeerraattoorr!!== (peer_connection_handle const& o) const; │ │ │ │ + bool ooppeerraattoorr<< (peer_connection_handle const& o) const; │ │ │ │ + std::shared_ptr nnaattiivvee__hhaannddllee () const; │ │ │ │ +}; │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ bbtt__ppeeeerr__ccoonnnneeccttiioonn__hhaannddllee ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e_._h_p_p" │ │ │ │ +The _b_t___p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e provides a handle to the internal bittorrent peer │ │ │ │ +connection object to plugins. It's low level and may not be a stable API across │ │ │ │ +libtorrent versions. │ │ │ │ +struct bt_peer_connection_handle : peer_connection_handle │ │ │ │ +{ │ │ │ │ + explicit bbtt__ppeeeerr__ccoonnnneeccttiioonn__hhaannddllee (peer_connection_handle pc); │ │ │ │ + bool ssuuppppoorrtt__eexxtteennssiioonnss () const; │ │ │ │ + bool ppaacckkeett__ffiinniisshheedd () const; │ │ │ │ + bool ssuuppppoorrttss__eennccrryyppttiioonn () const; │ │ │ │ + void sswwiittcchh__rreeccvv__ccrryyppttoo (std::shared_ptr crypto); │ │ │ │ + void sswwiittcchh__sseenndd__ccrryyppttoo (std::shared_ptr crypto); │ │ │ │ + std::shared_ptr nnaattiivvee__hhaannddllee () const; │ │ │ │ +}; │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ pplluuggiinn ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_e_x_t_e_n_s_i_o_n_s_._h_p_p" │ │ │ │ this is the base class for a _s_e_s_s_i_o_n _p_l_u_g_i_n. One primary feature is that it is │ │ │ │ notified of all torrents that are added to the _s_e_s_s_i_o_n, and can add its own │ │ │ │ torrent_plugins. │ │ │ │ struct plugin │ │ │ │ { │ │ │ │ @@ -259,16 +324,16 @@ │ │ │ │ struct torrent_plugin │ │ │ │ { │ │ │ │ virtual std::shared_ptr nneeww__ccoonnnneeccttiioonn (peer_connection_handle │ │ │ │ const&); │ │ │ │ virtual void oonn__ppiieeccee__ffaaiilleedd (piece_index_t); │ │ │ │ virtual void oonn__ppiieeccee__ppaassss (piece_index_t); │ │ │ │ virtual void ttiicckk (); │ │ │ │ - virtual bool oonn__rreessuummee (); │ │ │ │ virtual bool oonn__ppaauussee (); │ │ │ │ + virtual bool oonn__rreessuummee (); │ │ │ │ virtual void oonn__ffiilleess__cchheecckkeedd (); │ │ │ │ virtual void oonn__ssttaattee (torrent_status::state_t); │ │ │ │ virtual void oonn__aadddd__ppeeeerr (tcp::endpoint const&, │ │ │ │ peer_source_flags_t, add_peer_flags_t); │ │ │ │ │ │ │ │ static constexpr add_peer_flags_t ffiirrsstt__ttiimmee = 1_bit; │ │ │ │ static constexpr add_peer_flags_t ffiilltteerreedd = 2_bit; │ │ │ │ @@ -285,30 +350,30 @@ │ │ │ │ have its hook functions called on event specific to that peer. │ │ │ │ The peer_connection_handle will be valid as long as the shared_ptr is being │ │ │ │ held by the torrent object. So, it is generally a good idea to not keep a │ │ │ │ shared_ptr to your own _p_e_e_r___p_l_u_g_i_n. If you want to keep references to it, use │ │ │ │ weak_ptr. │ │ │ │ If this function throws an exception, the connection will be closed. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** oonn__ppiieeccee__ppaassss(()) oonn__ppiieeccee__ffaaiilleedd(()) ********** │ │ │ │ +********** oonn__ppiieeccee__ffaaiilleedd(()) oonn__ppiieeccee__ppaassss(()) ********** │ │ │ │ virtual void oonn__ppiieeccee__ffaaiilleedd (piece_index_t); │ │ │ │ virtual void oonn__ppiieeccee__ppaassss (piece_index_t); │ │ │ │ These hooks are called when a piece passes the hash check or fails the hash │ │ │ │ check, respectively. The index is the piece index that was downloaded. It is │ │ │ │ possible to access the list of peers that participated in sending the piece │ │ │ │ through the torrent and the piece_picker. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** ttiicckk(()) ********** │ │ │ │ virtual void ttiicckk (); │ │ │ │ This hook is called approximately once per second. It is a way of making it │ │ │ │ easy for plugins to do timed events, for sending messages or whatever. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** oonn__ppaauussee(()) oonn__rreessuummee(()) ********** │ │ │ │ -virtual bool oonn__rreessuummee (); │ │ │ │ +********** oonn__rreessuummee(()) oonn__ppaauussee(()) ********** │ │ │ │ virtual bool oonn__ppaauussee (); │ │ │ │ +virtual bool oonn__rreessuummee (); │ │ │ │ These hooks are called when the torrent is paused and resumed respectively. The │ │ │ │ return value indicates if the event was handled. A return value of true │ │ │ │ indicates that it was handled, and no other _p_l_u_g_i_n after this one will have │ │ │ │ this hook function called, and the standard handler will also not be invoked. │ │ │ │ So, returning true effectively overrides the standard behavior of pause or │ │ │ │ resume. │ │ │ │ Note that if you call pause() or resume() on the torrent from your handler it │ │ │ │ @@ -354,43 +419,43 @@ │ │ │ │ { │ │ │ │ virtual string_view ttyyppee () const; │ │ │ │ virtual void aadddd__hhaannddsshhaakkee (entry&); │ │ │ │ virtual void oonn__ddiissccoonnnneecctt (error_code const&); │ │ │ │ virtual void oonn__ccoonnnneecctteedd (); │ │ │ │ virtual bool oonn__hhaannddsshhaakkee (span); │ │ │ │ virtual bool oonn__eexxtteennssiioonn__hhaannddsshhaakkee (bdecode_node const&); │ │ │ │ + virtual bool oonn__ddoonntt__hhaavvee (piece_index_t); │ │ │ │ + virtual bool oonn__iinntteerreesstteedd (); │ │ │ │ virtual bool oonn__hhaavvee__nnoonnee (); │ │ │ │ + virtual bool oonn__uunncchhookkee (); │ │ │ │ virtual bool oonn__hhaavvee (piece_index_t); │ │ │ │ - virtual bool oonn__rreeqquueesstt (peer_request const&); │ │ │ │ - virtual bool oonn__nnoott__iinntteerreesstteedd (); │ │ │ │ virtual bool oonn__aalllloowweedd__ffaasstt (piece_index_t); │ │ │ │ - virtual bool oonn__bbiittffiieelldd (bitfield const& //**bbiittffiieelldd**//); │ │ │ │ - virtual bool oonn__iinntteerreesstteedd (); │ │ │ │ - virtual bool oonn__cchhookkee (); │ │ │ │ - virtual bool oonn__uunncchhookkee (); │ │ │ │ virtual bool oonn__hhaavvee__aallll (); │ │ │ │ - virtual bool oonn__ddoonntt__hhaavvee (piece_index_t); │ │ │ │ + virtual bool oonn__cchhookkee (); │ │ │ │ + virtual bool oonn__rreeqquueesstt (peer_request const&); │ │ │ │ + virtual bool oonn__bbiittffiieelldd (bitfield const& //**bbiittffiieelldd**//); │ │ │ │ + virtual bool oonn__nnoott__iinntteerreesstteedd (); │ │ │ │ virtual bool oonn__ppiieeccee (peer_request const& //**ppiieeccee**// │ │ │ │ , span //**bbuuff**//); │ │ │ │ virtual bool oonn__rreejjeecctt (peer_request const&); │ │ │ │ virtual bool oonn__ssuuggggeesstt (piece_index_t); │ │ │ │ virtual bool oonn__ccaanncceell (peer_request const&); │ │ │ │ + virtual void sseenntt__ccaanncceell (peer_request const&); │ │ │ │ + virtual void sseenntt__hhaavvee__nnoonnee (); │ │ │ │ + virtual void sseenntt__rreeqquueesstt (peer_request const&); │ │ │ │ virtual void sseenntt__aallllooww__ffaasstt (piece_index_t); │ │ │ │ + virtual void sseenntt__rreejjeecctt__rreeqquueesstt (peer_request const&); │ │ │ │ + virtual void sseenntt__ssuuggggeesstt (piece_index_t); │ │ │ │ virtual void sseenntt__cchhookkee (); │ │ │ │ virtual void sseenntt__hhaavvee__aallll (); │ │ │ │ - virtual void sseenntt__ssuuggggeesstt (piece_index_t); │ │ │ │ - virtual void sseenntt__rreeqquueesstt (peer_request const&); │ │ │ │ - virtual void sseenntt__hhaavvee__nnoonnee (); │ │ │ │ - virtual void sseenntt__rreejjeecctt__rreeqquueesstt (peer_request const&); │ │ │ │ - virtual void sseenntt__ccaanncceell (peer_request const&); │ │ │ │ - virtual void sseenntt__hhaavvee (piece_index_t); │ │ │ │ - virtual void sseenntt__iinntteerreesstteedd (); │ │ │ │ - virtual void sseenntt__ppiieeccee (peer_request const&); │ │ │ │ virtual void sseenntt__nnoott__iinntteerreesstteedd (); │ │ │ │ virtual void sseenntt__uunncchhookkee (); │ │ │ │ + virtual void sseenntt__iinntteerreesstteedd (); │ │ │ │ + virtual void sseenntt__hhaavvee (piece_index_t); │ │ │ │ + virtual void sseenntt__ppiieeccee (peer_request const&); │ │ │ │ virtual void sseenntt__ppaayyllooaadd (int //** bbyytteess **//); │ │ │ │ virtual bool ccaann__ddiissccoonnnneecctt (error_code const& //**eecc**//); │ │ │ │ virtual bool oonn__eexxtteennddeedd (int //**lleennggtthh**//, int //**mmssgg**//, │ │ │ │ span //**bbooddyy**//); │ │ │ │ virtual bool oonn__uunnkknnoowwnn__mmeessssaaggee (int //**lleennggtthh**//, int //**mmssgg**//, │ │ │ │ span //**bbooddyy**//); │ │ │ │ virtual void oonn__ppiieeccee__ffaaiilleedd (piece_index_t); │ │ │ │ @@ -426,48 +491,48 @@ │ │ │ │ ********** oonn__eexxtteennssiioonn__hhaannddsshhaakkee(()) ********** │ │ │ │ virtual bool oonn__eexxtteennssiioonn__hhaannddsshhaakkee (bdecode_node const&); │ │ │ │ called when the extension handshake from the other end is received if this │ │ │ │ returns false, it means that this extension isn't supported by this peer. It │ │ │ │ will result in this _p_e_e_r___p_l_u_g_i_n being removed from the peer_connection and │ │ │ │ destructed. this is not called for web seeds │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** oonn__uunncchhookkee(()) oonn__hhaavvee__nnoonnee(()) oonn__nnoott__iinntteerreesstteedd(()) oonn__rreeqquueesstt(()) oonn__ddoonntt__hhaavvee │ │ │ │ -(()) oonn__hhaavvee__aallll(()) oonn__bbiittffiieelldd(()) oonn__hhaavvee(()) oonn__aalllloowweedd__ffaasstt(()) oonn__cchhookkee(()) │ │ │ │ -oonn__iinntteerreesstteedd(()) ********** │ │ │ │ +********** oonn__hhaavvee(()) oonn__iinntteerreesstteedd(()) oonn__aalllloowweedd__ffaasstt(()) oonn__rreeqquueesstt(()) oonn__ddoonntt__hhaavvee(()) │ │ │ │ +oonn__hhaavvee__nnoonnee(()) oonn__nnoott__iinntteerreesstteedd(()) oonn__cchhookkee(()) oonn__hhaavvee__aallll(()) oonn__uunncchhookkee(()) │ │ │ │ +oonn__bbiittffiieelldd(()) ********** │ │ │ │ +virtual bool oonn__ddoonntt__hhaavvee (piece_index_t); │ │ │ │ +virtual bool oonn__iinntteerreesstteedd (); │ │ │ │ virtual bool oonn__hhaavvee__nnoonnee (); │ │ │ │ +virtual bool oonn__uunncchhookkee (); │ │ │ │ virtual bool oonn__hhaavvee (piece_index_t); │ │ │ │ -virtual bool oonn__rreeqquueesstt (peer_request const&); │ │ │ │ -virtual bool oonn__nnoott__iinntteerreesstteedd (); │ │ │ │ virtual bool oonn__aalllloowweedd__ffaasstt (piece_index_t); │ │ │ │ -virtual bool oonn__bbiittffiieelldd (bitfield const& //**bbiittffiieelldd**//); │ │ │ │ -virtual bool oonn__iinntteerreesstteedd (); │ │ │ │ -virtual bool oonn__cchhookkee (); │ │ │ │ -virtual bool oonn__uunncchhookkee (); │ │ │ │ virtual bool oonn__hhaavvee__aallll (); │ │ │ │ -virtual bool oonn__ddoonntt__hhaavvee (piece_index_t); │ │ │ │ +virtual bool oonn__cchhookkee (); │ │ │ │ +virtual bool oonn__rreeqquueesstt (peer_request const&); │ │ │ │ +virtual bool oonn__bbiittffiieelldd (bitfield const& //**bbiittffiieelldd**//); │ │ │ │ +virtual bool oonn__nnoott__iinntteerreesstteedd (); │ │ │ │ returning true from any of the message handlers indicates that the _p_l_u_g_i_n has │ │ │ │ handled the message. it will break the _p_l_u_g_i_n chain traversing and not let │ │ │ │ anyone else handle the message, including the default handler. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** oonn__ppiieeccee(()) ********** │ │ │ │ virtual bool oonn__ppiieeccee (peer_request const& //**ppiieeccee**// │ │ │ │ , span //**bbuuff**//); │ │ │ │ This function is called when the peer connection is receiving a piece. buf │ │ │ │ points (non-owning pointer) to the data in an internal immutable disk buffer. │ │ │ │ The length of the data is specified in the length member of the piece │ │ │ │ parameter. returns true to indicate that the piece is handled and the rest of │ │ │ │ the logic should be ignored. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** sseenntt__uunncchhookkee(()) sseenntt__hhaavvee(()) sseenntt__nnoott__iinntteerreesstteedd(()) sseenntt__ppiieeccee(()) │ │ │ │ -sseenntt__iinntteerreesstteedd(()) ********** │ │ │ │ -virtual void sseenntt__hhaavvee (piece_index_t); │ │ │ │ -virtual void sseenntt__iinntteerreesstteedd (); │ │ │ │ -virtual void sseenntt__ppiieeccee (peer_request const&); │ │ │ │ +********** sseenntt__nnoott__iinntteerreesstteedd(()) sseenntt__hhaavvee(()) sseenntt__uunncchhookkee(()) sseenntt__iinntteerreesstteedd(()) │ │ │ │ +sseenntt__ppiieeccee(()) ********** │ │ │ │ virtual void sseenntt__nnoott__iinntteerreesstteedd (); │ │ │ │ virtual void sseenntt__uunncchhookkee (); │ │ │ │ +virtual void sseenntt__iinntteerreesstteedd (); │ │ │ │ +virtual void sseenntt__hhaavvee (piece_index_t); │ │ │ │ +virtual void sseenntt__ppiieeccee (peer_request const&); │ │ │ │ called after a choke message has been sent to the peer │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** sseenntt__ppaayyllooaadd(()) ********** │ │ │ │ virtual void sseenntt__ppaayyllooaadd (int //** bbyytteess **//); │ │ │ │ called after piece data has been sent to the peer this can be used for stats │ │ │ │ book keeping │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ @@ -490,15 +555,15 @@ │ │ │ │ receiving large messages. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** oonn__uunnkknnoowwnn__mmeessssaaggee(()) ********** │ │ │ │ virtual bool oonn__uunnkknnoowwnn__mmeessssaaggee (int //**lleennggtthh**//, int //**mmssgg**//, │ │ │ │ span //**bbooddyy**//); │ │ │ │ this is not called for web seeds │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** oonn__ppiieeccee__ppaassss(()) oonn__ppiieeccee__ffaaiilleedd(()) ********** │ │ │ │ +********** oonn__ppiieeccee__ffaaiilleedd(()) oonn__ppiieeccee__ppaassss(()) ********** │ │ │ │ virtual void oonn__ppiieeccee__ffaaiilleedd (piece_index_t); │ │ │ │ virtual void oonn__ppiieeccee__ppaassss (piece_index_t); │ │ │ │ called when a piece that this peer participated in either fails or passes the │ │ │ │ hash_check │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** ttiicckk(()) ********** │ │ │ │ virtual void ttiicckk (); │ │ │ │ @@ -529,100 +594,35 @@ │ │ │ │ consume is set to the number of bytes which should be trimmed from the head of │ │ │ │ the buffers, default is 0 │ │ │ │ produce is set to the number of bytes of payload which are now ready to be sent │ │ │ │ to the upper layer. default is the number of bytes passed in receive_vec │ │ │ │ packet_size is set to the minimum number of bytes which must be read to advance │ │ │ │ the next step of decryption. default is 0 │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ ppeeeerr__ccoonnnneeccttiioonn__hhaannddllee ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e_._h_p_p" │ │ │ │ -the _p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e class provides a handle to the internal peer │ │ │ │ -connection object, to be used by plugins. This is a low level interface that │ │ │ │ -may not be stable across libtorrent versions │ │ │ │ -struct peer_connection_handle │ │ │ │ -{ │ │ │ │ - explicit ppeeeerr__ccoonnnneeccttiioonn__hhaannddllee (std::weak_ptr impl); │ │ │ │ - connection_type ttyyppee () const; │ │ │ │ - peer_plugin const* ffiinndd__pplluuggiinn (string_view type) const; │ │ │ │ - void aadddd__eexxtteennssiioonn (std::shared_ptr); │ │ │ │ - bool iiss__sseeeedd () const; │ │ │ │ - bool uuppllooaadd__oonnllyy () const; │ │ │ │ - peer_id const& ppiidd () const; │ │ │ │ - bool hhaass__ppiieeccee (piece_index_t i) const; │ │ │ │ - bool iiss__iinntteerreessttiinngg () const; │ │ │ │ - bool iiss__cchhookkeedd () const; │ │ │ │ - bool iiss__ppeeeerr__iinntteerreesstteedd () const; │ │ │ │ - bool hhaass__ppeeeerr__cchhookkeedd () const; │ │ │ │ - void cchhookkee__tthhiiss__ppeeeerr (); │ │ │ │ - void mmaayybbee__uunncchhookkee__tthhiiss__ppeeeerr (); │ │ │ │ - void ggeett__ppeeeerr__iinnffoo (peer_info& p) const; │ │ │ │ - torrent_handle aassssoocciiaatteedd__ttoorrrreenntt () const; │ │ │ │ - _t_c_p_:_:_e_n_d_p_o_i_n_t const& rreemmoottee () const; │ │ │ │ - _t_c_p_:_:_e_n_d_p_o_i_n_t llooccaall__eennddppooiinntt () const; │ │ │ │ - void ddiissccoonnnneecctt (error_code const& ec, operation_t op │ │ │ │ - , disconnect_severity_t = peer_connection_interface::normal); │ │ │ │ - bool iiss__oouuttggooiinngg () const; │ │ │ │ - bool iiss__ccoonnnneeccttiinngg () const; │ │ │ │ - bool iiss__ddiissccoonnnneeccttiinngg () const; │ │ │ │ - bool oonn__llooccaall__nneettwwoorrkk () const; │ │ │ │ - bool iiggnnoorree__uunncchhookkee__sslloottss () const; │ │ │ │ - bool ffaaiilleedd () const; │ │ │ │ - bool sshhoouulldd__lloogg (peer_log_alert::direction_t direction) const; │ │ │ │ - void ppeeeerr__lloogg (peer_log_alert::direction_t direction │ │ │ │ - , char const* event, char const* fmt = "", ...) const TORRENT_FORMAT │ │ │ │ -(4,5); │ │ │ │ - bool ccaann__ddiissccoonnnneecctt (error_code const& ec) const; │ │ │ │ - bool hhaass__mmeettaaddaattaa () const; │ │ │ │ - bool iinn__hhaannddsshhaakkee () const; │ │ │ │ - void sseenndd__bbuuffffeerr (char const* begin, int size); │ │ │ │ - std::time_t llaasstt__sseeeenn__ccoommpplleettee () const; │ │ │ │ - time_point ttiimmee__ooff__llaasstt__uunncchhookkee () const; │ │ │ │ - bool ooppeerraattoorr==== (peer_connection_handle const& o) const; │ │ │ │ - bool ooppeerraattoorr<< (peer_connection_handle const& o) const; │ │ │ │ - bool ooppeerraattoorr!!== (peer_connection_handle const& o) const; │ │ │ │ - std::shared_ptr nnaattiivvee__hhaannddllee () const; │ │ │ │ -}; │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ bbtt__ppeeeerr__ccoonnnneeccttiioonn__hhaannddllee ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e_._h_p_p" │ │ │ │ -The _b_t___p_e_e_r___c_o_n_n_e_c_t_i_o_n___h_a_n_d_l_e provides a handle to the internal bittorrent peer │ │ │ │ -connection object to plugins. It's low level and may not be a stable API across │ │ │ │ -libtorrent versions. │ │ │ │ -struct bt_peer_connection_handle : peer_connection_handle │ │ │ │ -{ │ │ │ │ - explicit bbtt__ppeeeerr__ccoonnnneeccttiioonn__hhaannddllee (peer_connection_handle pc); │ │ │ │ - bool ppaacckkeett__ffiinniisshheedd () const; │ │ │ │ - bool ssuuppppoorrtt__eexxtteennssiioonnss () const; │ │ │ │ - bool ssuuppppoorrttss__eennccrryyppttiioonn () const; │ │ │ │ - void sswwiittcchh__sseenndd__ccrryyppttoo (std::shared_ptr crypto); │ │ │ │ - void sswwiittcchh__rreeccvv__ccrryyppttoo (std::shared_ptr crypto); │ │ │ │ - std::shared_ptr nnaattiivvee__hhaannddllee () const; │ │ │ │ -}; │ │ │ │ +************ ccrreeaattee__ssmmaarrtt__bbaann__pplluuggiinn(()) ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_e_x_t_e_n_s_i_o_n_s_/_s_m_a_r_t___b_a_n_._h_p_p" │ │ │ │ +std::shared_ptr ccrreeaattee__ssmmaarrtt__bbaann__pplluuggiinn (torrent_handle const&, │ │ │ │ +client_data_t); │ │ │ │ +constructor function for the smart ban extension. The extension keeps track of │ │ │ │ +the data peers have sent us for failing pieces and once the piece completes and │ │ │ │ +passes the hash check bans the peers that turned out to have sent corrupt data. │ │ │ │ +This function can either be passed in the add_torrent_params::extensions field, │ │ │ │ +or via _t_o_r_r_e_n_t___h_a_n_d_l_e_:_:_a_d_d___e_x_t_e_n_s_i_o_n_(_). │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ ccrreeaattee__uutt__ppeexx__pplluuggiinn(()) ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_e_x_t_e_n_s_i_o_n_s_/_u_t___p_e_x_._h_p_p" │ │ │ │ std::shared_ptr ccrreeaattee__uutt__ppeexx__pplluuggiinn (torrent_handle const&, │ │ │ │ client_data_t); │ │ │ │ constructor function for the ut_pex extension. The ut_pex extension allows │ │ │ │ peers to gossip about their connections, allowing the swarm stay well connected │ │ │ │ and peers aware of more peers in the swarm. This extension is enabled by │ │ │ │ default unless explicitly disabled in the _s_e_s_s_i_o_n constructor. │ │ │ │ This can either be passed in the add_torrent_params::extensions field, or via │ │ │ │ _t_o_r_r_e_n_t___h_a_n_d_l_e_:_:_a_d_d___e_x_t_e_n_s_i_o_n_(_). │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ ccrreeaattee__ssmmaarrtt__bbaann__pplluuggiinn(()) ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_e_x_t_e_n_s_i_o_n_s_/_s_m_a_r_t___b_a_n_._h_p_p" │ │ │ │ -std::shared_ptr ccrreeaattee__ssmmaarrtt__bbaann__pplluuggiinn (torrent_handle const&, │ │ │ │ -client_data_t); │ │ │ │ -constructor function for the smart ban extension. The extension keeps track of │ │ │ │ -the data peers have sent us for failing pieces and once the piece completes and │ │ │ │ -passes the hash check bans the peers that turned out to have sent corrupt data. │ │ │ │ -This function can either be passed in the add_torrent_params::extensions field, │ │ │ │ -or via _t_o_r_r_e_n_t___h_a_n_d_l_e_:_:_a_d_d___e_x_t_e_n_s_i_o_n_(_). │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ ccrreeaattee__uutt__mmeettaaddaattaa__pplluuggiinn(()) ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_e_x_t_e_n_s_i_o_n_s_/_u_t___m_e_t_a_d_a_t_a_._h_p_p" │ │ │ │ std::shared_ptr ccrreeaattee__uutt__mmeettaaddaattaa__pplluuggiinn (torrent_handle │ │ │ │ const&, client_data_t); │ │ │ │ constructor function for the ut_metadata extension. The ut_metadata extension │ │ │ │ allows peers to request the .torrent file (or more specifically the info- │ │ │ │ dictionary of the .torrent file) from each other. This is the main building │ │ ├── ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Resume_Data.html │ │ │┄ Ordering differences only │ │ │ @@ -42,18 +42,18 @@ │ │ │

    read_resume_data()

    │ │ │

    Declared in "libtorrent/read_resume_data.hpp"

    │ │ │
    │ │ │  add_torrent_params read_resume_data (span<char const> buffer
    │ │ │     , error_code& ec, load_torrent_limits const& cfg = {});
    │ │ │  add_torrent_params read_resume_data (bdecode_node const& rd
    │ │ │     , error_code& ec, int piece_limit = 0x200000);
    │ │ │ -add_torrent_params read_resume_data (bdecode_node const& rd
    │ │ │ -   , int piece_limit = 0x200000);
    │ │ │  add_torrent_params read_resume_data (span<char const> buffer
    │ │ │     , load_torrent_limits const& cfg = {});
    │ │ │ +add_torrent_params read_resume_data (bdecode_node const& rd
    │ │ │ +   , int piece_limit = 0x200000);
    │ │ │  
    │ │ │

    these functions are used to parse resume data and populate the appropriate │ │ │ fields in an add_torrent_params object. This object can then be used to add │ │ │ the actual torrent_info object to and pass to session::add_torrent() or │ │ │ session::async_add_torrent().

    │ │ │

    If the client wants to override any field that was loaded from the resume │ │ │ data, e.g. save_path, those fields must be changed after loading resume │ │ │ @@ -67,29 +67,29 @@ │ │ │ to torrent_info::parse_info_section().

    │ │ │ │ │ │ [report issue]
    │ │ │
    │ │ │

    write_resume_data_buf() write_resume_data()

    │ │ │

    Declared in "libtorrent/write_resume_data.hpp"

    │ │ │
    │ │ │ -std::vector<char> write_resume_data_buf (add_torrent_params const& atp);
    │ │ │  entry write_resume_data (add_torrent_params const& atp);
    │ │ │ +std::vector<char> write_resume_data_buf (add_torrent_params const& atp);
    │ │ │  
    │ │ │

    this function turns the resume data in an add_torrent_params object │ │ │ into a bencoded structure

    │ │ │ │ │ │ [report issue]
    │ │ │
    │ │ │

    write_torrent_file() write_torrent_file_buf()

    │ │ │

    Declared in "libtorrent/write_resume_data.hpp"

    │ │ │
    │ │ │ +entry write_torrent_file (add_torrent_params const& atp, write_torrent_flags_t flags);
    │ │ │ +entry write_torrent_file (add_torrent_params const& atp);
    │ │ │  std::vector<char> write_torrent_file_buf (add_torrent_params const& atp
    │ │ │     , write_torrent_flags_t flags);
    │ │ │ -entry write_torrent_file (add_torrent_params const& atp);
    │ │ │ -entry write_torrent_file (add_torrent_params const& atp, write_torrent_flags_t flags);
    │ │ │  
    │ │ │

    writes only the fields to create a .torrent file. This function may fail │ │ │ with a std::system_error exception if:

    │ │ │
    │ │ │ [report issue]
    │ │ │

    session_params

    │ │ │

    Declared in "libtorrent/session_params.hpp"

    │ │ │

    The session_params is a parameters pack for configuring the session │ │ │ before it's started.

    │ │ │
    │ │ │  struct session_params
    │ │ │  {
    │ │ │ -   session_params ();
    │ │ │ -   session_params (settings_pack const& sp);
    │ │ │     session_params (settings_pack&& sp);
    │ │ │ +   session_params (settings_pack const& sp);
    │ │ │ +   session_params ();
    │ │ │     session_params (settings_pack&& sp
    │ │ │        , std::vector<std::shared_ptr<plugin>> exts);
    │ │ │     session_params (settings_pack const& sp
    │ │ │        , std::vector<std::shared_ptr<plugin>> exts);
    │ │ │  
    │ │ │     settings_pack settings;
    │ │ │     std::vector<std::shared_ptr<plugin>> extensions;
    │ │ │ @@ -114,17 +114,17 @@
    │ │ │     std::map<std::string, std::string> ext_state;
    │ │ │     libtorrent::ip_filter ip_filter;
    │ │ │  };
    │ │ │  
    │ │ │ [report issue]
    │ │ │

    session_params()

    │ │ │
    │ │ │ -session_params ();
    │ │ │ -session_params (settings_pack const& sp);
    │ │ │  session_params (settings_pack&& sp);
    │ │ │ +session_params (settings_pack const& sp);
    │ │ │ +session_params ();
    │ │ │  
    │ │ │

    This constructor can be used to start with the default plugins │ │ │ (ut_metadata, ut_pex and smart_ban). Pass a settings_pack to set the │ │ │ initial settings when the session starts.

    │ │ │ [report issue]
    │ │ │
    │ │ │

    session_params()

    │ │ │ @@ -164,153 +164,14 @@ │ │ │ sessions, using read_session_params() and write_session_params(). │ │ │ │ │ │ [report issue]
    │ │ │
    ip_filter
    │ │ │
    the IP filter to use for the session. This restricts which peers are allowed │ │ │ to connect. As if passed to set_ip_filter().
    │ │ │
    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -
    │ │ │ -

    session_proxy

    │ │ │ -

    Declared in "libtorrent/session.hpp"

    │ │ │ -

    this is a holder for the internal session implementation object. Once the │ │ │ -session destruction is explicitly initiated, this holder is used to │ │ │ -synchronize the completion of the shutdown. The lifetime of this object │ │ │ -may outlive session, causing the session destructor to not block. The │ │ │ -session_proxy destructor will block however, until the underlying session │ │ │ -is done shutting down.

    │ │ │ -
    │ │ │ -struct session_proxy
    │ │ │ -{
    │ │ │ -   session_proxy (session_proxy const&);
    │ │ │ -   session_proxy& operator= (session_proxy&&) & noexcept;
    │ │ │ -   session_proxy& operator= (session_proxy const&) &;
    │ │ │ -   session_proxy (session_proxy&&) noexcept;
    │ │ │ -   ~session_proxy ();
    │ │ │ -   session_proxy ();
    │ │ │ -};
    │ │ │ -
    │ │ │ - │ │ │ - │ │ │ -[report issue]
    │ │ │ -

    ~session_proxy() operator=() session_proxy()

    │ │ │ -
    │ │ │ -session_proxy (session_proxy const&);
    │ │ │ -session_proxy& operator= (session_proxy&&) & noexcept;
    │ │ │ -session_proxy& operator= (session_proxy const&) &;
    │ │ │ -session_proxy (session_proxy&&) noexcept;
    │ │ │ -~session_proxy ();
    │ │ │ -session_proxy ();
    │ │ │ -
    │ │ │ -

    default constructor, does not refer to any session │ │ │ -implementation object.

    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -
    │ │ │ -

    session

    │ │ │ -

    Declared in "libtorrent/session.hpp"

    │ │ │ -

    The session holds all state that spans multiple torrents. Among other │ │ │ -things it runs the network loop and manages all torrents. 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.

    │ │ │ -

    You have some control over session configuration through the │ │ │ -session_handle::apply_settings() member function. To change one or more │ │ │ -configuration options, create a settings_pack. object and fill it with │ │ │ -the settings to be set and pass it in to session::apply_settings().

    │ │ │ -

    see apply_settings().

    │ │ │ -
    │ │ │ -struct session : session_handle
    │ │ │ -{
    │ │ │ -   session (session_params const& params, session_flags_t flags);
    │ │ │ -   session (session_params&& params, session_flags_t flags);
    │ │ │ -   explicit session (session_params&& params);
    │ │ │ -   session ();
    │ │ │ -   explicit session (session_params const& params);
    │ │ │ -   session (session_params&& params, io_context& ios);
    │ │ │ -   session (session_params const& params, io_context& ios, session_flags_t);
    │ │ │ -   session (session_params&& params, io_context& ios, session_flags_t);
    │ │ │ -   session (session_params const& params, io_context& ios);
    │ │ │ -   ~session ();
    │ │ │ -   session_proxy abort ();
    │ │ │ -};
    │ │ │ -
    │ │ │ -[report issue]
    │ │ │ -

    session()

    │ │ │ -
    │ │ │ -session (session_params const& params, session_flags_t flags);
    │ │ │ -session (session_params&& params, session_flags_t flags);
    │ │ │ -explicit session (session_params&& params);
    │ │ │ -session ();
    │ │ │ -explicit session (session_params const& params);
    │ │ │ -
    │ │ │ -

    Constructs the session objects which acts as the container of torrents. │ │ │ -In order to avoid a race condition between starting the session and │ │ │ -configuring it, you can pass in a session_params object. Its settings │ │ │ -will take effect before the session starts up.

    │ │ │ -

    The overloads taking flags can be used to start a session in │ │ │ -paused mode (by passing in session::paused). Note that │ │ │ -add_default_plugins do not have an affect on constructors that │ │ │ -take a session_params object. It already contains the plugins to use.

    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    session()

    │ │ │ -
    │ │ │ -session (session_params&& params, io_context& ios);
    │ │ │ -session (session_params const& params, io_context& ios, session_flags_t);
    │ │ │ -session (session_params&& params, io_context& ios, session_flags_t);
    │ │ │ -session (session_params const& params, io_context& ios);
    │ │ │ -
    │ │ │ -

    Overload of the constructor that takes an external io_context to run │ │ │ -the session object on. This is primarily useful for tests that may want │ │ │ -to run multiple sessions on a single io_context, or low resource │ │ │ -systems where additional threads are expensive and sharing an │ │ │ -io_context with other events is fine.

    │ │ │ -
    │ │ │ -

    Warning

    │ │ │ -

    The session object does not cleanly terminate with an external │ │ │ -io_context. The io_context::run() call must have returned │ │ │ -before it's safe to destruct the session. Which means you MUST │ │ │ -call session::abort() and save the session_proxy first, then │ │ │ -destruct the session object, then sync with the io_context, then │ │ │ -destruct the session_proxy object.

    │ │ │ -
    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    ~session()

    │ │ │ -
    │ │ │ -~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 apply_settings().

    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    abort()

    │ │ │ -
    │ │ │ -session_proxy abort ();
    │ │ │ -
    │ │ │ -

    In case you want to destruct the session asynchronously, 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:

    │ │ │ -
    │ │ │ -struct session_proxy {};
    │ │ │ -
    │ │ │ [report issue]
    │ │ │
    │ │ │
    │ │ │

    session_handle

    │ │ │

    Declared in "libtorrent/session_handle.hpp"

    │ │ │

    this class provides a non-owning handle to a session and a subset of the │ │ │ interface of the session class. If the underlying session is destructed │ │ │ @@ -328,67 +189,67 @@ │ │ │ void refresh_torrent_status (std::vector<torrent_status>* ret │ │ │ , status_flags_t flags = {}) const; │ │ │ void post_torrent_updates (status_flags_t flags = status_flags_t::all()); │ │ │ void post_session_stats (); │ │ │ void post_dht_stats (); │ │ │ void set_dht_state (dht::dht_state&& st); │ │ │ void set_dht_state (dht::dht_state const& st); │ │ │ - std::vector<torrent_handle> get_torrents () const; │ │ │ torrent_handle find_torrent (sha1_hash const& info_hash) const; │ │ │ - torrent_handle add_torrent (add_torrent_params&& params, error_code& ec); │ │ │ - void async_add_torrent (add_torrent_params const& params); │ │ │ - void async_add_torrent (add_torrent_params&& params); │ │ │ - torrent_handle add_torrent (add_torrent_params const& params); │ │ │ + std::vector<torrent_handle> get_torrents () const; │ │ │ torrent_handle add_torrent (add_torrent_params&& params); │ │ │ + void async_add_torrent (add_torrent_params const& params); │ │ │ torrent_handle add_torrent (add_torrent_params const& params, error_code& ec); │ │ │ - void pause (); │ │ │ - bool is_paused () const; │ │ │ + torrent_handle add_torrent (add_torrent_params const& params); │ │ │ + torrent_handle add_torrent (add_torrent_params&& params, error_code& ec); │ │ │ + void async_add_torrent (add_torrent_params&& params); │ │ │ void resume (); │ │ │ + bool is_paused () const; │ │ │ + void pause (); │ │ │ bool is_dht_running () const; │ │ │ void set_dht_storage (dht::dht_storage_constructor_type sc); │ │ │ void add_dht_node (std::pair<std::string, int> const& node); │ │ │ void dht_get_item (sha1_hash const& target); │ │ │ void dht_get_item (std::array<char, 32> key │ │ │ , std::string salt = std::string()); │ │ │ sha1_hash dht_put_item (entry data); │ │ │ void dht_put_item (std::array<char, 32> key │ │ │ , std::function<void(entry&, std::array<char, 64>& │ │ │ , std::int64_t&, std::string const&)> cb │ │ │ , std::string salt = std::string()); │ │ │ - void dht_get_peers (sha1_hash const& info_hash); │ │ │ void dht_announce (sha1_hash const& info_hash, int port = 0, dht::announce_flags_t flags = {}); │ │ │ + void dht_get_peers (sha1_hash const& info_hash); │ │ │ void dht_live_nodes (sha1_hash const& nid); │ │ │ void dht_sample_infohashes (udp::endpoint const& ep, sha1_hash const& target); │ │ │ void dht_direct_request (udp::endpoint const& ep, entry const& e, client_data_t userdata = {}); │ │ │ void add_extension (std::shared_ptr<plugin> ext); │ │ │ void add_extension (std::function<std::shared_ptr<torrent_plugin>( │ │ │ torrent_handle const&, client_data_t)> ext); │ │ │ ip_filter get_ip_filter () const; │ │ │ void set_ip_filter (ip_filter f); │ │ │ void set_port_filter (port_filter const& f); │ │ │ - unsigned short ssl_listen_port () const; │ │ │ bool is_listening () const; │ │ │ + unsigned short ssl_listen_port () const; │ │ │ unsigned short listen_port () const; │ │ │ - ip_filter get_peer_class_filter () const; │ │ │ void set_peer_class_filter (ip_filter const& f); │ │ │ + ip_filter get_peer_class_filter () const; │ │ │ void set_peer_class_type_filter (peer_class_type_filter const& f); │ │ │ peer_class_type_filter get_peer_class_type_filter () const; │ │ │ peer_class_t create_peer_class (char const* name); │ │ │ void delete_peer_class (peer_class_t cid); │ │ │ - void set_peer_class (peer_class_t cid, peer_class_info const& pci); │ │ │ peer_class_info get_peer_class (peer_class_t cid) const; │ │ │ + void set_peer_class (peer_class_t cid, peer_class_info const& pci); │ │ │ void remove_torrent (const torrent_handle&, remove_flags_t = {}); │ │ │ - settings_pack get_settings () const; │ │ │ void apply_settings (settings_pack&&); │ │ │ void apply_settings (settings_pack const&); │ │ │ - alert* wait_for_alert (time_duration max_wait); │ │ │ + settings_pack get_settings () const; │ │ │ void pop_alerts (std::vector<alert*>* alerts); │ │ │ void set_alert_notify (std::function<void()> const& fun); │ │ │ - void delete_port_mapping (port_mapping_t handle); │ │ │ + alert* wait_for_alert (time_duration max_wait); │ │ │ std::vector<port_mapping_t> add_port_mapping (portmap_protocol t, int external_port, int local_port); │ │ │ + void delete_port_mapping (port_mapping_t handle); │ │ │ void reopen_network_sockets (reopen_network_flags_t options = reopen_map_ports); │ │ │ std::shared_ptr<aux::session_impl> native_handle () const; │ │ │ │ │ │ static constexpr save_state_flags_t save_settings = 0_bit; │ │ │ static constexpr save_state_flags_t save_dht_state = 2_bit; │ │ │ static constexpr save_state_flags_t save_extension_state = 11_bit; │ │ │ static constexpr save_state_flags_t save_ip_filter = 12_bit; │ │ │ @@ -512,36 +373,36 @@ │ │ │ next time the DHT is started, as if it had been passed in via the │ │ │ session_params on startup.

    │ │ │ │ │ │ [report issue]
    │ │ │
    │ │ │

    find_torrent() get_torrents()

    │ │ │
    │ │ │ -std::vector<torrent_handle> get_torrents () const;
    │ │ │  torrent_handle find_torrent (sha1_hash const& info_hash) const;
    │ │ │ +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.

    │ │ │ │ │ │ [report issue]
    │ │ │
    │ │ │

    async_add_torrent() add_torrent()

    │ │ │
    │ │ │ -torrent_handle add_torrent (add_torrent_params&& params, error_code& ec);
    │ │ │ -void async_add_torrent (add_torrent_params const& params);
    │ │ │ -void async_add_torrent (add_torrent_params&& params);
    │ │ │ -torrent_handle add_torrent (add_torrent_params const& params);
    │ │ │  torrent_handle add_torrent (add_torrent_params&& params);
    │ │ │ +void async_add_torrent (add_torrent_params const& params);
    │ │ │  torrent_handle add_torrent (add_torrent_params const& params, error_code& ec);
    │ │ │ +torrent_handle add_torrent (add_torrent_params const& params);
    │ │ │ +torrent_handle add_torrent (add_torrent_params&& params, error_code& ec);
    │ │ │ +void async_add_torrent (add_torrent_params&& 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 │ │ │ @@ -567,22 +428,22 @@ │ │ │ torrent_flags::auto_managed. In order to add a magnet link that will │ │ │ just download the metadata, but no payload, set the │ │ │ torrent_flags::upload_mode flag.

    │ │ │

    Special consideration has to be taken when adding hybrid torrents │ │ │ (i.e. torrents that are BitTorrent v2 torrents that are backwards │ │ │ compatible with v1). For more details, see BitTorrent v2 torrents.

    │ │ │ │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    pause() resume() is_paused()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    pause() is_paused() resume()

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

    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.

    │ │ │ @@ -690,21 +551,21 @@ │ │ │ with the function object's context and make the function entirely │ │ │ self-contained. The only reason data blob's value is computed │ │ │ via a function instead of just passing in the new value is to avoid │ │ │ race conditions. If you want to update the value in the DHT, you │ │ │ must first retrieve it, then modify it, then write it back. The way │ │ │ the DHT works, it is natural to always do a lookup before storing and │ │ │ calling the callback in between is convenient.

    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    dht_get_peers() dht_announce()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    dht_announce() dht_get_peers()

    │ │ │
    │ │ │ -void dht_get_peers (sha1_hash const& info_hash);
    │ │ │  void dht_announce (sha1_hash const& info_hash, int port = 0, dht::announce_flags_t flags = {});
    │ │ │ +void dht_get_peers (sha1_hash const& info_hash);
    │ │ │  
    │ │ │

    dht_get_peers() will issue a DHT get_peer request to the DHT for the │ │ │ specified info-hash. The response (the peers) will be posted back in a │ │ │ dht_get_peers_reply_alert.

    │ │ │

    dht_announce() will issue a DHT announce request to the DHT to the │ │ │ specified info-hash, advertising the specified port. If the port is │ │ │ left at its default, 0, the port will be implied by the DHT message's │ │ │ @@ -812,37 +673,37 @@ │ │ │

    │ │ │  void set_port_filter (port_filter const& f);
    │ │ │  
    │ │ │

    apply port_filter f to incoming and outgoing peers. a port filter │ │ │ will reject making outgoing peer connections to certain remote ports. │ │ │ The main intention is to be able to avoid triggering certain │ │ │ anti-virus software by connecting to SMTP, FTP ports.

    │ │ │ - │ │ │ │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    is_listening() ssl_listen_port() listen_port()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    ssl_listen_port() listen_port() is_listening()

    │ │ │
    │ │ │ -unsigned short ssl_listen_port () const;
    │ │ │  bool is_listening () const;
    │ │ │ +unsigned short ssl_listen_port () const;
    │ │ │  unsigned short listen_port () const;
    │ │ │  
    │ │ │

    is_listening() will tell you whether or not the session has │ │ │ successfully opened a listening port. If it hasn't, this function will │ │ │ return false, and then you can set a new │ │ │ settings_pack::listen_interfaces to try another interface and port to │ │ │ bind to.

    │ │ │

    listen_port() returns the port we ended up listening on.

    │ │ │ │ │ │ [report issue]
    │ │ │
    │ │ │

    set_peer_class_filter() get_peer_class_filter()

    │ │ │
    │ │ │ -ip_filter get_peer_class_filter () const;
    │ │ │  void set_peer_class_filter (ip_filter const& f);
    │ │ │ +ip_filter get_peer_class_filter () const;
    │ │ │  
    │ │ │

    Sets the peer class filter for this session. All new peer connections │ │ │ will take this into account and be added to the peer classes specified │ │ │ by this filter, based on the peer's IP address.

    │ │ │

    The ip-filter essentially maps an IP -> uint32. Each bit in that 32 │ │ │ bit integer represents a peer class. The least significant bit │ │ │ represents class 0, the next bit class 1 and so on.

    │ │ │ @@ -862,18 +723,18 @@ │ │ │ 32 bits in the IP range mapping. Only the set bits matter; no peer │ │ │ class will be removed from a peer as a result of this call, peer │ │ │ classes are only added.

    │ │ │

    The peer_class argument cannot be greater than 31. The bitmasks │ │ │ representing peer classes in the peer_class_filter are 32 bits.

    │ │ │

    The get_peer_class_filter() function returns the current filter.

    │ │ │

    For more information, see peer classes.

    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    get_peer_class_type_filter() set_peer_class_type_filter()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    set_peer_class_type_filter() get_peer_class_type_filter()

    │ │ │
    │ │ │  void set_peer_class_type_filter (peer_class_type_filter const& f);
    │ │ │  peer_class_type_filter get_peer_class_type_filter () const;
    │ │ │  
    │ │ │

    Sets and gets the peer class type filter. This is controls automatic │ │ │ peer class assignments to peers based on what kind of socket it is.

    │ │ │

    It does not only support assigning peer classes, it also supports │ │ │ @@ -915,21 +776,21 @@ │ │ │ remove the peer class if it's still assigned to torrents or peers. It │ │ │ will however remove it once the last peer and torrent drops their │ │ │ references to it.

    │ │ │

    There is no need to call this function for custom peer classes. All │ │ │ peer classes will be properly destructed when the session object │ │ │ destructs.

    │ │ │

    For more information on peer classes, see peer classes.

    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    get_peer_class() set_peer_class()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    set_peer_class() get_peer_class()

    │ │ │
    │ │ │ -void set_peer_class (peer_class_t cid, peer_class_info const& pci);
    │ │ │  peer_class_info get_peer_class (peer_class_t cid) const;
    │ │ │ +void set_peer_class (peer_class_t cid, peer_class_info const& pci);
    │ │ │  
    │ │ │

    These functions queries information from a peer class and updates the │ │ │ configuration of a peer class, respectively.

    │ │ │

    cid must refer to an existing peer class. If it does not, the │ │ │ return value of get_peer_class() is undefined.

    │ │ │

    set_peer_class() sets all the information in the │ │ │ peer_class_info object in the specified peer class. There is no │ │ │ @@ -974,30 +835,30 @@ │ │ │ advised to remove them from the back of the queue, to minimize the │ │ │ shifting.

    │ │ │ │ │ │ [report issue]
    │ │ │
    │ │ │

    apply_settings() get_settings()

    │ │ │
    │ │ │ -settings_pack get_settings () const;
    │ │ │  void apply_settings (settings_pack&&);
    │ │ │  void apply_settings (settings_pack const&);
    │ │ │ +settings_pack get_settings () const;
    │ │ │  
    │ │ │

    Applies the settings specified by the settings_pack s. This is an │ │ │ asynchronous operation that will return immediately and actually apply │ │ │ the settings to the main thread of libtorrent some time later.

    │ │ │ + │ │ │ │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    set_alert_notify() wait_for_alert() pop_alerts()

    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    pop_alerts() set_alert_notify() wait_for_alert()

    │ │ │
    │ │ │ -alert* wait_for_alert (time_duration max_wait);
    │ │ │  void pop_alerts (std::vector<alert*>* alerts);
    │ │ │  void set_alert_notify (std::function<void()> const& fun);
    │ │ │ +alert* wait_for_alert (time_duration max_wait);
    │ │ │  
    │ │ │

    Alerts is the main mechanism for libtorrent to report errors and │ │ │ events. pop_alerts fills in the vector passed to it with pointers │ │ │ to new alerts. The session still owns these alerts and they will stay │ │ │ valid until the next time pop_alerts is called. You may not delete │ │ │ the alert objects.

    │ │ │

    It is safe to call pop_alerts from multiple different threads, as │ │ │ @@ -1048,16 +909,16 @@ │ │ │ alert::type() but can also be queries from a concrete type via │ │ │ T::alert_type, as a static constant.

    │ │ │ │ │ │ [report issue]
    │ │ │
    │ │ │

    delete_port_mapping() add_port_mapping()

    │ │ │
    │ │ │ -void delete_port_mapping (port_mapping_t handle);
    │ │ │  std::vector<port_mapping_t> add_port_mapping (portmap_protocol t, int external_port, int local_port);
    │ │ │ +void delete_port_mapping (port_mapping_t handle);
    │ │ │  
    │ │ │

    add_port_mapping adds one or more port forwards on UPnP and/or NAT-PMP, │ │ │ whichever is enabled. A mapping is created for each listen socket │ │ │ in the session. The return values are all handles referring to the │ │ │ port mappings that were just created. Pass them to delete_port_mapping() │ │ │ to remove them.

    │ │ │ [report issue]
    │ │ │ @@ -1123,29 +984,168 @@ │ │ │ [report issue]
    │ │ │
    reopen_map_ports
    │ │ │
    This option indicates if the ports are mapped using natpmp │ │ │ and upnp. If mapping was already made, they are deleted and added │ │ │ again. This only works if natpmp and/or upnp are configured to be │ │ │ enable.
    │ │ │
    │ │ │ - │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +
    │ │ │ +

    session_proxy

    │ │ │ +

    Declared in "libtorrent/session.hpp"

    │ │ │ +

    this is a holder for the internal session implementation object. Once the │ │ │ +session destruction is explicitly initiated, this holder is used to │ │ │ +synchronize the completion of the shutdown. The lifetime of this object │ │ │ +may outlive session, causing the session destructor to not block. The │ │ │ +session_proxy destructor will block however, until the underlying session │ │ │ +is done shutting down.

    │ │ │ +
    │ │ │ +struct session_proxy
    │ │ │ +{
    │ │ │ +   session_proxy ();
    │ │ │ +   session_proxy& operator= (session_proxy const&) &;
    │ │ │ +   session_proxy (session_proxy&&) noexcept;
    │ │ │ +   session_proxy& operator= (session_proxy&&) & noexcept;
    │ │ │ +   ~session_proxy ();
    │ │ │ +   session_proxy (session_proxy const&);
    │ │ │ +};
    │ │ │ +
    │ │ │ + │ │ │ + │ │ │ +[report issue]
    │ │ │ +

    session_proxy() operator=() ~session_proxy()

    │ │ │ +
    │ │ │ +session_proxy ();
    │ │ │ +session_proxy& operator= (session_proxy const&) &;
    │ │ │ +session_proxy (session_proxy&&) noexcept;
    │ │ │ +session_proxy& operator= (session_proxy&&) & noexcept;
    │ │ │ +~session_proxy ();
    │ │ │ +session_proxy (session_proxy const&);
    │ │ │ +
    │ │ │ +

    default constructor, does not refer to any session │ │ │ +implementation object.

    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +
    │ │ │ +

    session

    │ │ │ +

    Declared in "libtorrent/session.hpp"

    │ │ │ +

    The session holds all state that spans multiple torrents. Among other │ │ │ +things it runs the network loop and manages all torrents. 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.

    │ │ │ +

    You have some control over session configuration through the │ │ │ +session_handle::apply_settings() member function. To change one or more │ │ │ +configuration options, create a settings_pack. object and fill it with │ │ │ +the settings to be set and pass it in to session::apply_settings().

    │ │ │ +

    see apply_settings().

    │ │ │ +
    │ │ │ +struct session : session_handle
    │ │ │ +{
    │ │ │ +   session ();
    │ │ │ +   session (session_params&& params, session_flags_t flags);
    │ │ │ +   explicit session (session_params&& params);
    │ │ │ +   session (session_params const& params, session_flags_t flags);
    │ │ │ +   explicit session (session_params const& params);
    │ │ │ +   session (session_params const& params, io_context& ios, session_flags_t);
    │ │ │ +   session (session_params&& params, io_context& ios);
    │ │ │ +   session (session_params&& params, io_context& ios, session_flags_t);
    │ │ │ +   session (session_params const& params, io_context& ios);
    │ │ │ +   ~session ();
    │ │ │ +   session_proxy abort ();
    │ │ │ +};
    │ │ │ +
    │ │ │ +[report issue]
    │ │ │ +

    session()

    │ │ │ +
    │ │ │ +session ();
    │ │ │ +session (session_params&& params, session_flags_t flags);
    │ │ │ +explicit session (session_params&& params);
    │ │ │ +session (session_params const& params, session_flags_t flags);
    │ │ │ +explicit session (session_params const& params);
    │ │ │ +
    │ │ │ +

    Constructs the session objects which acts as the container of torrents. │ │ │ +In order to avoid a race condition between starting the session and │ │ │ +configuring it, you can pass in a session_params object. Its settings │ │ │ +will take effect before the session starts up.

    │ │ │ +

    The overloads taking flags can be used to start a session in │ │ │ +paused mode (by passing in session::paused). Note that │ │ │ +add_default_plugins do not have an affect on constructors that │ │ │ +take a session_params object. It already contains the plugins to use.

    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    session()

    │ │ │ +
    │ │ │ +session (session_params const& params, io_context& ios, session_flags_t);
    │ │ │ +session (session_params&& params, io_context& ios);
    │ │ │ +session (session_params&& params, io_context& ios, session_flags_t);
    │ │ │ +session (session_params const& params, io_context& ios);
    │ │ │ +
    │ │ │ +

    Overload of the constructor that takes an external io_context to run │ │ │ +the session object on. This is primarily useful for tests that may want │ │ │ +to run multiple sessions on a single io_context, or low resource │ │ │ +systems where additional threads are expensive and sharing an │ │ │ +io_context with other events is fine.

    │ │ │ +
    │ │ │ +

    Warning

    │ │ │ +

    The session object does not cleanly terminate with an external │ │ │ +io_context. The io_context::run() call must have returned │ │ │ +before it's safe to destruct the session. Which means you MUST │ │ │ +call session::abort() and save the session_proxy first, then │ │ │ +destruct the session object, then sync with the io_context, then │ │ │ +destruct the session_proxy object.

    │ │ │ +
    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    ~session()

    │ │ │ +
    │ │ │ +~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 apply_settings().

    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    abort()

    │ │ │ +
    │ │ │ +session_proxy abort ();
    │ │ │ +
    │ │ │ +

    In case you want to destruct the session asynchronously, 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:

    │ │ │ +
    │ │ │ +struct session_proxy {};
    │ │ │ +
    │ │ │ │ │ │ -[report issue]
    │ │ │ + │ │ │ +[report issue]
    │ │ │ │ │ │ -
    │ │ │ -

    write_session_params_buf() write_session_params() read_session_params()

    │ │ │ +
    │ │ │ +

    write_session_params() write_session_params_buf() read_session_params()

    │ │ │

    Declared in "libtorrent/session_params.hpp"

    │ │ │
    │ │ │ -session_params read_session_params (bdecode_node const& e
    │ │ │ -   , save_state_flags_t flags = save_state_flags_t::all());
    │ │ │ -entry write_session_params (session_params const& sp
    │ │ │ +session_params read_session_params (span<char const> buf
    │ │ │     , save_state_flags_t flags = save_state_flags_t::all());
    │ │ │  std::vector<char> write_session_params_buf (session_params const& sp
    │ │ │     , save_state_flags_t flags = save_state_flags_t::all());
    │ │ │ -session_params read_session_params (span<char const> buf
    │ │ │ +entry write_session_params (session_params const& sp
    │ │ │ +   , save_state_flags_t flags = save_state_flags_t::all());
    │ │ │ +session_params read_session_params (bdecode_node const& e
    │ │ │     , save_state_flags_t flags = save_state_flags_t::all());
    │ │ │  
    │ │ │

    These functions serialize and de-serialize a session_params object to and │ │ │ from bencoded form. The session_params object is used to initialize a new │ │ │ session using the state from a previous one (or by programmatically configure │ │ │ the session up-front). │ │ │ The flags parameter can be used to only save and load certain aspects of the │ │ │ ├── html2text {} │ │ │ │ @@ -2,69 +2,69 @@ │ │ │ │ _[_l_i_b_t_o_r_r_e_n_t_ _l_o_g_o_] │ │ │ │ VVeerrssiioonn:: 2.0.11 │ │ │ │ _h_o_m_e │ │ │ │ Table of contents │ │ │ │ * _s_e_s_s_i_o_n___p_a_r_a_m_s │ │ │ │ o _s_e_s_s_i_o_n___p_a_r_a_m_s_(_) │ │ │ │ o _s_e_s_s_i_o_n___p_a_r_a_m_s_(_) │ │ │ │ - * _s_e_s_s_i_o_n___p_r_o_x_y │ │ │ │ - o _~_s_e_s_s_i_o_n___p_r_o_x_y_(_)_ _o_p_e_r_a_t_o_r_=_(_)_ _s_e_s_s_i_o_n___p_r_o_x_y_(_) │ │ │ │ - * _s_e_s_s_i_o_n │ │ │ │ - o _s_e_s_s_i_o_n_(_) │ │ │ │ - o _s_e_s_s_i_o_n_(_) │ │ │ │ - o _~_s_e_s_s_i_o_n_(_) │ │ │ │ - o _a_b_o_r_t_(_) │ │ │ │ * _s_e_s_s_i_o_n___h_a_n_d_l_e │ │ │ │ o _i_s___v_a_l_i_d_(_) │ │ │ │ o _s_e_s_s_i_o_n___s_t_a_t_e_(_) │ │ │ │ o _g_e_t___t_o_r_r_e_n_t___s_t_a_t_u_s_(_)_ _r_e_f_r_e_s_h___t_o_r_r_e_n_t___s_t_a_t_u_s_(_) │ │ │ │ o _p_o_s_t___t_o_r_r_e_n_t___u_p_d_a_t_e_s_(_) │ │ │ │ o _p_o_s_t___s_e_s_s_i_o_n___s_t_a_t_s_(_) │ │ │ │ o _p_o_s_t___d_h_t___s_t_a_t_s_(_) │ │ │ │ o _s_e_t___d_h_t___s_t_a_t_e_(_) │ │ │ │ o _f_i_n_d___t_o_r_r_e_n_t_(_)_ _g_e_t___t_o_r_r_e_n_t_s_(_) │ │ │ │ o _a_s_y_n_c___a_d_d___t_o_r_r_e_n_t_(_)_ _a_d_d___t_o_r_r_e_n_t_(_) │ │ │ │ - o _p_a_u_s_e_(_)_ _r_e_s_u_m_e_(_)_ _i_s___p_a_u_s_e_d_(_) │ │ │ │ + o _p_a_u_s_e_(_)_ _i_s___p_a_u_s_e_d_(_)_ _r_e_s_u_m_e_(_) │ │ │ │ o _i_s___d_h_t___r_u_n_n_i_n_g_(_) │ │ │ │ o _s_e_t___d_h_t___s_t_o_r_a_g_e_(_) │ │ │ │ o _a_d_d___d_h_t___n_o_d_e_(_) │ │ │ │ o _d_h_t___g_e_t___i_t_e_m_(_) │ │ │ │ o _d_h_t___g_e_t___i_t_e_m_(_) │ │ │ │ o _d_h_t___p_u_t___i_t_e_m_(_) │ │ │ │ o _d_h_t___p_u_t___i_t_e_m_(_) │ │ │ │ - o _d_h_t___g_e_t___p_e_e_r_s_(_)_ _d_h_t___a_n_n_o_u_n_c_e_(_) │ │ │ │ + o _d_h_t___a_n_n_o_u_n_c_e_(_)_ _d_h_t___g_e_t___p_e_e_r_s_(_) │ │ │ │ o _d_h_t___l_i_v_e___n_o_d_e_s_(_) │ │ │ │ o _d_h_t___s_a_m_p_l_e___i_n_f_o_h_a_s_h_e_s_(_) │ │ │ │ o _d_h_t___d_i_r_e_c_t___r_e_q_u_e_s_t_(_) │ │ │ │ o _a_d_d___e_x_t_e_n_s_i_o_n_(_) │ │ │ │ o _s_e_t___i_p___f_i_l_t_e_r_(_)_ _g_e_t___i_p___f_i_l_t_e_r_(_) │ │ │ │ o _s_e_t___p_o_r_t___f_i_l_t_e_r_(_) │ │ │ │ - o _i_s___l_i_s_t_e_n_i_n_g_(_)_ _s_s_l___l_i_s_t_e_n___p_o_r_t_(_)_ _l_i_s_t_e_n___p_o_r_t_(_) │ │ │ │ + o _s_s_l___l_i_s_t_e_n___p_o_r_t_(_)_ _l_i_s_t_e_n___p_o_r_t_(_)_ _i_s___l_i_s_t_e_n_i_n_g_(_) │ │ │ │ o _s_e_t___p_e_e_r___c_l_a_s_s___f_i_l_t_e_r_(_)_ _g_e_t___p_e_e_r___c_l_a_s_s___f_i_l_t_e_r_(_) │ │ │ │ - o _g_e_t___p_e_e_r___c_l_a_s_s___t_y_p_e___f_i_l_t_e_r_(_)_ _s_e_t___p_e_e_r___c_l_a_s_s___t_y_p_e___f_i_l_t_e_r_(_) │ │ │ │ + o _s_e_t___p_e_e_r___c_l_a_s_s___t_y_p_e___f_i_l_t_e_r_(_)_ _g_e_t___p_e_e_r___c_l_a_s_s___t_y_p_e___f_i_l_t_e_r_(_) │ │ │ │ o _c_r_e_a_t_e___p_e_e_r___c_l_a_s_s_(_) │ │ │ │ o _d_e_l_e_t_e___p_e_e_r___c_l_a_s_s_(_) │ │ │ │ - o _g_e_t___p_e_e_r___c_l_a_s_s_(_)_ _s_e_t___p_e_e_r___c_l_a_s_s_(_) │ │ │ │ + o _s_e_t___p_e_e_r___c_l_a_s_s_(_)_ _g_e_t___p_e_e_r___c_l_a_s_s_(_) │ │ │ │ o _r_e_m_o_v_e___t_o_r_r_e_n_t_(_) │ │ │ │ o _a_p_p_l_y___s_e_t_t_i_n_g_s_(_)_ _g_e_t___s_e_t_t_i_n_g_s_(_) │ │ │ │ - o _s_e_t___a_l_e_r_t___n_o_t_i_f_y_(_)_ _w_a_i_t___f_o_r___a_l_e_r_t_(_)_ _p_o_p___a_l_e_r_t_s_(_) │ │ │ │ + o _p_o_p___a_l_e_r_t_s_(_)_ _s_e_t___a_l_e_r_t___n_o_t_i_f_y_(_)_ _w_a_i_t___f_o_r___a_l_e_r_t_(_) │ │ │ │ o _d_e_l_e_t_e___p_o_r_t___m_a_p_p_i_n_g_(_)_ _a_d_d___p_o_r_t___m_a_p_p_i_n_g_(_) │ │ │ │ o _r_e_o_p_e_n___n_e_t_w_o_r_k___s_o_c_k_e_t_s_(_) │ │ │ │ o _n_a_t_i_v_e___h_a_n_d_l_e_(_) │ │ │ │ - * _w_r_i_t_e___s_e_s_s_i_o_n___p_a_r_a_m_s___b_u_f_(_)_ _w_r_i_t_e___s_e_s_s_i_o_n___p_a_r_a_m_s_(_)_ _r_e_a_d___s_e_s_s_i_o_n___p_a_r_a_m_s_(_) │ │ │ │ + * _s_e_s_s_i_o_n___p_r_o_x_y │ │ │ │ + o _s_e_s_s_i_o_n___p_r_o_x_y_(_)_ _o_p_e_r_a_t_o_r_=_(_)_ _~_s_e_s_s_i_o_n___p_r_o_x_y_(_) │ │ │ │ + * _s_e_s_s_i_o_n │ │ │ │ + o _s_e_s_s_i_o_n_(_) │ │ │ │ + o _s_e_s_s_i_o_n_(_) │ │ │ │ + o _~_s_e_s_s_i_o_n_(_) │ │ │ │ + o _a_b_o_r_t_(_) │ │ │ │ + * _w_r_i_t_e___s_e_s_s_i_o_n___p_a_r_a_m_s_(_)_ _w_r_i_t_e___s_e_s_s_i_o_n___p_a_r_a_m_s___b_u_f_(_)_ _r_e_a_d___s_e_s_s_i_o_n___p_a_r_a_m_s_(_) │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ sseessssiioonn__ppaarraammss ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_e_s_s_i_o_n___p_a_r_a_m_s_._h_p_p" │ │ │ │ The _s_e_s_s_i_o_n___p_a_r_a_m_s is a parameters pack for configuring the _s_e_s_s_i_o_n before it's │ │ │ │ started. │ │ │ │ struct session_params │ │ │ │ { │ │ │ │ - sseessssiioonn__ppaarraammss (); │ │ │ │ - sseessssiioonn__ppaarraammss (settings_pack const& sp); │ │ │ │ sseessssiioonn__ppaarraammss (settings_pack&& sp); │ │ │ │ + sseessssiioonn__ppaarraammss (settings_pack const& sp); │ │ │ │ + sseessssiioonn__ppaarraammss (); │ │ │ │ sseessssiioonn__ppaarraammss (settings_pack&& sp │ │ │ │ , std::vector> exts); │ │ │ │ sseessssiioonn__ppaarraammss (settings_pack const& sp │ │ │ │ , std::vector> exts); │ │ │ │ │ │ │ │ settings_pack settings; │ │ │ │ std::vector> extensions; │ │ │ │ @@ -72,17 +72,17 @@ │ │ │ │ dht::dht_storage_constructor_type dht_storage_constructor; │ │ │ │ disk_io_constructor_type disk_io_constructor; │ │ │ │ std::map ext_state; │ │ │ │ libtorrent::ip_filter ip_filter; │ │ │ │ }; │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** sseessssiioonn__ppaarraammss(()) ********** │ │ │ │ -sseessssiioonn__ppaarraammss (); │ │ │ │ -sseessssiioonn__ppaarraammss (settings_pack const& sp); │ │ │ │ sseessssiioonn__ppaarraammss (settings_pack&& sp); │ │ │ │ +sseessssiioonn__ppaarraammss (settings_pack const& sp); │ │ │ │ +sseessssiioonn__ppaarraammss (); │ │ │ │ This constructor can be used to start with the default plugins (ut_metadata, │ │ │ │ ut_pex and smart_ban). Pass a _s_e_t_t_i_n_g_s___p_a_c_k to set the initial settings when │ │ │ │ the _s_e_s_s_i_o_n starts. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** sseessssiioonn__ppaarraammss(()) ********** │ │ │ │ sseessssiioonn__ppaarraammss (settings_pack&& sp │ │ │ │ , std::vector> exts); │ │ │ │ @@ -112,122 +112,14 @@ │ │ │ │ primarily here to make it convenient to save and restore state across │ │ │ │ sessions, using _r_e_a_d___s_e_s_s_i_o_n___p_a_r_a_m_s_(_) and _w_r_i_t_e___s_e_s_s_i_o_n___p_a_r_a_m_s_(_). │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ip_filter │ │ │ │ the IP filter to use for the _s_e_s_s_i_o_n. This restricts which peers are │ │ │ │ allowed to connect. As if passed to _s_e_t___i_p___f_i_l_t_e_r_(_). │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ sseessssiioonn__pprrooxxyy ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_e_s_s_i_o_n_._h_p_p" │ │ │ │ -this is a holder for the internal _s_e_s_s_i_o_n implementation object. Once the │ │ │ │ -_s_e_s_s_i_o_n destruction is explicitly initiated, this holder is used to synchronize │ │ │ │ -the completion of the shutdown. The lifetime of this object may outlive │ │ │ │ -_s_e_s_s_i_o_n, causing the _s_e_s_s_i_o_n destructor to not block. The _s_e_s_s_i_o_n___p_r_o_x_y │ │ │ │ -destructor will block however, until the underlying _s_e_s_s_i_o_n is done shutting │ │ │ │ -down. │ │ │ │ -struct session_proxy │ │ │ │ -{ │ │ │ │ - sseessssiioonn__pprrooxxyy (session_proxy const&); │ │ │ │ - session_proxy& ooppeerraattoorr== (session_proxy&&) & noexcept; │ │ │ │ - session_proxy& ooppeerraattoorr== (session_proxy const&) &; │ │ │ │ - sseessssiioonn__pprrooxxyy (session_proxy&&) noexcept; │ │ │ │ - ~~sseessssiioonn__pprrooxxyy (); │ │ │ │ - sseessssiioonn__pprrooxxyy (); │ │ │ │ -}; │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** ~~sseessssiioonn__pprrooxxyy(()) ooppeerraattoorr==(()) sseessssiioonn__pprrooxxyy(()) ********** │ │ │ │ -sseessssiioonn__pprrooxxyy (session_proxy const&); │ │ │ │ -session_proxy& ooppeerraattoorr== (session_proxy&&) & noexcept; │ │ │ │ -session_proxy& ooppeerraattoorr== (session_proxy const&) &; │ │ │ │ -sseessssiioonn__pprrooxxyy (session_proxy&&) noexcept; │ │ │ │ -~~sseessssiioonn__pprrooxxyy (); │ │ │ │ -sseessssiioonn__pprrooxxyy (); │ │ │ │ -default constructor, does not refer to any _s_e_s_s_i_o_n implementation object. │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ sseessssiioonn ************ │ │ │ │ -Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_e_s_s_i_o_n_._h_p_p" │ │ │ │ -The _s_e_s_s_i_o_n holds all state that spans multiple torrents. Among other things it │ │ │ │ -runs the network loop and manages all torrents. Once it's created, the _s_e_s_s_i_o_n │ │ │ │ -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. │ │ │ │ -You have some control over _s_e_s_s_i_o_n configuration through the session_handle:: │ │ │ │ -apply_settings() member function. To change one or more configuration options, │ │ │ │ -create a _s_e_t_t_i_n_g_s___p_a_c_k. object and fill it with the settings to be set and pass │ │ │ │ -it in to session::apply_settings(). │ │ │ │ -see _a_p_p_l_y___s_e_t_t_i_n_g_s_(_). │ │ │ │ -struct session : session_handle │ │ │ │ -{ │ │ │ │ - sseessssiioonn (session_params const& params, session_flags_t flags); │ │ │ │ - sseessssiioonn (session_params&& params, session_flags_t flags); │ │ │ │ - explicit sseessssiioonn (session_params&& params); │ │ │ │ - sseessssiioonn (); │ │ │ │ - explicit sseessssiioonn (session_params const& params); │ │ │ │ - sseessssiioonn (session_params&& params, io_context& ios); │ │ │ │ - sseessssiioonn (session_params const& params, io_context& ios, session_flags_t); │ │ │ │ - sseessssiioonn (session_params&& params, io_context& ios, session_flags_t); │ │ │ │ - sseessssiioonn (session_params const& params, io_context& ios); │ │ │ │ - ~~sseessssiioonn (); │ │ │ │ - session_proxy aabboorrtt (); │ │ │ │ -}; │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** sseessssiioonn(()) ********** │ │ │ │ -sseessssiioonn (session_params const& params, session_flags_t flags); │ │ │ │ -sseessssiioonn (session_params&& params, session_flags_t flags); │ │ │ │ -explicit sseessssiioonn (session_params&& params); │ │ │ │ -sseessssiioonn (); │ │ │ │ -explicit sseessssiioonn (session_params const& params); │ │ │ │ -Constructs the _s_e_s_s_i_o_n objects which acts as the container of torrents. In │ │ │ │ -order to avoid a race condition between starting the _s_e_s_s_i_o_n and configuring │ │ │ │ -it, you can pass in a _s_e_s_s_i_o_n___p_a_r_a_m_s object. Its settings will take effect │ │ │ │ -before the _s_e_s_s_i_o_n starts up. │ │ │ │ -The overloads taking flags can be used to start a _s_e_s_s_i_o_n in paused mode (by │ │ │ │ -passing in session::paused). Note that add_default_plugins do not have an │ │ │ │ -affect on constructors that take a _s_e_s_s_i_o_n___p_a_r_a_m_s object. It already contains │ │ │ │ -the plugins to use. │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** sseessssiioonn(()) ********** │ │ │ │ -sseessssiioonn (session_params&& params, io_context& ios); │ │ │ │ -sseessssiioonn (session_params const& params, io_context& ios, session_flags_t); │ │ │ │ -sseessssiioonn (session_params&& params, io_context& ios, session_flags_t); │ │ │ │ -sseessssiioonn (session_params const& params, io_context& ios); │ │ │ │ -Overload of the constructor that takes an external io_context to run the │ │ │ │ -_s_e_s_s_i_o_n object on. This is primarily useful for tests that may want to run │ │ │ │ -multiple sessions on a single io_context, or low resource systems where │ │ │ │ -additional threads are expensive and sharing an io_context with other events is │ │ │ │ -fine. │ │ │ │ -Warning │ │ │ │ -The _s_e_s_s_i_o_n object does not cleanly terminate with an external io_context. The │ │ │ │ -io_context::run() call mmuusstt have returned before it's safe to destruct the │ │ │ │ -_s_e_s_s_i_o_n. Which means you MMUUSSTT call _s_e_s_s_i_o_n_:_:_a_b_o_r_t_(_) and save the _s_e_s_s_i_o_n___p_r_o_x_y │ │ │ │ -first, then destruct the _s_e_s_s_i_o_n object, then sync with the io_context, then │ │ │ │ -destruct the _s_e_s_s_i_o_n___p_r_o_x_y object. │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** ~~sseessssiioonn(()) ********** │ │ │ │ -~~sseessssiioonn (); │ │ │ │ -The destructor of _s_e_s_s_i_o_n 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 _s_e_s_s_i_o_n returns. So, it's advised that any kind of interface │ │ │ │ -(such as windows) are closed before destructing the _s_e_s_s_i_o_n object. Because it │ │ │ │ -can take a few second for it to finish. The timeout can be set with │ │ │ │ -_a_p_p_l_y___s_e_t_t_i_n_g_s_(_). │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** aabboorrtt(()) ********** │ │ │ │ -session_proxy aabboorrtt (); │ │ │ │ -In case you want to destruct the _s_e_s_s_i_o_n asynchronously, you can request a │ │ │ │ -_s_e_s_s_i_o_n destruction proxy. If you don't do this, the destructor of the _s_e_s_s_i_o_n │ │ │ │ -object will block while the trackers are contacted. If you keep one │ │ │ │ -session_proxy to the _s_e_s_s_i_o_n when destructing it, the destructor will not │ │ │ │ -block, but start to close down the _s_e_s_s_i_o_n, the destructor of the proxy will │ │ │ │ -then synchronize the threads. So, the destruction of the _s_e_s_s_i_o_n 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 _s_e_s_s_i_o_n is being │ │ │ │ -closed down, no operations are allowed on it). The only valid operation is │ │ │ │ -calling the destructor: │ │ │ │ -struct session_proxy {}; │ │ │ │ -[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ************ sseessssiioonn__hhaannddllee ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_e_s_s_i_o_n___h_a_n_d_l_e_._h_p_p" │ │ │ │ this class provides a non-owning handle to a _s_e_s_s_i_o_n and a subset of the │ │ │ │ interface of the _s_e_s_s_i_o_n class. If the underlying _s_e_s_s_i_o_n is destructed any │ │ │ │ handle to it will no longer be valid. _i_s___v_a_l_i_d_(_) will return false and any │ │ │ │ operation on it will throw a system_error exception, with error code │ │ │ │ invalid_session_handle. │ │ │ │ @@ -242,72 +134,72 @@ │ │ │ │ void rreeffrreesshh__ttoorrrreenntt__ssttaattuuss (std::vector* ret │ │ │ │ , status_flags_t flags = {}) const; │ │ │ │ void ppoosstt__ttoorrrreenntt__uuppddaatteess (status_flags_t flags = status_flags_t::all()); │ │ │ │ void ppoosstt__sseessssiioonn__ssttaattss (); │ │ │ │ void ppoosstt__ddhhtt__ssttaattss (); │ │ │ │ void sseett__ddhhtt__ssttaattee (dht::dht_state&& st); │ │ │ │ void sseett__ddhhtt__ssttaattee (dht::dht_state const& st); │ │ │ │ - std::vector ggeett__ttoorrrreennttss () const; │ │ │ │ torrent_handle ffiinndd__ttoorrrreenntt (sha1_hash const& info_hash) const; │ │ │ │ - torrent_handle aadddd__ttoorrrreenntt (add_torrent_params&& params, error_code& ec); │ │ │ │ - void aassyynncc__aadddd__ttoorrrreenntt (add_torrent_params const& params); │ │ │ │ - void aassyynncc__aadddd__ttoorrrreenntt (add_torrent_params&& params); │ │ │ │ - torrent_handle aadddd__ttoorrrreenntt (add_torrent_params const& params); │ │ │ │ + std::vector ggeett__ttoorrrreennttss () const; │ │ │ │ torrent_handle aadddd__ttoorrrreenntt (add_torrent_params&& params); │ │ │ │ + void aassyynncc__aadddd__ttoorrrreenntt (add_torrent_params const& params); │ │ │ │ torrent_handle aadddd__ttoorrrreenntt (add_torrent_params const& params, error_code& │ │ │ │ ec); │ │ │ │ - void ppaauussee (); │ │ │ │ - bool iiss__ppaauusseedd () const; │ │ │ │ + torrent_handle aadddd__ttoorrrreenntt (add_torrent_params const& params); │ │ │ │ + torrent_handle aadddd__ttoorrrreenntt (add_torrent_params&& params, error_code& ec); │ │ │ │ + void aassyynncc__aadddd__ttoorrrreenntt (add_torrent_params&& params); │ │ │ │ void rreessuummee (); │ │ │ │ + bool iiss__ppaauusseedd () const; │ │ │ │ + void ppaauussee (); │ │ │ │ bool iiss__ddhhtt__rruunnnniinngg () const; │ │ │ │ void sseett__ddhhtt__ssttoorraaggee (dht::dht_storage_constructor_type sc); │ │ │ │ void aadddd__ddhhtt__nnooddee (std::pair const& node); │ │ │ │ void ddhhtt__ggeett__iitteemm (sha1_hash const& target); │ │ │ │ void ddhhtt__ggeett__iitteemm (std::array key │ │ │ │ , std::string salt = std::string()); │ │ │ │ sha1_hash ddhhtt__ppuutt__iitteemm (entry data); │ │ │ │ void ddhhtt__ppuutt__iitteemm (std::array key │ │ │ │ , std::function& │ │ │ │ , std::int64_t&, std::string const&)> cb │ │ │ │ , std::string salt = std::string()); │ │ │ │ - void ddhhtt__ggeett__ppeeeerrss (sha1_hash const& info_hash); │ │ │ │ void ddhhtt__aannnnoouunnccee (sha1_hash const& info_hash, int port = 0, dht:: │ │ │ │ announce_flags_t flags = {}); │ │ │ │ + void ddhhtt__ggeett__ppeeeerrss (sha1_hash const& info_hash); │ │ │ │ void ddhhtt__lliivvee__nnooddeess (sha1_hash const& nid); │ │ │ │ void ddhhtt__ssaammppllee__iinnffoohhaasshheess (udp::endpoint const& ep, sha1_hash const& │ │ │ │ target); │ │ │ │ void ddhhtt__ddiirreecctt__rreeqquueesstt (udp::endpoint const& ep, entry const& e, │ │ │ │ client_data_t userdata = {}); │ │ │ │ void aadddd__eexxtteennssiioonn (std::shared_ptr ext); │ │ │ │ void aadddd__eexxtteennssiioonn (std::function( │ │ │ │ torrent_handle const&, client_data_t)> ext); │ │ │ │ ip_filter ggeett__iipp__ffiilltteerr () const; │ │ │ │ void sseett__iipp__ffiilltteerr (ip_filter f); │ │ │ │ void sseett__ppoorrtt__ffiilltteerr (port_filter const& f); │ │ │ │ - unsigned short ssssll__lliisstteenn__ppoorrtt () const; │ │ │ │ bool iiss__lliisstteenniinngg () const; │ │ │ │ + unsigned short ssssll__lliisstteenn__ppoorrtt () const; │ │ │ │ unsigned short lliisstteenn__ppoorrtt () const; │ │ │ │ - ip_filter ggeett__ppeeeerr__ccllaassss__ffiilltteerr () const; │ │ │ │ void sseett__ppeeeerr__ccllaassss__ffiilltteerr (ip_filter const& f); │ │ │ │ + ip_filter ggeett__ppeeeerr__ccllaassss__ffiilltteerr () const; │ │ │ │ void sseett__ppeeeerr__ccllaassss__ttyyppee__ffiilltteerr (peer_class_type_filter const& f); │ │ │ │ peer_class_type_filter ggeett__ppeeeerr__ccllaassss__ttyyppee__ffiilltteerr () const; │ │ │ │ peer_class_t ccrreeaattee__ppeeeerr__ccllaassss (char const* name); │ │ │ │ void ddeelleettee__ppeeeerr__ccllaassss (peer_class_t cid); │ │ │ │ - void sseett__ppeeeerr__ccllaassss (peer_class_t cid, peer_class_info const& pci); │ │ │ │ peer_class_info ggeett__ppeeeerr__ccllaassss (peer_class_t cid) const; │ │ │ │ + void sseett__ppeeeerr__ccllaassss (peer_class_t cid, peer_class_info const& pci); │ │ │ │ void rreemmoovvee__ttoorrrreenntt (const torrent_handle&, remove_flags_t = {}); │ │ │ │ - settings_pack ggeett__sseettttiinnggss () const; │ │ │ │ void aappppllyy__sseettttiinnggss (settings_pack&&); │ │ │ │ void aappppllyy__sseettttiinnggss (settings_pack const&); │ │ │ │ - alert* wwaaiitt__ffoorr__aalleerrtt (time_duration max_wait); │ │ │ │ + settings_pack ggeett__sseettttiinnggss () const; │ │ │ │ void ppoopp__aalleerrttss (std::vector* alerts); │ │ │ │ void sseett__aalleerrtt__nnoottiiffyy (std::function const& fun); │ │ │ │ - void ddeelleettee__ppoorrtt__mmaappppiinngg (port_mapping_t handle); │ │ │ │ + alert* wwaaiitt__ffoorr__aalleerrtt (time_duration max_wait); │ │ │ │ std::vector aadddd__ppoorrtt__mmaappppiinngg (portmap_protocol t, int │ │ │ │ external_port, int local_port); │ │ │ │ + void ddeelleettee__ppoorrtt__mmaappppiinngg (port_mapping_t handle); │ │ │ │ void rreeooppeenn__nneettwwoorrkk__ssoocckkeettss (reopen_network_flags_t options = │ │ │ │ reopen_map_ports); │ │ │ │ std::shared_ptr nnaattiivvee__hhaannddllee () const; │ │ │ │ │ │ │ │ static constexpr save_state_flags_t ssaavvee__sseettttiinnggss = 0_bit; │ │ │ │ static constexpr save_state_flags_t ssaavvee__ddhhtt__ssttaattee = 2_bit; │ │ │ │ static constexpr save_state_flags_t ssaavvee__eexxtteennssiioonn__ssttaattee = 11_bit; │ │ │ │ @@ -398,30 +290,30 @@ │ │ │ │ void sseett__ddhhtt__ssttaattee (dht::dht_state&& st); │ │ │ │ void sseett__ddhhtt__ssttaattee (dht::dht_state const& st); │ │ │ │ set the DHT state for the _s_e_s_s_i_o_n. This will be taken into account the next │ │ │ │ time the DHT is started, as if it had been passed in via the _s_e_s_s_i_o_n___p_a_r_a_m_s on │ │ │ │ startup. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** ffiinndd__ttoorrrreenntt(()) ggeett__ttoorrrreennttss(()) ********** │ │ │ │ -std::vector ggeett__ttoorrrreennttss () const; │ │ │ │ torrent_handle ffiinndd__ttoorrrreenntt (sha1_hash const& info_hash) const; │ │ │ │ +std::vector ggeett__ttoorrrreennttss () const; │ │ │ │ find_torrent() looks for a torrent with the given info-hash. In case there is │ │ │ │ such a torrent in the _s_e_s_s_i_o_n, a _t_o_r_r_e_n_t___h_a_n_d_l_e to that torrent is returned. In │ │ │ │ case the torrent cannot be found, an invalid _t_o_r_r_e_n_t___h_a_n_d_l_e 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 _s_e_s_s_i_o_n. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** aassyynncc__aadddd__ttoorrrreenntt(()) aadddd__ttoorrrreenntt(()) ********** │ │ │ │ -torrent_handle aadddd__ttoorrrreenntt (add_torrent_params&& params, error_code& ec); │ │ │ │ -void aassyynncc__aadddd__ttoorrrreenntt (add_torrent_params const& params); │ │ │ │ -void aassyynncc__aadddd__ttoorrrreenntt (add_torrent_params&& params); │ │ │ │ -torrent_handle aadddd__ttoorrrreenntt (add_torrent_params const& params); │ │ │ │ torrent_handle aadddd__ttoorrrreenntt (add_torrent_params&& params); │ │ │ │ +void aassyynncc__aadddd__ttoorrrreenntt (add_torrent_params const& params); │ │ │ │ torrent_handle aadddd__ttoorrrreenntt (add_torrent_params const& params, error_code& ec); │ │ │ │ +torrent_handle aadddd__ttoorrrreenntt (add_torrent_params const& params); │ │ │ │ +torrent_handle aadddd__ttoorrrreenntt (add_torrent_params&& params, error_code& ec); │ │ │ │ +void aassyynncc__aadddd__ttoorrrreenntt (add_torrent_params&& params); │ │ │ │ You add torrents through the _a_d_d___t_o_r_r_e_n_t_(_) function where you give an object │ │ │ │ with all the parameters. The _a_d_d___t_o_r_r_e_n_t_(_) overloads will block until the │ │ │ │ torrent has been added (or failed to be added) and returns an error code and a │ │ │ │ _t_o_r_r_e_n_t___h_a_n_d_l_e. In order to add torrents more efficiently, consider using │ │ │ │ _a_s_y_n_c___a_d_d___t_o_r_r_e_n_t_(_) which returns immediately, without waiting for the torrent │ │ │ │ to add. Notification of the torrent being added is sent as _a_d_d___t_o_r_r_e_n_t___a_l_e_r_t. │ │ │ │ The save_path field in _a_d_d___t_o_r_r_e_n_t___p_a_r_a_m_s must be set to a valid path where the │ │ │ │ @@ -442,18 +334,18 @@ │ │ │ │ torrent_flags::paused and torrent_flags::auto_managed. In order to add a magnet │ │ │ │ link that will just download the metadata, but no payload, set the │ │ │ │ torrent_flags::upload_mode flag. │ │ │ │ Special consideration has to be taken when adding hybrid torrents (i.e. │ │ │ │ torrents that are BitTorrent v2 torrents that are backwards compatible with │ │ │ │ v1). For more details, see _B_i_t_T_o_r_r_e_n_t_ _v_2_ _t_o_r_r_e_n_t_s. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** ppaauussee(()) rreessuummee(()) iiss__ppaauusseedd(()) ********** │ │ │ │ -void ppaauussee (); │ │ │ │ -bool iiss__ppaauusseedd () const; │ │ │ │ +********** ppaauussee(()) iiss__ppaauusseedd(()) rreessuummee(()) ********** │ │ │ │ void rreessuummee (); │ │ │ │ +bool iiss__ppaauusseedd () const; │ │ │ │ +void ppaauussee (); │ │ │ │ Pausing the _s_e_s_s_i_o_n 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 _s_e_s_s_i_o_n pause │ │ │ │ state is separate from the torrent pause state. A torrent is inactive if it is │ │ │ │ paused or if the _s_e_s_s_i_o_n is paused. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** iiss__ddhhtt__rruunnnniinngg(()) ********** │ │ │ │ @@ -529,18 +421,18 @@ │ │ │ │ and make the function entirely self-contained. The only reason data blob's │ │ │ │ value is computed via a function instead of just passing in the new value is to │ │ │ │ avoid race conditions. If you want to uuppddaattee the value in the DHT, you must │ │ │ │ first retrieve it, then modify it, then write it back. The way the DHT works, │ │ │ │ it is natural to always do a lookup before storing and calling the callback in │ │ │ │ between is convenient. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** ddhhtt__ggeett__ppeeeerrss(()) ddhhtt__aannnnoouunnccee(()) ********** │ │ │ │ -void ddhhtt__ggeett__ppeeeerrss (sha1_hash const& info_hash); │ │ │ │ +********** ddhhtt__aannnnoouunnccee(()) ddhhtt__ggeett__ppeeeerrss(()) ********** │ │ │ │ void ddhhtt__aannnnoouunnccee (sha1_hash const& info_hash, int port = 0, dht:: │ │ │ │ announce_flags_t flags = {}); │ │ │ │ +void ddhhtt__ggeett__ppeeeerrss (sha1_hash const& info_hash); │ │ │ │ dht_get_peers() will issue a DHT get_peer request to the DHT for the specified │ │ │ │ info-hash. The response (the peers) will be posted back in a │ │ │ │ _d_h_t___g_e_t___p_e_e_r_s___r_e_p_l_y___a_l_e_r_t. │ │ │ │ dht_announce() will issue a DHT announce request to the DHT to the specified │ │ │ │ info-hash, advertising the specified port. If the port is left at its default, │ │ │ │ 0, the port will be implied by the DHT message's source port (which may improve │ │ │ │ connectivity through a NAT). dht_announce() is not affected by the │ │ │ │ @@ -615,27 +507,27 @@ │ │ │ │ ********** sseett__ppoorrtt__ffiilltteerr(()) ********** │ │ │ │ void sseett__ppoorrtt__ffiilltteerr (port_filter const& f); │ │ │ │ apply _p_o_r_t___f_i_l_t_e_r f to incoming and outgoing peers. a port filter will reject │ │ │ │ making outgoing peer connections to certain remote ports. The main intention is │ │ │ │ to be able to avoid triggering certain anti-virus software by connecting to │ │ │ │ SMTP, FTP ports. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** iiss__lliisstteenniinngg(()) ssssll__lliisstteenn__ppoorrtt(()) lliisstteenn__ppoorrtt(()) ********** │ │ │ │ -unsigned short ssssll__lliisstteenn__ppoorrtt () const; │ │ │ │ +********** ssssll__lliisstteenn__ppoorrtt(()) lliisstteenn__ppoorrtt(()) iiss__lliisstteenniinngg(()) ********** │ │ │ │ bool iiss__lliisstteenniinngg () const; │ │ │ │ +unsigned short ssssll__lliisstteenn__ppoorrtt () const; │ │ │ │ unsigned short lliisstteenn__ppoorrtt () const; │ │ │ │ is_listening() will tell you whether or not the _s_e_s_s_i_o_n has successfully opened │ │ │ │ a listening port. If it hasn't, this function will return false, and then you │ │ │ │ can set a new _s_e_t_t_i_n_g_s___p_a_c_k_:_:_l_i_s_t_e_n___i_n_t_e_r_f_a_c_e_s to try another interface and │ │ │ │ port to bind to. │ │ │ │ listen_port() returns the port we ended up listening on. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** sseett__ppeeeerr__ccllaassss__ffiilltteerr(()) ggeett__ppeeeerr__ccllaassss__ffiilltteerr(()) ********** │ │ │ │ -ip_filter ggeett__ppeeeerr__ccllaassss__ffiilltteerr () const; │ │ │ │ void sseett__ppeeeerr__ccllaassss__ffiilltteerr (ip_filter const& f); │ │ │ │ +ip_filter ggeett__ppeeeerr__ccllaassss__ffiilltteerr () const; │ │ │ │ Sets the peer class filter for this _s_e_s_s_i_o_n. All new peer connections will take │ │ │ │ this into account and be added to the peer classes specified by this filter, │ │ │ │ based on the peer's IP address. │ │ │ │ The ip-filter essentially maps an IP -> uint32. Each bit in that 32 bit integer │ │ │ │ represents a peer class. The least significant bit represents class 0, the next │ │ │ │ bit class 1 and so on. │ │ │ │ For more info, see _i_p___f_i_l_t_e_r. │ │ │ │ @@ -652,15 +544,15 @@ │ │ │ │ in the IP range mapping. Only the set bits matter; no peer class will be │ │ │ │ removed from a peer as a result of this call, peer classes are only added. │ │ │ │ The peer_class argument cannot be greater than 31. The bitmasks representing │ │ │ │ peer classes in the peer_class_filter are 32 bits. │ │ │ │ The get_peer_class_filter() function returns the current filter. │ │ │ │ For more information, see _p_e_e_r_ _c_l_a_s_s_e_s. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** ggeett__ppeeeerr__ccllaassss__ttyyppee__ffiilltteerr(()) sseett__ppeeeerr__ccllaassss__ttyyppee__ffiilltteerr(()) ********** │ │ │ │ +********** sseett__ppeeeerr__ccllaassss__ttyyppee__ffiilltteerr(()) ggeett__ppeeeerr__ccllaassss__ttyyppee__ffiilltteerr(()) ********** │ │ │ │ void sseett__ppeeeerr__ccllaassss__ttyyppee__ffiilltteerr (peer_class_type_filter const& f); │ │ │ │ peer_class_type_filter ggeett__ppeeeerr__ccllaassss__ttyyppee__ffiilltteerr () const; │ │ │ │ Sets and gets the ppeeeerr ccllaassss ttyyppee ffiilltteerr. This is controls automatic peer class │ │ │ │ assignments to peers based on what kind of socket it is. │ │ │ │ It does not only support assigning peer classes, it also supports removing peer │ │ │ │ classes based on socket type. │ │ │ │ The order of these rules being applied are: │ │ │ │ @@ -690,17 +582,17 @@ │ │ │ │ Since peer classes are reference counted, this function will not remove the │ │ │ │ peer class if it's still assigned to torrents or peers. It will however remove │ │ │ │ it once the last peer and torrent drops their references to it. │ │ │ │ There is no need to call this function for custom peer classes. All peer │ │ │ │ classes will be properly destructed when the _s_e_s_s_i_o_n object destructs. │ │ │ │ For more information on peer classes, see _p_e_e_r_ _c_l_a_s_s_e_s. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** ggeett__ppeeeerr__ccllaassss(()) sseett__ppeeeerr__ccllaassss(()) ********** │ │ │ │ -void sseett__ppeeeerr__ccllaassss (peer_class_t cid, peer_class_info const& pci); │ │ │ │ +********** sseett__ppeeeerr__ccllaassss(()) ggeett__ppeeeerr__ccllaassss(()) ********** │ │ │ │ peer_class_info ggeett__ppeeeerr__ccllaassss (peer_class_t cid) const; │ │ │ │ +void sseett__ppeeeerr__ccllaassss (peer_class_t cid, peer_class_info const& pci); │ │ │ │ These functions queries information from a peer class and updates the │ │ │ │ configuration of a peer class, respectively. │ │ │ │ cid must refer to an existing peer class. If it does not, the return value of │ │ │ │ get_peer_class() is undefined. │ │ │ │ set_peer_class() sets all the information in the _p_e_e_r___c_l_a_s_s___i_n_f_o object in the │ │ │ │ specified peer class. There is no option to only update a single property. │ │ │ │ A peer or torrent belonging to more than one class, the highest priority among │ │ │ │ @@ -731,25 +623,25 @@ │ │ │ │ Note that when a queued or downloading torrent is removed, its position in the │ │ │ │ download queue is vacated and every subsequent torrent in the queue has their │ │ │ │ queue positions updated. This can potentially cause a large state_update to be │ │ │ │ posted. When removing all torrents, it is advised to remove them from the back │ │ │ │ of the queue, to minimize the shifting. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** aappppllyy__sseettttiinnggss(()) ggeett__sseettttiinnggss(()) ********** │ │ │ │ -settings_pack ggeett__sseettttiinnggss () const; │ │ │ │ void aappppllyy__sseettttiinnggss (settings_pack&&); │ │ │ │ void aappppllyy__sseettttiinnggss (settings_pack const&); │ │ │ │ +settings_pack ggeett__sseettttiinnggss () const; │ │ │ │ Applies the settings specified by the _s_e_t_t_i_n_g_s___p_a_c_k s. This is an asynchronous │ │ │ │ operation that will return immediately and actually apply the settings to the │ │ │ │ main thread of libtorrent some time later. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -********** sseett__aalleerrtt__nnoottiiffyy(()) wwaaiitt__ffoorr__aalleerrtt(()) ppoopp__aalleerrttss(()) ********** │ │ │ │ -alert* wwaaiitt__ffoorr__aalleerrtt (time_duration max_wait); │ │ │ │ +********** ppoopp__aalleerrttss(()) sseett__aalleerrtt__nnoottiiffyy(()) wwaaiitt__ffoorr__aalleerrtt(()) ********** │ │ │ │ void ppoopp__aalleerrttss (std::vector* alerts); │ │ │ │ void sseett__aalleerrtt__nnoottiiffyy (std::function const& fun); │ │ │ │ +alert* wwaaiitt__ffoorr__aalleerrtt (time_duration max_wait); │ │ │ │ Alerts is the main mechanism for libtorrent to report errors and events. │ │ │ │ pop_alerts fills in the vector passed to it with pointers to new alerts. The │ │ │ │ _s_e_s_s_i_o_n still owns these alerts and they will stay valid until the next time │ │ │ │ pop_alerts is called. You may not delete the _a_l_e_r_t objects. │ │ │ │ It is safe to call pop_alerts from multiple different threads, as long as the │ │ │ │ alerts themselves are not accessed once another thread calls pop_alerts. Doing │ │ │ │ this requires manual synchronization between the popping threads. │ │ │ │ @@ -789,17 +681,17 @@ │ │ │ │ block. It should not perform any expensive work. It really should just notify │ │ │ │ the main application thread. │ │ │ │ The type of an _a_l_e_r_t is returned by the polymorphic function alert::type() but │ │ │ │ can also be queries from a concrete type via T::alert_type, as a static │ │ │ │ constant. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** ddeelleettee__ppoorrtt__mmaappppiinngg(()) aadddd__ppoorrtt__mmaappppiinngg(()) ********** │ │ │ │ -void ddeelleettee__ppoorrtt__mmaappppiinngg (port_mapping_t handle); │ │ │ │ std::vector aadddd__ppoorrtt__mmaappppiinngg (portmap_protocol t, int │ │ │ │ external_port, int local_port); │ │ │ │ +void ddeelleettee__ppoorrtt__mmaappppiinngg (port_mapping_t handle); │ │ │ │ add_port_mapping adds one or more port forwards on UPnP and/or NAT-PMP, │ │ │ │ whichever is enabled. A mapping is created for each listen socket in the │ │ │ │ _s_e_s_s_i_o_n. The return values are all handles referring to the port mappings that │ │ │ │ were just created. Pass them to _d_e_l_e_t_e___p_o_r_t___m_a_p_p_i_n_g_(_) to remove them. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ ********** rreeooppeenn__nneettwwoorrkk__ssoocckkeettss(()) ********** │ │ │ │ void rreeooppeenn__nneettwwoorrkk__ssoocckkeettss (reopen_network_flags_t options = │ │ │ │ @@ -845,24 +737,132 @@ │ │ │ │ protocols used by _a_d_d___p_o_r_t___m_a_p_p_i_n_g_(_) │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ reopen_map_ports │ │ │ │ This option indicates if the ports are mapped using natpmp and upnp. If │ │ │ │ mapping was already made, they are deleted and added again. This only │ │ │ │ works if natpmp and/or upnp are configured to be enable. │ │ │ │ [_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ -************ wwrriittee__sseessssiioonn__ppaarraammss__bbuuff(()) wwrriittee__sseessssiioonn__ppaarraammss(()) rreeaadd__sseessssiioonn__ppaarraammss(()) │ │ │ │ +************ sseessssiioonn__pprrooxxyy ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_e_s_s_i_o_n_._h_p_p" │ │ │ │ +this is a holder for the internal _s_e_s_s_i_o_n implementation object. Once the │ │ │ │ +_s_e_s_s_i_o_n destruction is explicitly initiated, this holder is used to synchronize │ │ │ │ +the completion of the shutdown. The lifetime of this object may outlive │ │ │ │ +_s_e_s_s_i_o_n, causing the _s_e_s_s_i_o_n destructor to not block. The _s_e_s_s_i_o_n___p_r_o_x_y │ │ │ │ +destructor will block however, until the underlying _s_e_s_s_i_o_n is done shutting │ │ │ │ +down. │ │ │ │ +struct session_proxy │ │ │ │ +{ │ │ │ │ + sseessssiioonn__pprrooxxyy (); │ │ │ │ + session_proxy& ooppeerraattoorr== (session_proxy const&) &; │ │ │ │ + sseessssiioonn__pprrooxxyy (session_proxy&&) noexcept; │ │ │ │ + session_proxy& ooppeerraattoorr== (session_proxy&&) & noexcept; │ │ │ │ + ~~sseessssiioonn__pprrooxxyy (); │ │ │ │ + sseessssiioonn__pprrooxxyy (session_proxy const&); │ │ │ │ +}; │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +********** sseessssiioonn__pprrooxxyy(()) ooppeerraattoorr==(()) ~~sseessssiioonn__pprrooxxyy(()) ********** │ │ │ │ +sseessssiioonn__pprrooxxyy (); │ │ │ │ +session_proxy& ooppeerraattoorr== (session_proxy const&) &; │ │ │ │ +sseessssiioonn__pprrooxxyy (session_proxy&&) noexcept; │ │ │ │ +session_proxy& ooppeerraattoorr== (session_proxy&&) & noexcept; │ │ │ │ +~~sseessssiioonn__pprrooxxyy (); │ │ │ │ +sseessssiioonn__pprrooxxyy (session_proxy const&); │ │ │ │ +default constructor, does not refer to any _s_e_s_s_i_o_n implementation object. │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ sseessssiioonn ************ │ │ │ │ +Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_e_s_s_i_o_n_._h_p_p" │ │ │ │ +The _s_e_s_s_i_o_n holds all state that spans multiple torrents. Among other things it │ │ │ │ +runs the network loop and manages all torrents. Once it's created, the _s_e_s_s_i_o_n │ │ │ │ +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. │ │ │ │ +You have some control over _s_e_s_s_i_o_n configuration through the session_handle:: │ │ │ │ +apply_settings() member function. To change one or more configuration options, │ │ │ │ +create a _s_e_t_t_i_n_g_s___p_a_c_k. object and fill it with the settings to be set and pass │ │ │ │ +it in to session::apply_settings(). │ │ │ │ +see _a_p_p_l_y___s_e_t_t_i_n_g_s_(_). │ │ │ │ +struct session : session_handle │ │ │ │ +{ │ │ │ │ + sseessssiioonn (); │ │ │ │ + sseessssiioonn (session_params&& params, session_flags_t flags); │ │ │ │ + explicit sseessssiioonn (session_params&& params); │ │ │ │ + sseessssiioonn (session_params const& params, session_flags_t flags); │ │ │ │ + explicit sseessssiioonn (session_params const& params); │ │ │ │ + sseessssiioonn (session_params const& params, io_context& ios, session_flags_t); │ │ │ │ + sseessssiioonn (session_params&& params, io_context& ios); │ │ │ │ + sseessssiioonn (session_params&& params, io_context& ios, session_flags_t); │ │ │ │ + sseessssiioonn (session_params const& params, io_context& ios); │ │ │ │ + ~~sseessssiioonn (); │ │ │ │ + session_proxy aabboorrtt (); │ │ │ │ +}; │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +********** sseessssiioonn(()) ********** │ │ │ │ +sseessssiioonn (); │ │ │ │ +sseessssiioonn (session_params&& params, session_flags_t flags); │ │ │ │ +explicit sseessssiioonn (session_params&& params); │ │ │ │ +sseessssiioonn (session_params const& params, session_flags_t flags); │ │ │ │ +explicit sseessssiioonn (session_params const& params); │ │ │ │ +Constructs the _s_e_s_s_i_o_n objects which acts as the container of torrents. In │ │ │ │ +order to avoid a race condition between starting the _s_e_s_s_i_o_n and configuring │ │ │ │ +it, you can pass in a _s_e_s_s_i_o_n___p_a_r_a_m_s object. Its settings will take effect │ │ │ │ +before the _s_e_s_s_i_o_n starts up. │ │ │ │ +The overloads taking flags can be used to start a _s_e_s_s_i_o_n in paused mode (by │ │ │ │ +passing in session::paused). Note that add_default_plugins do not have an │ │ │ │ +affect on constructors that take a _s_e_s_s_i_o_n___p_a_r_a_m_s object. It already contains │ │ │ │ +the plugins to use. │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +********** sseessssiioonn(()) ********** │ │ │ │ +sseessssiioonn (session_params const& params, io_context& ios, session_flags_t); │ │ │ │ +sseessssiioonn (session_params&& params, io_context& ios); │ │ │ │ +sseessssiioonn (session_params&& params, io_context& ios, session_flags_t); │ │ │ │ +sseessssiioonn (session_params const& params, io_context& ios); │ │ │ │ +Overload of the constructor that takes an external io_context to run the │ │ │ │ +_s_e_s_s_i_o_n object on. This is primarily useful for tests that may want to run │ │ │ │ +multiple sessions on a single io_context, or low resource systems where │ │ │ │ +additional threads are expensive and sharing an io_context with other events is │ │ │ │ +fine. │ │ │ │ +Warning │ │ │ │ +The _s_e_s_s_i_o_n object does not cleanly terminate with an external io_context. The │ │ │ │ +io_context::run() call mmuusstt have returned before it's safe to destruct the │ │ │ │ +_s_e_s_s_i_o_n. Which means you MMUUSSTT call _s_e_s_s_i_o_n_:_:_a_b_o_r_t_(_) and save the _s_e_s_s_i_o_n___p_r_o_x_y │ │ │ │ +first, then destruct the _s_e_s_s_i_o_n object, then sync with the io_context, then │ │ │ │ +destruct the _s_e_s_s_i_o_n___p_r_o_x_y object. │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +********** ~~sseessssiioonn(()) ********** │ │ │ │ +~~sseessssiioonn (); │ │ │ │ +The destructor of _s_e_s_s_i_o_n 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 _s_e_s_s_i_o_n returns. So, it's advised that any kind of interface │ │ │ │ +(such as windows) are closed before destructing the _s_e_s_s_i_o_n object. Because it │ │ │ │ +can take a few second for it to finish. The timeout can be set with │ │ │ │ +_a_p_p_l_y___s_e_t_t_i_n_g_s_(_). │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +********** aabboorrtt(()) ********** │ │ │ │ +session_proxy aabboorrtt (); │ │ │ │ +In case you want to destruct the _s_e_s_s_i_o_n asynchronously, you can request a │ │ │ │ +_s_e_s_s_i_o_n destruction proxy. If you don't do this, the destructor of the _s_e_s_s_i_o_n │ │ │ │ +object will block while the trackers are contacted. If you keep one │ │ │ │ +session_proxy to the _s_e_s_s_i_o_n when destructing it, the destructor will not │ │ │ │ +block, but start to close down the _s_e_s_s_i_o_n, the destructor of the proxy will │ │ │ │ +then synchronize the threads. So, the destruction of the _s_e_s_s_i_o_n 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 _s_e_s_s_i_o_n is being │ │ │ │ +closed down, no operations are allowed on it). The only valid operation is │ │ │ │ +calling the destructor: │ │ │ │ +struct session_proxy {}; │ │ │ │ +[_r_e_p_o_r_t_ _i_s_s_u_e] │ │ │ │ +************ wwrriittee__sseessssiioonn__ppaarraammss(()) wwrriittee__sseessssiioonn__ppaarraammss__bbuuff(()) rreeaadd__sseessssiioonn__ppaarraammss(()) │ │ │ │ ************ │ │ │ │ Declared in "_l_i_b_t_o_r_r_e_n_t_/_s_e_s_s_i_o_n___p_a_r_a_m_s_._h_p_p" │ │ │ │ -session_params rreeaadd__sseessssiioonn__ppaarraammss (bdecode_node const& e │ │ │ │ - , save_state_flags_t flags = save_state_flags_t::all()); │ │ │ │ -entry wwrriittee__sseessssiioonn__ppaarraammss (session_params const& sp │ │ │ │ +session_params rreeaadd__sseessssiioonn__ppaarraammss (span buf │ │ │ │ , save_state_flags_t flags = save_state_flags_t::all()); │ │ │ │ std::vector wwrriittee__sseessssiioonn__ppaarraammss__bbuuff (session_params const& sp │ │ │ │ , save_state_flags_t flags = save_state_flags_t::all()); │ │ │ │ -session_params rreeaadd__sseessssiioonn__ppaarraammss (span buf │ │ │ │ +entry wwrriittee__sseessssiioonn__ppaarraammss (session_params const& sp │ │ │ │ + , save_state_flags_t flags = save_state_flags_t::all()); │ │ │ │ +session_params rreeaadd__sseessssiioonn__ppaarraammss (bdecode_node const& e │ │ │ │ , save_state_flags_t flags = save_state_flags_t::all()); │ │ │ │ These functions serialize and de-serialize a session_params object to and from │ │ │ │ bencoded form. The _s_e_s_s_i_o_n___p_a_r_a_m_s object is used to initialize a new _s_e_s_s_i_o_n │ │ │ │ using the state from a previous one (or by programmatically configure the │ │ │ │ _s_e_s_s_i_o_n up-front). The flags parameter can be used to only save and load │ │ │ │ certain aspects of the session's state. The _buf suffix indicates the function │ │ │ │ operates on buffer rather than the bencoded structure. The torrents in a │ │ ├── ./usr/share/doc/libtorrent-rasterbar-doc/html/reference-Settings.html │ │ │ @@ -29,35 +29,35 @@ │ │ │ │ │ │ │ │ │

    home

    │ │ │
    │ │ │

    Table of contents

    │ │ │ │ │ │
    │ │ │

    You have some control over session configuration through the session::apply_settings() │ │ │ member function. To change one or more configuration options, create a settings_pack │ │ │ object and fill it with the settings to be set and pass it in to session::apply_settings().

    │ │ │

    The settings_pack object is a collection of settings updates that are applied │ │ │ to the session when passed to session::apply_settings(). It's empty when │ │ │ @@ -4598,24 +4598,24 @@ │ │ │

    │ │ │
    │ │ │  struct settings_pack final : settings_interface
    │ │ │  {
    │ │ │     friend  void apply_pack_impl (settings_pack const*
    │ │ │        , aux::session_settings_single_thread&
    │ │ │        , std::vector<void(aux::session_impl::*)()>*);
    │ │ │ +   void set_int (int name, int val) override;
    │ │ │     void set_str (int name, std::string val) override;
    │ │ │ -   void set_bool (int name, bool val) override;
    │ │ │     void set_int (int name, flags::bitfield_flag<Type, Tag> const val);
    │ │ │ -   void set_int (int name, int val) override;
    │ │ │ +   void set_bool (int name, bool val) override;
    │ │ │     bool has_val (int name) const override;
    │ │ │     void clear ();
    │ │ │     void clear (int name);
    │ │ │ -   std::string const& get_str (int name) const override;
    │ │ │     int get_int (int name) const override;
    │ │ │     bool get_bool (int name) const override;
    │ │ │ +   std::string const& get_str (int name) const override;
    │ │ │     void for_each (Fun&& f) const;
    │ │ │  
    │ │ │     enum type_bases
    │ │ │     {
    │ │ │        string_type_base,
    │ │ │        int_type_base,
    │ │ │        bool_type_base,
    │ │ │ @@ -4685,23 +4685,23 @@
    │ │ │        socks5,
    │ │ │        socks5_pw,
    │ │ │        http,
    │ │ │        http_pw,
    │ │ │     };
    │ │ │  };
    │ │ │  
    │ │ │ + │ │ │ │ │ │ - │ │ │ -[report issue]
    │ │ │ -

    set_bool() set_str() set_int()

    │ │ │ +[report issue]
    │ │ │ +

    set_int() set_bool() set_str()

    │ │ │
    │ │ │ +void set_int (int name, int val) override;
    │ │ │  void set_str (int name, std::string val) override;
    │ │ │ -void set_bool (int name, bool val) override;
    │ │ │  void set_int (int name, flags::bitfield_flag<Type, Tag> const val);
    │ │ │ -void set_int (int name, int val) override;
    │ │ │ +void set_bool (int name, bool val) override;
    │ │ │  
    │ │ │

    set a configuration option in the settings_pack. name is one of │ │ │ the enum values from string_types, int_types or bool_types. They must │ │ │ match the respective type of the set_* function.

    │ │ │ [report issue]
    │ │ │
    │ │ │

    has_val()

    │ │ │ @@ -4721,23 +4721,23 @@ │ │ │ [report issue]
    │ │ │
    │ │ │

    clear()

    │ │ │
    │ │ │  void clear (int name);
    │ │ │  
    │ │ │

    clear a specific setting from the pack

    │ │ │ - │ │ │ │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    get_bool() get_int() get_str()

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    get_int() get_bool() get_str()

    │ │ │
    │ │ │ -std::string const& get_str (int name) const override;
    │ │ │  int get_int (int name) const override;
    │ │ │  bool get_bool (int name) const override;
    │ │ │ +std::string const& get_str (int name) const override;
    │ │ │  
    │ │ │

    queries the current configuration option from the settings_pack. │ │ │ name is one of the enumeration values from string_types, int_types │ │ │ or bool_types. The enum value must match the type of the get_* │ │ │ function. If the specified setting field has not been set, the default │ │ │ value is returned.

    │ │ │ [report issue]
    │ │ │ @@ -5154,22 +5154,41 @@ │ │ │ Tribler │ │ │ │ │ │ │ │ │ │ │ │

    There's an informal directory of client id's here.

    │ │ │

    The major, minor, revision and tag parameters are used to │ │ │ identify the version of your client.

    │ │ │ + │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    name_for_setting() setting_by_name()

    │ │ │ +

    Declared in "libtorrent/settings_pack.hpp"

    │ │ │ +
    │ │ │ +char const* name_for_setting (int s);
    │ │ │ +int setting_by_name (string_view name);
    │ │ │ +
    │ │ │ +

    converts a setting integer (from the enums string_types, int_types or │ │ │ +bool_types) to a string, and vice versa.

    │ │ │ +[report issue]
    │ │ │ +
    │ │ │ +

    default_settings()

    │ │ │ +

    Declared in "libtorrent/settings_pack.hpp"

    │ │ │ +
    │ │ │ +settings_pack default_settings ();
    │ │ │ +
    │ │ │ +

    returns a settings_pack with every setting set to its default value

    │ │ │ │ │ │ [report issue]
    │ │ │
    │ │ │

    min_memory_usage() high_performance_seed()

    │ │ │

    Declared in "libtorrent/session.hpp"

    │ │ │
    │ │ │ -settings_pack high_performance_seed ();
    │ │ │  settings_pack min_memory_usage ();
    │ │ │ +settings_pack high_performance_seed ();
    │ │ │  
    │ │ │

    The default values of the session settings are set for a regular │ │ │ bittorrent client running on a desktop system. There are functions that │ │ │ can set the session settings to pre set settings for other environments. │ │ │ These can be used for the basis, and should be tweaked to fit your needs │ │ │ better.

    │ │ │

    min_memory_usage returns settings that will use the minimal amount of │ │ │ @@ -5183,33 +5202,14 @@ │ │ │ pieces, instead of reading it all into memory before hashing.

    │ │ │

    This configuration is intended to be the starting point for embedded │ │ │ devices. It will significantly reduce memory usage.

    │ │ │

    high_performance_seed returns settings optimized for a seed box, │ │ │ serving many peers and that doesn't do any downloading. It has a 128 MB │ │ │ disk cache and has a limit of 400 files in its file pool. It support fast │ │ │ upload rates by allowing large send buffers.

    │ │ │ - │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    name_for_setting() setting_by_name()

    │ │ │ -

    Declared in "libtorrent/settings_pack.hpp"

    │ │ │ -
    │ │ │ -int setting_by_name (string_view name);
    │ │ │ -char const* name_for_setting (int s);
    │ │ │ -
    │ │ │ -

    converts a setting integer (from the enums string_types, int_types or │ │ │ -bool_types) to a string, and vice versa.

    │ │ │ -[report issue]
    │ │ │ -
    │ │ │ -

    default_settings()

    │ │ │ -

    Declared in "libtorrent/settings_pack.hpp"

    │ │ │ -
    │ │ │ -settings_pack default_settings ();
    │ │ │ -
    │ │ │ -

    returns a settings_pack with every setting set to its default value

    │ │ │
    │ │ │ │ │ │
    │ │ │ │ │ │
    │ │ │
    │ │ │