move torrent_status documentation into the header

This commit is contained in:
Arvid Norberg 2013-08-07 06:37:51 +00:00
parent 6beb14f2a8
commit 6abfce3970
4 changed files with 238 additions and 521 deletions

View File

@ -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
========= =========

View File

@ -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
// should be <= ``active_time``. They are all saved in and restored from resume data,
// to keep totals across sessions.
int active_time; 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;
}; };
} }

View File

@ -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;

View File

@ -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() {}