move torrent_status documentation into the header
This commit is contained in:
parent
6beb14f2a8
commit
6abfce3970
427
docs/manual.rst
427
docs/manual.rst
|
@ -93,433 +93,6 @@ For documentation on these types, please refer to the `asio documentation`_.
|
||||||
|
|
||||||
.. _`asio documentation`: http://asio.sourceforge.net/asio-0.3.8/doc/asio/reference.html
|
.. _`asio documentation`: http://asio.sourceforge.net/asio-0.3.8/doc/asio/reference.html
|
||||||
|
|
||||||
torrent_status
|
|
||||||
==============
|
|
||||||
|
|
||||||
It contains the following fields::
|
|
||||||
|
|
||||||
struct torrent_status
|
|
||||||
{
|
|
||||||
enum state_t
|
|
||||||
{
|
|
||||||
queued_for_checking,
|
|
||||||
checking_files,
|
|
||||||
downloading_metadata,
|
|
||||||
downloading,
|
|
||||||
finished,
|
|
||||||
seeding,
|
|
||||||
allocating,
|
|
||||||
checking_resume_data
|
|
||||||
};
|
|
||||||
|
|
||||||
torrent_handle handle;
|
|
||||||
|
|
||||||
state_t state;
|
|
||||||
bool paused;
|
|
||||||
bool auto_managed;
|
|
||||||
bool sequential_download;
|
|
||||||
bool seeding;
|
|
||||||
bool finished;
|
|
||||||
float progress;
|
|
||||||
int progress_ppm;
|
|
||||||
std::string error;
|
|
||||||
std::string save_path;
|
|
||||||
std::string name;
|
|
||||||
|
|
||||||
boost::intrusive_ptr<const torrent_info> torrent_file;
|
|
||||||
|
|
||||||
boost::posix_time::time_duration next_announce;
|
|
||||||
boost::posix_time::time_duration announce_interval;
|
|
||||||
|
|
||||||
std::string current_tracker;
|
|
||||||
|
|
||||||
size_type total_download;
|
|
||||||
size_type total_upload;
|
|
||||||
|
|
||||||
size_type total_payload_download;
|
|
||||||
size_type total_payload_upload;
|
|
||||||
|
|
||||||
size_type total_failed_bytes;
|
|
||||||
size_type total_redundant_bytes;
|
|
||||||
|
|
||||||
int download_rate;
|
|
||||||
int upload_rate;
|
|
||||||
|
|
||||||
int download_payload_rate;
|
|
||||||
int upload_payload_rate;
|
|
||||||
|
|
||||||
int num_peers;
|
|
||||||
|
|
||||||
int num_complete;
|
|
||||||
int num_incomplete;
|
|
||||||
|
|
||||||
int list_seeds;
|
|
||||||
int list_peers;
|
|
||||||
|
|
||||||
int connect_candidates;
|
|
||||||
|
|
||||||
bitfield pieces;
|
|
||||||
bitfield verified_pieces;
|
|
||||||
|
|
||||||
int num_pieces;
|
|
||||||
|
|
||||||
size_type total_done;
|
|
||||||
size_type total_wanted_done;
|
|
||||||
size_type total_wanted;
|
|
||||||
|
|
||||||
int num_seeds;
|
|
||||||
|
|
||||||
int distributed_full_copies;
|
|
||||||
int distributed_fraction;
|
|
||||||
|
|
||||||
float distributed_copies;
|
|
||||||
|
|
||||||
int block_size;
|
|
||||||
|
|
||||||
int num_uploads;
|
|
||||||
int num_connections;
|
|
||||||
int uploads_limit;
|
|
||||||
int connections_limit;
|
|
||||||
|
|
||||||
storage_mode_t storage_mode;
|
|
||||||
|
|
||||||
int up_bandwidth_queue;
|
|
||||||
int down_bandwidth_queue;
|
|
||||||
|
|
||||||
size_type all_time_upload;
|
|
||||||
size_type all_time_download;
|
|
||||||
|
|
||||||
int active_time;
|
|
||||||
int finished_time;
|
|
||||||
int seeding_time;
|
|
||||||
|
|
||||||
int seed_rank;
|
|
||||||
|
|
||||||
int last_scrape;
|
|
||||||
|
|
||||||
bool has_incoming;
|
|
||||||
|
|
||||||
int sparse_regions;
|
|
||||||
|
|
||||||
bool seed_mode;
|
|
||||||
bool upload_mode;
|
|
||||||
bool share_mode;
|
|
||||||
bool super_seeding;
|
|
||||||
|
|
||||||
int priority;
|
|
||||||
|
|
||||||
time_t added_time;
|
|
||||||
time_t completed_time;
|
|
||||||
time_t last_seen_complete;
|
|
||||||
|
|
||||||
int time_since_upload;
|
|
||||||
int time_since_download;
|
|
||||||
|
|
||||||
int queue_position;
|
|
||||||
bool need_save_resume;
|
|
||||||
bool ip_filter_applies;
|
|
||||||
|
|
||||||
sha1_hash info_hash;
|
|
||||||
|
|
||||||
int listen_port;
|
|
||||||
};
|
|
||||||
|
|
||||||
``handle`` is a handle to the torrent whose status the object represents.
|
|
||||||
|
|
||||||
``progress`` is a value in the range [0, 1], that represents the progress of the
|
|
||||||
torrent's current task. It may be checking files or downloading.
|
|
||||||
|
|
||||||
``progress_ppm`` reflects the same value as ``progress``, but instead in a range
|
|
||||||
[0, 1000000] (ppm = parts per million). When floating point operations are disabled,
|
|
||||||
this is the only alternative to the floating point value in ``progress``.
|
|
||||||
|
|
||||||
The torrent's current task is in the ``state`` member, it will be one of the following:
|
|
||||||
|
|
||||||
+--------------------------+----------------------------------------------------------+
|
|
||||||
|``checking_resume_data`` |The torrent is currently checking the fastresume data and |
|
|
||||||
| |comparing it to the files on disk. This is typically |
|
|
||||||
| |completed in a fraction of a second, but if you add a |
|
|
||||||
| |large number of torrents at once, they will queue up. |
|
|
||||||
+--------------------------+----------------------------------------------------------+
|
|
||||||
|``queued_for_checking`` |The torrent is in the queue for being checked. But there |
|
|
||||||
| |currently is another torrent that are being checked. |
|
|
||||||
| |This torrent will wait for its turn. |
|
|
||||||
+--------------------------+----------------------------------------------------------+
|
|
||||||
|``checking_files`` |The torrent has not started its download yet, and is |
|
|
||||||
| |currently checking existing files. |
|
|
||||||
+--------------------------+----------------------------------------------------------+
|
|
||||||
|``downloading_metadata`` |The torrent is trying to download metadata from peers. |
|
|
||||||
| |This assumes the metadata_transfer extension is in use. |
|
|
||||||
+--------------------------+----------------------------------------------------------+
|
|
||||||
|``downloading`` |The torrent is being downloaded. This is the state |
|
|
||||||
| |most torrents will be in most of the time. The progress |
|
|
||||||
| |meter will tell how much of the files that has been |
|
|
||||||
| |downloaded. |
|
|
||||||
+--------------------------+----------------------------------------------------------+
|
|
||||||
|``finished`` |In this state the torrent has finished downloading but |
|
|
||||||
| |still doesn't have the entire torrent. i.e. some pieces |
|
|
||||||
| |are filtered and won't get downloaded. |
|
|
||||||
+--------------------------+----------------------------------------------------------+
|
|
||||||
|``seeding`` |In this state the torrent has finished downloading and |
|
|
||||||
| |is a pure seeder. |
|
|
||||||
+--------------------------+----------------------------------------------------------+
|
|
||||||
|``allocating`` |If the torrent was started in full allocation mode, this |
|
|
||||||
| |indicates that the (disk) storage for the torrent is |
|
|
||||||
| |allocated. |
|
|
||||||
+--------------------------+----------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
When downloading, the progress is ``total_wanted_done`` / ``total_wanted``. This takes
|
|
||||||
into account files whose priority have been set to 0. They are not considered.
|
|
||||||
|
|
||||||
``paused`` is set to true if the torrent is paused and false otherwise. It's only true
|
|
||||||
if the torrent itself is paused. If the torrent is not running because the session is
|
|
||||||
paused, this is still false. To know if a torrent is active or not, you need to inspect
|
|
||||||
both ``torrent_status::paused`` and ``session::is_paused()``.
|
|
||||||
|
|
||||||
``auto_managed`` is set to true if the torrent is auto managed, i.e. libtorrent is
|
|
||||||
responsible for determining whether it should be started or queued. For more info
|
|
||||||
see queuing_
|
|
||||||
|
|
||||||
``sequential_download`` is true when the torrent is in sequential download mode. In
|
|
||||||
this mode pieces are downloaded in order rather than rarest first.
|
|
||||||
|
|
||||||
``is_seeding`` is true if all pieces have been downloaded.
|
|
||||||
|
|
||||||
``is_finished`` is true if all pieces that have a priority > 0 are downloaded. There is
|
|
||||||
only a distinction between finished and seeding if some pieces or files have been
|
|
||||||
set to priority 0, i.e. are not downloaded.
|
|
||||||
|
|
||||||
``has_metadata`` is true if this torrent has metadata (either it was started from a
|
|
||||||
.torrent file or the metadata has been downloaded). The only scenario where this can be
|
|
||||||
false is when the torrent was started torrent-less (i.e. with just an info-hash and tracker
|
|
||||||
ip, a magnet link for instance).
|
|
||||||
|
|
||||||
``error`` may be set to an error message describing why the torrent was paused, in
|
|
||||||
case it was paused by an error. If the torrent is not paused or if it's paused but
|
|
||||||
not because of an error, this string is empty.
|
|
||||||
|
|
||||||
``save_path`` is the path to the directory where this torrent's files are stored.
|
|
||||||
It's typically the path as was given to `async_add_torrent() add_torrent()`_ when this torrent
|
|
||||||
was started. This field is only included if the torrent status is queried with
|
|
||||||
``torrent_handle::query_save_path``.
|
|
||||||
|
|
||||||
``name`` is the name of the torrent. Typically this is derived from the .torrent file.
|
|
||||||
In case the torrent was started without metadata, and hasn't completely received it yet,
|
|
||||||
it returns the name given to it when added to the session. See ``session::add_torrent``.
|
|
||||||
This field is only included if the torrent status is queried with ``torrent_handle::query_name``.
|
|
||||||
|
|
||||||
``torrent_file`` is set to point to the ``torrent_info`` object for this torrent. It's
|
|
||||||
only included if the torrent status is queried with ``torrent_handle::query_torrent_file``.
|
|
||||||
|
|
||||||
``next_announce`` is the time until the torrent will announce itself to the tracker. And
|
|
||||||
``announce_interval`` is the time the tracker want us to wait until we announce ourself
|
|
||||||
again the next time.
|
|
||||||
|
|
||||||
``current_tracker`` is the URL of the last working tracker. If no tracker request has
|
|
||||||
been successful yet, it's set to an empty string.
|
|
||||||
|
|
||||||
``total_download`` and ``total_upload`` is the number of bytes downloaded and
|
|
||||||
uploaded to all peers, accumulated, *this session* only. The session is considered
|
|
||||||
to restart when a torrent is paused and restarted again. When a torrent is paused,
|
|
||||||
these counters are reset to 0. If you want complete, persistent, stats, see
|
|
||||||
``all_time_upload`` and ``all_time_download``.
|
|
||||||
|
|
||||||
``total_payload_download`` and ``total_payload_upload`` counts the amount of bytes
|
|
||||||
send and received this session, but only the actual payload data (i.e the interesting
|
|
||||||
data), these counters ignore any protocol overhead.
|
|
||||||
|
|
||||||
``total_failed_bytes`` is the number of bytes that has been downloaded and that
|
|
||||||
has failed the piece hash test. In other words, this is just how much crap that
|
|
||||||
has been downloaded.
|
|
||||||
|
|
||||||
``total_redundant_bytes`` is the number of bytes that has been downloaded even
|
|
||||||
though that data already was downloaded. The reason for this is that in some
|
|
||||||
situations the same data can be downloaded by mistake. When libtorrent sends
|
|
||||||
requests to a peer, and the peer doesn't send a response within a certain
|
|
||||||
timeout, libtorrent will re-request that block. Another situation when
|
|
||||||
libtorrent may re-request blocks is when the requests it sends out are not
|
|
||||||
replied in FIFO-order (it will re-request blocks that are skipped by an out of
|
|
||||||
order block). This is supposed to be as low as possible.
|
|
||||||
|
|
||||||
``pieces`` is the bitmask that represents which pieces we have (set to true) and
|
|
||||||
the pieces we don't have. It's a pointer and may be set to 0 if the torrent isn't
|
|
||||||
downloading or seeding.
|
|
||||||
|
|
||||||
``verified_pieces`` is a bitmask representing which pieces has had their hash
|
|
||||||
checked. This only applies to torrents in *seed mode*. If the torrent is not
|
|
||||||
in seed mode, this bitmask may be empty.
|
|
||||||
|
|
||||||
``num_pieces`` is the number of pieces that has been downloaded. It is equivalent
|
|
||||||
to: ``std::accumulate(pieces->begin(), pieces->end())``. So you don't have to
|
|
||||||
count yourself. This can be used to see if anything has updated since last time
|
|
||||||
if you want to keep a graph of the pieces up to date.
|
|
||||||
|
|
||||||
``download_rate`` and ``upload_rate`` are the total rates for all peers for this
|
|
||||||
torrent. These will usually have better precision than summing the rates from
|
|
||||||
all peers. The rates are given as the number of bytes per second. The
|
|
||||||
``download_payload_rate`` and ``upload_payload_rate`` respectively is the
|
|
||||||
total transfer rate of payload only, not counting protocol chatter. This might
|
|
||||||
be slightly smaller than the other rates, but if projected over a long time
|
|
||||||
(e.g. when calculating ETA:s) the difference may be noticeable.
|
|
||||||
|
|
||||||
``num_peers`` is the number of peers this torrent currently is connected to.
|
|
||||||
Peer connections that are in the half-open state (is attempting to connect)
|
|
||||||
or are queued for later connection attempt do not count. Although they are
|
|
||||||
visible in the peer list when you call `get_peer_info()`_.
|
|
||||||
|
|
||||||
``num_complete`` and ``num_incomplete`` are set to -1 if the tracker did not
|
|
||||||
send any scrape data in its announce reply. This data is optional and may
|
|
||||||
not be available from all trackers. If these are not -1, they are the total
|
|
||||||
number of peers that are seeding (complete) and the total number of peers
|
|
||||||
that are still downloading (incomplete) this torrent.
|
|
||||||
|
|
||||||
``list_seeds`` and ``list_peers`` are the number of seeds in our peer list
|
|
||||||
and the total number of peers (including seeds) respectively. We are not
|
|
||||||
necessarily connected to all the peers in our peer list. This is the number
|
|
||||||
of peers we know of in total, including banned peers and peers that we have
|
|
||||||
failed to connect to.
|
|
||||||
|
|
||||||
``connect_candidates`` is the number of peers in this torrent's peer list
|
|
||||||
that is a candidate to be connected to. i.e. It has fewer connect attempts
|
|
||||||
than the max fail count, it is not a seed if we are a seed, it is not banned
|
|
||||||
etc. If this is 0, it means we don't know of any more peers that we can try.
|
|
||||||
|
|
||||||
``total_done`` is the total number of bytes of the file(s) that we have. All
|
|
||||||
this does not necessarily has to be downloaded during this session (that's
|
|
||||||
``total_payload_download``).
|
|
||||||
|
|
||||||
``total_wanted_done`` is the number of bytes we have downloaded, only counting the
|
|
||||||
pieces that we actually want to download. i.e. excluding any pieces that we have but
|
|
||||||
have priority 0 (i.e. not wanted).
|
|
||||||
|
|
||||||
``total_wanted`` is the total number of bytes we want to download. This is also
|
|
||||||
excluding pieces whose priorities have been set to 0.
|
|
||||||
|
|
||||||
``num_seeds`` is the number of peers that are seeding that this client is
|
|
||||||
currently connected to.
|
|
||||||
|
|
||||||
``distributed_full_copies`` is the number of distributed copies of the torrent.
|
|
||||||
Note that one copy may be spread out among many peers. It tells how many copies
|
|
||||||
there are currently of the rarest piece(s) among the peers this client is
|
|
||||||
connected to.
|
|
||||||
|
|
||||||
``distributed_fraction`` tells the share of pieces that have more copies than
|
|
||||||
the rarest piece(s). Divide this number by 1000 to get the fraction.
|
|
||||||
|
|
||||||
For example, if ``distributed_full_copies`` is 2 and ``distrbuted_fraction``
|
|
||||||
is 500, it means that the rarest pieces have only 2 copies among the peers
|
|
||||||
this torrent is connected to, and that 50% of all the pieces have more than
|
|
||||||
two copies.
|
|
||||||
|
|
||||||
If we are a seed, the piece picker is deallocated as an optimization, and
|
|
||||||
piece availability is no longer tracked. In this case the distributed
|
|
||||||
copies members are set to -1.
|
|
||||||
|
|
||||||
``distributed_copies`` is a floating point representation of the
|
|
||||||
``distributed_full_copies`` as the integer part and ``distributed_fraction``
|
|
||||||
/ 1000 as the fraction part. If floating point operations are disabled
|
|
||||||
this value is always -1.
|
|
||||||
|
|
||||||
``block_size`` is the size of a block, in bytes. A block is a sub piece, it
|
|
||||||
is the number of bytes that each piece request asks for and the number of
|
|
||||||
bytes that each bit in the ``partial_piece_info``'s bitset represents
|
|
||||||
(see `get_download_queue()`_). This is typically 16 kB, but it may be
|
|
||||||
larger if the pieces are larger.
|
|
||||||
|
|
||||||
``num_uploads`` is the number of unchoked peers in this torrent.
|
|
||||||
|
|
||||||
``num_connections`` is the number of peer connections this torrent has, including
|
|
||||||
half-open connections that hasn't completed the bittorrent handshake yet. This is
|
|
||||||
always >= ``num_peers``.
|
|
||||||
|
|
||||||
``uploads_limit`` is the set limit of upload slots (unchoked peers) for this torrent.
|
|
||||||
|
|
||||||
``connections_limit`` is the set limit of number of connections for this torrent.
|
|
||||||
|
|
||||||
``storage_mode`` is one of ``storage_mode_allocate``, ``storage_mode_sparse`` or
|
|
||||||
``storage_mode_compact``. Identifies which storage mode this torrent is being saved
|
|
||||||
with. See `Storage allocation`_.
|
|
||||||
|
|
||||||
``up_bandwidth_queue`` and ``down_bandwidth_queue`` are the number of peers in this
|
|
||||||
torrent that are waiting for more bandwidth quota from the torrent rate limiter.
|
|
||||||
This can determine if the rate you get from this torrent is bound by the torrents
|
|
||||||
limit or not. If there is no limit set on this torrent, the peers might still be
|
|
||||||
waiting for bandwidth quota from the global limiter, but then they are counted in
|
|
||||||
the ``session_status`` object.
|
|
||||||
|
|
||||||
``all_time_upload`` and ``all_time_download`` are accumulated upload and download
|
|
||||||
payload byte counters. They are saved in and restored from resume data to keep totals
|
|
||||||
across sessions.
|
|
||||||
|
|
||||||
``active_time``, ``finished_time`` and ``seeding_time`` are second counters.
|
|
||||||
They keep track of the number of seconds this torrent has been active (not
|
|
||||||
paused) and the number of seconds it has been active while being finished and
|
|
||||||
active while being a seed. ``seeding_time`` should be <= ``finished_time`` which
|
|
||||||
should be <= ``active_time``. They are all saved in and restored from resume data,
|
|
||||||
to keep totals across sessions.
|
|
||||||
|
|
||||||
``seed_rank`` is a rank of how important it is to seed the torrent, it is used
|
|
||||||
to determine which torrents to seed and which to queue. It is based on the peer
|
|
||||||
to seed ratio from the tracker scrape. For more information, see queuing_.
|
|
||||||
|
|
||||||
``last_scrape`` is the number of seconds since this torrent acquired scrape data.
|
|
||||||
If it has never done that, this value is -1.
|
|
||||||
|
|
||||||
``has_incoming`` is true if there has ever been an incoming connection attempt
|
|
||||||
to this torrent.'
|
|
||||||
|
|
||||||
``sparse_regions`` the number of regions of non-downloaded pieces in the
|
|
||||||
torrent. This is an interesting metric on windows vista, since there is
|
|
||||||
a limit on the number of sparse regions in a single file there.
|
|
||||||
|
|
||||||
``seed_mode`` is true if the torrent is in seed_mode. If the torrent was
|
|
||||||
started in seed mode, it will leave seed mode once all pieces have been
|
|
||||||
checked or as soon as one piece fails the hash check.
|
|
||||||
|
|
||||||
``upload_mode`` is true if the torrent is blocked from downloading. This
|
|
||||||
typically happens when a disk write operation fails. If the torrent is
|
|
||||||
auto-managed, it will periodically be taken out of this state, in the
|
|
||||||
hope that the disk condition (be it disk full or permission errors) has
|
|
||||||
been resolved. If the torrent is not auto-managed, you have to explicitly
|
|
||||||
take it out of the upload mode by calling `set_upload_mode()`_ on the
|
|
||||||
torrent_handle_.
|
|
||||||
|
|
||||||
``share_mode`` is true if the torrent is currently in share-mode, i.e.
|
|
||||||
not downloading the torrent, but just helping the swarm out.
|
|
||||||
|
|
||||||
``super_seeding`` is true if the torrent is in super seeding mode.
|
|
||||||
|
|
||||||
``added_time`` is the posix-time when this torrent was added. i.e. what
|
|
||||||
``time(NULL)`` returned at the time.
|
|
||||||
|
|
||||||
``completed_time`` is the posix-time when this torrent was finished. If
|
|
||||||
the torrent is not yet finished, this is 0.
|
|
||||||
|
|
||||||
``last_seen_complete`` is the time when we, or one of our peers, last
|
|
||||||
saw a complete copy of this torrent.
|
|
||||||
|
|
||||||
``time_since_upload`` and ``time_since_download`` are the number of
|
|
||||||
seconds since any peer last uploaded from this torrent and the last
|
|
||||||
time a downloaded piece passed the hash check, respectively.
|
|
||||||
|
|
||||||
``queue_position`` is the position this torrent has in the download
|
|
||||||
queue. If the torrent is a seed or finished, this is -1.
|
|
||||||
|
|
||||||
``need_save_resume`` is true if this torrent has unsaved changes
|
|
||||||
to its download state and statistics since the last resume data
|
|
||||||
was saved.
|
|
||||||
|
|
||||||
``ip_filter_applies`` is true if the session global IP filter applies
|
|
||||||
to this torrent. This defaults to true.
|
|
||||||
|
|
||||||
``info_hash`` is the info-hash of the torrent.
|
|
||||||
|
|
||||||
``listen_port`` is the listen port this torrent is listening on for new
|
|
||||||
connections, if the torrent has its own listen socket. Only SSL torrents
|
|
||||||
have their own listen sockets. If the torrent doesn't have one, and is
|
|
||||||
accepting connections on the single listen socket, this is 0.
|
|
||||||
|
|
||||||
peer_info
|
peer_info
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
|
|
@ -1031,205 +1031,349 @@ namespace libtorrent
|
||||||
bool operator==(torrent_status const& st) const
|
bool operator==(torrent_status const& st) const
|
||||||
{ return handle == st.handle; }
|
{ return handle == st.handle; }
|
||||||
|
|
||||||
// handle to the torrent
|
// a handle to the torrent whose status the object represents.
|
||||||
torrent_handle handle;
|
torrent_handle handle;
|
||||||
|
|
||||||
enum state_t
|
enum state_t
|
||||||
{
|
{
|
||||||
|
// The torrent is in the queue for being checked. But there
|
||||||
|
// currently is another torrent that are being checked.
|
||||||
|
// This torrent will wait for its turn.
|
||||||
queued_for_checking,
|
queued_for_checking,
|
||||||
|
|
||||||
|
// The torrent has not started its download yet, and is
|
||||||
|
// currently checking existing files.
|
||||||
checking_files,
|
checking_files,
|
||||||
|
|
||||||
|
// The torrent is trying to download metadata from peers.
|
||||||
|
// This assumes the metadata_transfer extension is in use.
|
||||||
downloading_metadata,
|
downloading_metadata,
|
||||||
|
|
||||||
|
// The torrent is being downloaded. This is the state
|
||||||
|
// most torrents will be in most of the time. The progress
|
||||||
|
// meter will tell how much of the files that has been
|
||||||
|
// downloaded.
|
||||||
downloading,
|
downloading,
|
||||||
|
|
||||||
|
// In this state the torrent has finished downloading but
|
||||||
|
// still doesn't have the entire torrent. i.e. some pieces
|
||||||
|
// are filtered and won't get downloaded.
|
||||||
finished,
|
finished,
|
||||||
|
|
||||||
|
// In this state the torrent has finished downloading and
|
||||||
|
// is a pure seeder.
|
||||||
seeding,
|
seeding,
|
||||||
|
|
||||||
|
// If the torrent was started in full allocation mode, this
|
||||||
|
// indicates that the (disk) storage for the torrent is
|
||||||
|
// allocated.
|
||||||
allocating,
|
allocating,
|
||||||
|
|
||||||
|
// The torrent is currently checking the fastresume data and
|
||||||
|
// comparing it to the files on disk. This is typically
|
||||||
|
// completed in a fraction of a second, but if you add a
|
||||||
|
// large number of torrents at once, they will queue up.
|
||||||
checking_resume_data
|
checking_resume_data
|
||||||
};
|
};
|
||||||
|
|
||||||
state_t state;
|
state_t state;
|
||||||
|
|
||||||
|
// set to true if the torrent is paused and false otherwise. It's only true
|
||||||
|
// if the torrent itself is paused. If the torrent is not running because the session is
|
||||||
|
// paused, this is still false. To know if a torrent is active or not, you need to inspect
|
||||||
|
// both ``torrent_status::paused`` and ``session::is_paused()``.
|
||||||
bool paused;
|
bool paused;
|
||||||
|
|
||||||
|
// set to true if the torrent is auto managed, i.e. libtorrent is
|
||||||
|
// responsible for determining whether it should be started or queued. For more info
|
||||||
|
// see queuing_
|
||||||
bool auto_managed;
|
bool auto_managed;
|
||||||
|
|
||||||
|
// true when the torrent is in sequential download mode. In
|
||||||
|
// this mode pieces are downloaded in order rather than rarest first.
|
||||||
bool sequential_download;
|
bool sequential_download;
|
||||||
|
|
||||||
|
// true if all pieces have been downloaded.
|
||||||
bool is_seeding;
|
bool is_seeding;
|
||||||
|
|
||||||
|
// true if all pieces that have a priority > 0 are downloaded. There is
|
||||||
|
// only a distinction between finished and seeding if some pieces or files have been
|
||||||
|
// set to priority 0, i.e. are not downloaded.
|
||||||
bool is_finished;
|
bool is_finished;
|
||||||
|
|
||||||
|
// true if this torrent has metadata (either it was started from a
|
||||||
|
// .torrent file or the metadata has been downloaded). The only scenario where this can be
|
||||||
|
// false is when the torrent was started torrent-less (i.e. with just an info-hash and tracker
|
||||||
|
// ip, a magnet link for instance).
|
||||||
bool has_metadata;
|
bool has_metadata;
|
||||||
|
|
||||||
|
// a value in the range [0, 1], that represents the progress of the
|
||||||
|
// torrent's current task. It may be checking files or downloading.
|
||||||
float progress;
|
float progress;
|
||||||
|
|
||||||
// progress parts per million (progress * 1000000)
|
// progress parts per million (progress * 1000000)
|
||||||
// when disabling floating point operations, this is
|
// when disabling floating point operations, this is
|
||||||
// the only option to query progress
|
// the only option to query progress
|
||||||
|
|
||||||
|
// reflects the same value as ``progress``, but instead in a range
|
||||||
|
// [0, 1000000] (ppm = parts per million). When floating point operations are disabled,
|
||||||
|
// this is the only alternative to the floating point value in progress.
|
||||||
int progress_ppm;
|
int progress_ppm;
|
||||||
|
|
||||||
|
// may be set to an error message describing why the torrent was paused, in
|
||||||
|
// case it was paused by an error. If the torrent is not paused or if it's paused but
|
||||||
|
// not because of an error, this string is empty.
|
||||||
std::string error;
|
std::string error;
|
||||||
|
|
||||||
// save path of where the torrent's files are saved
|
// the path to the directory where this torrent's files are stored.
|
||||||
// only set when status is queried with query_save_path
|
// It's typically the path as was given to `async_add_torrent() add_torrent()`_ when this torrent
|
||||||
|
// was started. This field is only included if the torrent status is queried with
|
||||||
|
// ``torrent_handle::query_save_path``.
|
||||||
std::string save_path;
|
std::string save_path;
|
||||||
|
|
||||||
// name of the torrent, or empty if the torrent's name
|
// the name of the torrent. Typically this is derived from the .torrent file.
|
||||||
// cannot be established yet
|
// In case the torrent was started without metadata, and hasn't completely received it yet,
|
||||||
// only set when status is queried with query_name
|
// it returns the name given to it when added to the session. See ``session::add_torrent``.
|
||||||
|
// This field is only included if the torrent status is queried with ``torrent_handle::query_name``.
|
||||||
std::string name;
|
std::string name;
|
||||||
|
|
||||||
// the torrent file for this torrent
|
// set to point to the ``torrent_info`` object for this torrent. It's
|
||||||
// only set when status is queried with query_torrent_file
|
// only included if the torrent status is queried with ``torrent_handle::query_torrent_file``.
|
||||||
boost::intrusive_ptr<const torrent_info> torrent_file;
|
boost::intrusive_ptr<const torrent_info> torrent_file;
|
||||||
|
|
||||||
|
// the time until the torrent will announce itself to the tracker.
|
||||||
boost::posix_time::time_duration next_announce;
|
boost::posix_time::time_duration next_announce;
|
||||||
|
|
||||||
|
// the time the tracker want us to wait until we announce ourself
|
||||||
|
// again the next time.
|
||||||
boost::posix_time::time_duration announce_interval;
|
boost::posix_time::time_duration announce_interval;
|
||||||
|
|
||||||
|
// the URL of the last working tracker. If no tracker request has
|
||||||
|
// been successful yet, it's set to an empty string.
|
||||||
std::string current_tracker;
|
std::string current_tracker;
|
||||||
|
|
||||||
// transferred this session!
|
// the number of bytes downloaded and
|
||||||
// total, payload plus protocol
|
// uploaded to all peers, accumulated, *this session* only. The session is considered
|
||||||
|
// to restart when a torrent is paused and restarted again. When a torrent is paused,
|
||||||
|
// these counters are reset to 0. If you want complete, persistent, stats, see
|
||||||
|
// ``all_time_upload`` and ``all_time_download``.
|
||||||
size_type total_download;
|
size_type total_download;
|
||||||
size_type total_upload;
|
size_type total_upload;
|
||||||
|
|
||||||
// payload only
|
// counts the amount of bytes
|
||||||
|
// send and received this session, but only the actual payload data (i.e the interesting
|
||||||
|
// data), these counters ignore any protocol overhead.
|
||||||
size_type total_payload_download;
|
size_type total_payload_download;
|
||||||
size_type total_payload_upload;
|
size_type total_payload_upload;
|
||||||
|
|
||||||
// the amount of payload bytes that
|
// the number of bytes that has been downloaded and that
|
||||||
// has failed their hash test
|
// has failed the piece hash test. In other words, this is just how much crap that
|
||||||
|
// has been downloaded.
|
||||||
size_type total_failed_bytes;
|
size_type total_failed_bytes;
|
||||||
|
|
||||||
// the number of payload bytes that
|
// the number of bytes that has been downloaded even
|
||||||
// has been received redundantly.
|
// though that data already was downloaded. The reason for this is that in some
|
||||||
|
// situations the same data can be downloaded by mistake. When libtorrent sends
|
||||||
|
// requests to a peer, and the peer doesn't send a response within a certain
|
||||||
|
// timeout, libtorrent will re-request that block. Another situation when
|
||||||
|
// libtorrent may re-request blocks is when the requests it sends out are not
|
||||||
|
// replied in FIFO-order (it will re-request blocks that are skipped by an out of
|
||||||
|
// order block). This is supposed to be as low as possible.
|
||||||
size_type total_redundant_bytes;
|
size_type total_redundant_bytes;
|
||||||
|
|
||||||
// current transfer rate
|
// the total rates for all peers for this
|
||||||
// payload plus protocol
|
// torrent. These will usually have better precision than summing the rates from
|
||||||
|
// all peers. The rates are given as the number of bytes per second.
|
||||||
int download_rate;
|
int download_rate;
|
||||||
int upload_rate;
|
int upload_rate;
|
||||||
|
|
||||||
// the rate of payload that is
|
// the total transfer rate of payload only, not counting protocol chatter. This might
|
||||||
// sent and received
|
// be slightly smaller than the other rates, but if projected over a long time
|
||||||
|
// (e.g. when calculating ETA:s) the difference may be noticeable.
|
||||||
int download_payload_rate;
|
int download_payload_rate;
|
||||||
int upload_payload_rate;
|
int upload_payload_rate;
|
||||||
|
|
||||||
// the number of peers this torrent is connected to
|
// the number of peers that are seeding that this client is
|
||||||
// that are seeding.
|
// currently connected to.
|
||||||
int num_seeds;
|
int num_seeds;
|
||||||
|
|
||||||
// the number of peers this torrent
|
// the number of peers this torrent currently is connected to.
|
||||||
// is connected to (including seeds).
|
// Peer connections that are in the half-open state (is attempting to connect)
|
||||||
|
// or are queued for later connection attempt do not count. Although they are
|
||||||
|
// visible in the peer list when you call get_peer_info().
|
||||||
int num_peers;
|
int num_peers;
|
||||||
|
|
||||||
// if the tracker sends scrape info in its
|
// if the tracker sends scrape info in its
|
||||||
// announce reply, these fields will be
|
// announce reply, these fields will be
|
||||||
// set to the total number of peers that
|
// set to the total number of peers that
|
||||||
// have the whole file and the total number
|
// have the whole file and the total number
|
||||||
// of peers that are still downloading
|
// of peers that are still downloading.
|
||||||
|
// set to -1 if the tracker did not
|
||||||
|
// send any scrape data in its announce reply.
|
||||||
int num_complete;
|
int num_complete;
|
||||||
int num_incomplete;
|
int num_incomplete;
|
||||||
|
|
||||||
// this is the number of seeds whose IP we know
|
// the number of seeds in our peer list
|
||||||
// but are not necessarily connected to
|
// and the total number of peers (including seeds). We are not
|
||||||
|
// necessarily connected to all the peers in our peer list. This is the number
|
||||||
|
// of peers we know of in total, including banned peers and peers that we have
|
||||||
|
// failed to connect to.
|
||||||
int list_seeds;
|
int list_seeds;
|
||||||
|
|
||||||
// this is the number of peers whose IP we know
|
|
||||||
// (including seeds), but are not necessarily
|
|
||||||
// connected to
|
|
||||||
int list_peers;
|
int list_peers;
|
||||||
|
|
||||||
// the number of peers in our peerlist that
|
// the number of peers in this torrent's peer list
|
||||||
// we potentially could connect to
|
// that is a candidate to be connected to. i.e. It has fewer connect attempts
|
||||||
|
// than the max fail count, it is not a seed if we are a seed, it is not banned
|
||||||
|
// etc. If this is 0, it means we don't know of any more peers that we can try.
|
||||||
int connect_candidates;
|
int connect_candidates;
|
||||||
|
|
||||||
|
// a bitmask that represents which pieces we have (set to true) and
|
||||||
|
// the pieces we don't have. It's a pointer and may be set to 0 if the torrent isn't
|
||||||
|
// downloading or seeding.
|
||||||
bitfield pieces;
|
bitfield pieces;
|
||||||
|
|
||||||
|
// a bitmask representing which pieces has had their hash
|
||||||
|
// checked. This only applies to torrents in *seed mode*. If the torrent is not
|
||||||
|
// in seed mode, this bitmask may be empty.
|
||||||
bitfield verified_pieces;
|
bitfield verified_pieces;
|
||||||
|
|
||||||
// this is the number of pieces the client has
|
// the number of pieces that has been downloaded. It is equivalent
|
||||||
// downloaded. it is equal to:
|
// to: ``std::accumulate(pieces->begin(), pieces->end())``. So you don't have to
|
||||||
// std::accumulate(pieces->begin(), pieces->end());
|
// count yourself. This can be used to see if anything has updated since last time
|
||||||
|
// if you want to keep a graph of the pieces up to date.
|
||||||
int num_pieces;
|
int num_pieces;
|
||||||
|
|
||||||
// the number of bytes of the file we have
|
// the total number of bytes of the file(s) that we have. All
|
||||||
// including pieces that may have been filtered
|
// this does not necessarily has to be downloaded during this session (that's
|
||||||
// after we downloaded them
|
// ``total_payload_download``).
|
||||||
size_type total_done;
|
size_type total_done;
|
||||||
|
|
||||||
// the number of bytes we have of those that we
|
// the number of bytes we have downloaded, only counting the
|
||||||
// want. i.e. not counting bytes from pieces that
|
// pieces that we actually want to download. i.e. excluding any pieces that we have but
|
||||||
// are filtered as not wanted.
|
// have priority 0 (i.e. not wanted).
|
||||||
size_type total_wanted_done;
|
size_type total_wanted_done;
|
||||||
|
|
||||||
// the total number of bytes we want to download
|
// The total number of bytes we want to download.
|
||||||
// this may be smaller than the total torrent size
|
// This may be smaller than the total torrent size
|
||||||
// in case any pieces are filtered as not wanted
|
// in case any pieces are prioritized to 0, i.e. not wanted
|
||||||
size_type total_wanted;
|
size_type total_wanted;
|
||||||
|
|
||||||
|
|
||||||
|
// the number of distributed copies of the torrent.
|
||||||
|
// Note that one copy may be spread out among many peers. It tells how many copies
|
||||||
|
// there are currently of the rarest piece(s) among the peers this client is
|
||||||
|
// connected to.
|
||||||
|
int distributed_full_copies;
|
||||||
|
|
||||||
|
// tells the share of pieces that have more copies than
|
||||||
|
// the rarest piece(s). Divide this number by 1000 to get the fraction.
|
||||||
|
//
|
||||||
|
// For example, if ``distributed_full_copies`` is 2 and ``distrbuted_fraction``
|
||||||
|
// is 500, it means that the rarest pieces have only 2 copies among the peers
|
||||||
|
// this torrent is connected to, and that 50% of all the pieces have more than
|
||||||
|
// two copies.
|
||||||
|
//
|
||||||
|
// If we are a seed, the piece picker is deallocated as an optimization, and
|
||||||
|
// piece availability is no longer tracked. In this case the distributed
|
||||||
|
// copies members are set to -1.
|
||||||
|
int distributed_fraction;
|
||||||
|
|
||||||
// the number of distributed copies of the file.
|
// the number of distributed copies of the file.
|
||||||
// note that one copy may be spread out among many peers.
|
// note that one copy may be spread out among many peers.
|
||||||
|
// This is a floating point representation of the
|
||||||
|
// distributed copies.
|
||||||
//
|
//
|
||||||
// the integer part tells how many copies
|
// the integer part tells how many copies
|
||||||
// there are of the rarest piece(s)
|
// there are of the rarest piece(s)
|
||||||
//
|
//
|
||||||
// the fractional part tells the fraction of pieces that
|
// the fractional part tells the fraction of pieces that
|
||||||
// have more copies than the rarest piece(s).
|
// have more copies than the rarest piece(s).
|
||||||
|
|
||||||
// the number of full distributed copies (i.e. the number
|
|
||||||
// of peers that have the rarest piece)
|
|
||||||
int distributed_full_copies;
|
|
||||||
|
|
||||||
// the fraction of pieces that more peers has than the
|
|
||||||
// rarest pieces. This indicates how close the swarm is
|
|
||||||
// to have one more full distributed copy
|
|
||||||
int distributed_fraction;
|
|
||||||
|
|
||||||
float distributed_copies;
|
float distributed_copies;
|
||||||
|
|
||||||
// the block size that is used in this torrent. i.e.
|
// the size of a block, in bytes. A block is a sub piece, it
|
||||||
// the number of bytes each piece request asks for
|
// is the number of bytes that each piece request asks for and the number of
|
||||||
// and each bit in the download queue bitfield represents
|
// bytes that each bit in the ``partial_piece_info``'s bitset represents
|
||||||
|
// (see `get_download_queue()`_). This is typically 16 kB, but it may be
|
||||||
|
// larger if the pieces are larger.
|
||||||
int block_size;
|
int block_size;
|
||||||
|
|
||||||
|
// the number of unchoked peers in this torrent.
|
||||||
int num_uploads;
|
int num_uploads;
|
||||||
|
|
||||||
|
// the number of peer connections this torrent has, including
|
||||||
|
// half-open connections that hasn't completed the bittorrent handshake yet. This is
|
||||||
|
// always >= ``num_peers``.
|
||||||
int num_connections;
|
int num_connections;
|
||||||
|
|
||||||
|
// the set limit of upload slots (unchoked peers) for this torrent.
|
||||||
int uploads_limit;
|
int uploads_limit;
|
||||||
|
|
||||||
|
// the set limit of number of connections for this torrent.
|
||||||
int connections_limit;
|
int connections_limit;
|
||||||
|
|
||||||
// true if the torrent is saved in compact mode
|
// The allocation mode for the torrent. See storage_mode_t for the options.
|
||||||
// false if it is saved in full allocation mode
|
// For more information, see `Storage allocation`_.
|
||||||
storage_mode_t storage_mode;
|
storage_mode_t storage_mode;
|
||||||
|
|
||||||
|
// the number of peers in this
|
||||||
|
// torrent that are waiting for more bandwidth quota from the torrent rate limiter.
|
||||||
|
// This can determine if the rate you get from this torrent is bound by the torrents
|
||||||
|
// limit or not. If there is no limit set on this torrent, the peers might still be
|
||||||
|
// waiting for bandwidth quota from the global limiter, but then they are counted in
|
||||||
|
// the ``session_status`` object.
|
||||||
int up_bandwidth_queue;
|
int up_bandwidth_queue;
|
||||||
int down_bandwidth_queue;
|
int down_bandwidth_queue;
|
||||||
|
|
||||||
// number of bytes downloaded since torrent was started
|
// are accumulated upload and download
|
||||||
// saved and restored from resume data
|
// payload byte counters. They are saved in and restored from resume data to keep totals
|
||||||
|
// across sessions.
|
||||||
size_type all_time_upload;
|
size_type all_time_upload;
|
||||||
size_type all_time_download;
|
size_type all_time_download;
|
||||||
|
|
||||||
// the number of seconds of being active
|
// These keep track of the number of seconds this torrent has been active (not
|
||||||
// and as being a seed, saved and restored
|
// paused) and the number of seconds it has been active while being finished and
|
||||||
// from resume data
|
// active while being a seed. ``seeding_time`` should be <= ``finished_time`` which
|
||||||
int active_time;
|
// should be <= ``active_time``. They are all saved in and restored from resume data,
|
||||||
|
// to keep totals across sessions.
|
||||||
|
int active_time;
|
||||||
int finished_time;
|
int finished_time;
|
||||||
int seeding_time;
|
int seeding_time;
|
||||||
|
|
||||||
// higher value means more important to seed
|
// A rank of how important it is to seed the torrent, it is used
|
||||||
|
// to determine which torrents to seed and which to queue. It is based on the peer
|
||||||
|
// to seed ratio from the tracker scrape. For more information, see queuing_.
|
||||||
|
// Higher value means more important to seed
|
||||||
int seed_rank;
|
int seed_rank;
|
||||||
|
|
||||||
// number of seconds since last scrape, or -1 if
|
// the number of seconds since this torrent acquired scrape data.
|
||||||
// there hasn't been a scrape
|
// If it has never done that, this value is -1.
|
||||||
int last_scrape;
|
int last_scrape;
|
||||||
|
|
||||||
// true if there are incoming connections to this
|
// true if there has ever been an incoming connection attempt
|
||||||
// torrent
|
// to this torrent.
|
||||||
bool has_incoming;
|
bool has_incoming;
|
||||||
|
|
||||||
// the number of "holes" in the torrent
|
// the number of regions of non-downloaded pieces in the
|
||||||
|
// torrent. This is an interesting metric on windows vista, since there is
|
||||||
|
// a limit on the number of sparse regions in a single file there.
|
||||||
int sparse_regions;
|
int sparse_regions;
|
||||||
|
|
||||||
// is true if this torrent is (still) in seed_mode
|
// true if the torrent is in seed_mode. If the torrent was
|
||||||
|
// started in seed mode, it will leave seed mode once all pieces have been
|
||||||
|
// checked or as soon as one piece fails the hash check.
|
||||||
bool seed_mode;
|
bool seed_mode;
|
||||||
|
|
||||||
// this is set to true when the torrent is blocked
|
// true if the torrent is blocked from downloading. This
|
||||||
// from downloading, typically caused by a file
|
// typically happens when a disk write operation fails. If the torrent is
|
||||||
// write operation failing
|
// auto-managed, it will periodically be taken out of this state, in the
|
||||||
|
// hope that the disk condition (be it disk full or permission errors) has
|
||||||
|
// been resolved. If the torrent is not auto-managed, you have to explicitly
|
||||||
|
// take it out of the upload mode by calling `set_upload_mode()`_ on the
|
||||||
|
// torrent_handle_.
|
||||||
bool upload_mode;
|
bool upload_mode;
|
||||||
|
|
||||||
// this is true if the torrent is in share-mode
|
// true if the torrent is currently in share-mode, i.e.
|
||||||
|
// not downloading the torrent, but just helping the swarm out.
|
||||||
bool share_mode;
|
bool share_mode;
|
||||||
|
|
||||||
// true if the torrent is in super seeding mode
|
// true if the torrent is in super seeding mode
|
||||||
|
@ -1238,33 +1382,39 @@ namespace libtorrent
|
||||||
// the priority of this torrent
|
// the priority of this torrent
|
||||||
int priority;
|
int priority;
|
||||||
|
|
||||||
// the time this torrent was added and completed
|
// the posix-time when this torrent was added. i.e. what
|
||||||
|
// ``time(NULL)`` returned at the time.
|
||||||
time_t added_time;
|
time_t added_time;
|
||||||
|
|
||||||
|
// the posix-time when this torrent was finished. If
|
||||||
|
// the torrent is not yet finished, this is 0.
|
||||||
time_t completed_time;
|
time_t completed_time;
|
||||||
|
|
||||||
|
// the time when we, or one of our peers, last
|
||||||
|
// saw a complete copy of this torrent.
|
||||||
time_t last_seen_complete;
|
time_t last_seen_complete;
|
||||||
|
|
||||||
// number of seconds since last upload or download activity
|
// the number of
|
||||||
|
// seconds since any peer last uploaded from this torrent and the last
|
||||||
|
// time a downloaded piece passed the hash check, respectively.
|
||||||
int time_since_upload;
|
int time_since_upload;
|
||||||
int time_since_download;
|
int time_since_download;
|
||||||
|
|
||||||
// the position in the download queue where this torrent is
|
// the position this torrent has in the download
|
||||||
// this is -1 for seeds and finished torrents
|
// queue. If the torrent is a seed or finished, this is -1.
|
||||||
int queue_position;
|
int queue_position;
|
||||||
|
|
||||||
// true if this torrent has had changes since the last
|
// true if this torrent has unsaved changes
|
||||||
// time resume data was saved
|
// to its download state and statistics since the last resume data
|
||||||
|
// was saved.
|
||||||
bool need_save_resume;
|
bool need_save_resume;
|
||||||
|
|
||||||
// defaults to true. Determines whether the session
|
// true if the session global IP filter applies
|
||||||
// IP filter applies to this torrent or not
|
// to this torrent. This defaults to true.
|
||||||
bool ip_filter_applies;
|
bool ip_filter_applies;
|
||||||
|
|
||||||
// the info-hash for this torrent
|
// the info-hash for this torrent
|
||||||
sha1_hash info_hash;
|
sha1_hash info_hash;
|
||||||
|
|
||||||
// if this torrent has its own listen socket, this is
|
|
||||||
// the port it's listening on. Otherwise it's 0
|
|
||||||
int listen_port;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8725,11 +8725,6 @@ namespace libtorrent
|
||||||
if (flags & torrent_handle::query_torrent_file)
|
if (flags & torrent_handle::query_torrent_file)
|
||||||
st->torrent_file = m_torrent_file;
|
st->torrent_file = m_torrent_file;
|
||||||
|
|
||||||
st->listen_port = 0;
|
|
||||||
#ifdef TORRENT_USE_OPENSSL
|
|
||||||
if (is_ssl_torrent()) st->listen_port = m_ses.ssl_listen_port();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
st->has_incoming = m_has_incoming;
|
st->has_incoming = m_has_incoming;
|
||||||
if (m_error) st->error = convert_from_native(m_error.message()) + ": " + m_error_file;
|
if (m_error) st->error = convert_from_native(m_error.message()) + ": " + m_error_file;
|
||||||
st->seed_mode = m_seed_mode;
|
st->seed_mode = m_seed_mode;
|
||||||
|
|
|
@ -141,7 +141,6 @@ namespace libtorrent
|
||||||
, need_save_resume(false)
|
, need_save_resume(false)
|
||||||
, ip_filter_applies(true)
|
, ip_filter_applies(true)
|
||||||
, info_hash(0)
|
, info_hash(0)
|
||||||
, listen_port(0)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
torrent_status::~torrent_status() {}
|
torrent_status::~torrent_status() {}
|
||||||
|
|
Loading…
Reference in New Issue