2003-10-23 01:00:57 +02:00
|
|
|
/*
|
|
|
|
|
2012-10-02 05:16:33 +02:00
|
|
|
Copyright (c) 2003-2012, Arvid Norberg
|
2003-10-23 01:00:57 +02:00
|
|
|
All rights reserved.
|
|
|
|
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
|
|
modification, are permitted provided that the following conditions
|
|
|
|
are met:
|
|
|
|
|
|
|
|
* Redistributions of source code must retain the above copyright
|
|
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
* Redistributions in binary form must reproduce the above copyright
|
|
|
|
notice, this list of conditions and the following disclaimer in
|
|
|
|
the documentation and/or other materials provided with the distribution.
|
|
|
|
* Neither the name of the author nor the names of its
|
|
|
|
contributors may be used to endorse or promote products derived
|
|
|
|
from this software without specific prior written permission.
|
|
|
|
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
|
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
|
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
|
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
|
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
|
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
|
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef TORRENT_PEER_INFO_HPP_INCLUDED
|
|
|
|
#define TORRENT_PEER_INFO_HPP_INCLUDED
|
|
|
|
|
|
|
|
#include "libtorrent/socket.hpp"
|
2009-09-16 05:46:36 +02:00
|
|
|
#include "libtorrent/deadline_timer.hpp"
|
2003-10-23 01:00:57 +02:00
|
|
|
#include "libtorrent/peer_id.hpp"
|
2004-01-25 19:18:36 +01:00
|
|
|
#include "libtorrent/size_type.hpp"
|
2005-11-01 19:30:39 +01:00
|
|
|
#include "libtorrent/config.hpp"
|
2008-05-28 04:35:02 +02:00
|
|
|
#include "libtorrent/bitfield.hpp"
|
2003-10-23 01:00:57 +02:00
|
|
|
|
|
|
|
namespace libtorrent
|
|
|
|
{
|
2005-11-01 19:30:39 +01:00
|
|
|
struct TORRENT_EXPORT peer_info
|
2003-10-23 01:00:57 +02:00
|
|
|
{
|
2013-08-07 09:19:17 +02:00
|
|
|
enum peer_flags_t
|
2003-10-23 01:00:57 +02:00
|
|
|
{
|
2013-08-07 09:19:17 +02:00
|
|
|
// **we** are interested in pieces from this peer.
|
2003-10-23 01:00:57 +02:00
|
|
|
interesting = 0x1,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// **we** have choked this peer.
|
2003-10-23 01:00:57 +02:00
|
|
|
choked = 0x2,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// the peer is interested in **us**
|
2003-10-23 01:00:57 +02:00
|
|
|
remote_interested = 0x4,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// the peer has choked **us**.
|
2004-01-04 05:29:13 +01:00
|
|
|
remote_choked = 0x8,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// means that this peer supports the
|
|
|
|
// `extension protocol`__.
|
|
|
|
//
|
|
|
|
// __ extension_protocol.html
|
2004-01-09 11:50:22 +01:00
|
|
|
supports_extensions = 0x10,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The connection was initiated by us, the peer has a
|
|
|
|
// listen port open, and that port is the same as in the
|
|
|
|
// address of this peer. If this flag is not set, this
|
|
|
|
// peer connection was opened by this peer connecting to
|
|
|
|
// us.
|
2005-11-02 17:28:39 +01:00
|
|
|
local_connection = 0x20,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The connection is opened, and waiting for the
|
|
|
|
// handshake. Until the handshake is done, the peer
|
|
|
|
// cannot be identified.
|
2006-04-25 23:04:48 +02:00
|
|
|
handshake = 0x40,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The connection is in a half-open state (i.e. it is
|
|
|
|
// being connected).
|
2006-04-25 23:04:48 +02:00
|
|
|
connecting = 0x80,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The connection is currently queued for a connection
|
|
|
|
// attempt. This may happen if there is a limit set on
|
|
|
|
// the number of half-open TCP connections.
|
2007-05-25 21:42:10 +02:00
|
|
|
queued = 0x100,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The peer has participated in a piece that failed the
|
|
|
|
// hash check, and is now "on parole", which means we're
|
|
|
|
// only requesting whole pieces from this peer until
|
|
|
|
// it either fails that piece or proves that it doesn't
|
|
|
|
// send bad data.
|
2007-05-25 21:42:10 +02:00
|
|
|
on_parole = 0x200,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// This peer is a seed (it has all the pieces).
|
2007-08-21 19:45:28 +02:00
|
|
|
seed = 0x400,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// This peer is subject to an optimistic unchoke. It has
|
|
|
|
// been unchoked for a while to see if it might unchoke
|
|
|
|
// us in return an earn an upload/unchoke slot. If it
|
|
|
|
// doesn't within some period of time, it will be choked
|
|
|
|
// and another peer will be optimistically unchoked.
|
2008-06-29 11:50:42 +02:00
|
|
|
optimistic_unchoke = 0x800,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// This peer has recently failed to send a block within
|
|
|
|
// the request timeout from when the request was sent.
|
|
|
|
// We're currently picking one block at a time from this
|
|
|
|
// peer.
|
2008-07-19 09:57:43 +02:00
|
|
|
snubbed = 0x1000,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// This peer has either explicitly (with an extension)
|
|
|
|
// or implicitly (by becoming a seed) told us that it
|
|
|
|
// will not downloading anything more, regardless of
|
|
|
|
// which pieces we have.
|
2010-11-29 02:33:05 +01:00
|
|
|
upload_only = 0x2000,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// This means the last time this peer picket a piece,
|
|
|
|
// it could not pick as many as it wanted because there
|
|
|
|
// were not enough free ones. i.e. all pieces this peer
|
|
|
|
// has were already requested from other peers.
|
2010-12-18 11:19:34 +01:00
|
|
|
endgame_mode = 0x4000,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// This flag is set if the peer was in holepunch mode
|
|
|
|
// when the connection succeeded. This typically only
|
|
|
|
// happens if both peers are behind a NAT and the peers
|
|
|
|
// connect via the NAT holepunch mechanism.
|
2013-04-08 18:30:19 +02:00
|
|
|
holepunched = 0x8000,
|
2013-10-27 20:56:37 +01:00
|
|
|
|
|
|
|
i2p_socket = 0x10000,
|
|
|
|
utp_socket = 0x20000,
|
2013-04-08 18:30:19 +02:00
|
|
|
rc4_encrypted = 0x100000,
|
2007-08-21 19:45:28 +02:00
|
|
|
plaintext_encrypted = 0x200000
|
2003-10-23 01:00:57 +02:00
|
|
|
};
|
2007-04-10 23:23:13 +02:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// tells you in which state the peer is in. It is set to
|
|
|
|
// any combination of the peer_flags_t enum.
|
2003-10-23 01:00:57 +02:00
|
|
|
unsigned int flags;
|
2007-04-10 23:23:13 +02:00
|
|
|
|
|
|
|
enum peer_source_flags
|
|
|
|
{
|
2013-08-07 09:19:17 +02:00
|
|
|
// The peer was received from the tracker.
|
2007-04-10 23:23:13 +02:00
|
|
|
tracker = 0x1,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The peer was received from the kademlia DHT.
|
2007-04-10 23:23:13 +02:00
|
|
|
dht = 0x2,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The peer was received from the peer exchange
|
|
|
|
// extension.
|
2007-04-10 23:23:13 +02:00
|
|
|
pex = 0x4,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The peer was received from the local service
|
|
|
|
// discovery (The peer is on the local network).
|
2007-04-10 23:23:13 +02:00
|
|
|
lsd = 0x8,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The peer was added from the fast resume data.
|
2007-09-15 22:17:23 +02:00
|
|
|
resume_data = 0x10,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// we received an incoming connection from this peer
|
2007-09-15 22:17:23 +02:00
|
|
|
incoming = 0x20
|
2007-04-10 23:23:13 +02:00
|
|
|
};
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// a combination of flags describing from which sources this peer
|
|
|
|
// was received.
|
2007-04-10 23:23:13 +02:00
|
|
|
int source;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// bits for the read_state and write_state
|
|
|
|
enum bw_state
|
|
|
|
{
|
|
|
|
// The peer is not waiting for any external events to
|
|
|
|
// send or receive data.
|
|
|
|
bw_idle = 0,
|
|
|
|
|
|
|
|
// The peer is waiting for the rate limiter.
|
|
|
|
bw_limit = 1,
|
|
|
|
|
|
|
|
// The peer has quota and is currently waiting for a
|
|
|
|
// network read or write operation to complete. This is
|
|
|
|
// the state all peers are in if there are no bandwidth
|
|
|
|
// limits.
|
|
|
|
bw_network = 2,
|
|
|
|
|
|
|
|
// The peer is waiting for the disk I/O thread to catch
|
|
|
|
// up writing buffers to disk before downloading more.
|
|
|
|
bw_disk = 4
|
|
|
|
};
|
2009-04-26 02:21:59 +02:00
|
|
|
#ifndef TORRENT_NO_DEPRECATE
|
|
|
|
enum bw_state_deprecated { bw_torrent = bw_limit, bw_global = bw_limit };
|
|
|
|
#endif
|
2008-01-14 00:46:43 +01:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// bitmasks indicating what state this peer
|
|
|
|
// is in with regards to sending and receiving data. The states are declared in the
|
|
|
|
// bw_state enum.
|
2008-01-14 00:46:43 +01:00
|
|
|
char read_state;
|
|
|
|
char write_state;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the IP-address to this peer. The type is an asio endpoint. For
|
|
|
|
// more info, see the asio_ documentation.
|
2013-08-11 08:04:24 +02:00
|
|
|
//
|
|
|
|
// .. _asio: http://asio.sourceforge.net/asio-0.3.8/doc/asio/reference.html
|
2006-04-25 23:04:48 +02:00
|
|
|
tcp::endpoint ip;
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// the current upload and download speed
|
|
|
|
// we have to and from this peer (including any protocol messages).
|
|
|
|
// updated about once per second
|
2009-07-19 06:59:27 +02:00
|
|
|
int up_speed;
|
|
|
|
int down_speed;
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// The transfer rates
|
|
|
|
// of payload data only
|
|
|
|
// updated about once per second
|
2009-07-19 06:59:27 +02:00
|
|
|
int payload_up_speed;
|
|
|
|
int payload_down_speed;
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// the total number of bytes downloaded
|
|
|
|
// from and uploaded to this peer. These numbers do not include the protocol chatter, but only
|
|
|
|
// the payload data.
|
2004-01-25 19:18:36 +01:00
|
|
|
size_type total_download;
|
|
|
|
size_type total_upload;
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// the peer's id as used in the bit torrent protocol. This id can be used to
|
|
|
|
// extract 'fingerprints' from the peer. Sometimes it can tell you which client the peer
|
|
|
|
// is using. See identify_client()_
|
2006-04-25 23:04:48 +02:00
|
|
|
peer_id pid;
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// a bitfield, with one bit per piece in the torrent.
|
|
|
|
// Each bit tells you if the peer has that piece (if it's set to 1)
|
|
|
|
// or if the peer miss that piece (set to 0).
|
2008-05-28 04:35:02 +02:00
|
|
|
bitfield pieces;
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// the number of bytes per second we are allowed to send to or receive from this
|
|
|
|
// peer. It may be -1 if there's no local limit on the peer. The global
|
|
|
|
// limit and the torrent limit may also be enforced.
|
2006-04-25 23:04:48 +02:00
|
|
|
int upload_limit;
|
|
|
|
int download_limit;
|
2007-05-02 21:47:38 +02:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the time since we last sent a request
|
|
|
|
// to this peer and since any transfer occurred with this peer
|
2007-05-25 21:42:10 +02:00
|
|
|
time_duration last_request;
|
|
|
|
time_duration last_active;
|
|
|
|
|
2009-02-17 03:33:45 +01:00
|
|
|
// the time until all blocks in the request
|
|
|
|
// queue will be d
|
|
|
|
time_duration download_queue_time;
|
2009-03-17 10:34:44 +01:00
|
|
|
int queue_bytes;
|
2009-02-17 03:33:45 +01:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of seconds until the current front piece request
|
|
|
|
// will time out. This timeout can be adjusted through ``session_settings::request_timeout``.
|
|
|
|
// -1 means that there is not outstanding request.
|
2008-06-29 11:50:42 +02:00
|
|
|
int request_timeout;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of bytes allocated
|
|
|
|
// and used for the peer's send buffer, respectively.
|
2007-05-25 21:42:10 +02:00
|
|
|
int send_buffer_size;
|
2008-01-10 23:13:23 +01:00
|
|
|
int used_send_buffer;
|
2007-05-25 21:42:10 +02:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of bytes
|
|
|
|
// allocated and used as receive buffer, respectively.
|
2008-04-10 12:03:23 +02:00
|
|
|
int receive_buffer_size;
|
|
|
|
int used_receive_buffer;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of pieces this peer has participated in
|
|
|
|
// sending us that turned out to fail the hash check.
|
2007-05-25 21:42:10 +02:00
|
|
|
int num_hashfails;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the two letter `ISO 3166 country code`__ for the country the peer
|
|
|
|
// is connected from. If the country hasn't been resolved yet, both chars are set
|
|
|
|
// to 0. If the resolution failed for some reason, the field is set to "--". If the
|
|
|
|
// resolution service returns an invalid country code, it is set to "!!".
|
|
|
|
// The ``countries.nerd.dk`` service is used to look up countries. This field will
|
|
|
|
// remain set to 0 unless the torrent is set to resolve countries, see `resolve_countries()`_.
|
|
|
|
//
|
|
|
|
// __ http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
|
2007-01-29 08:39:33 +01:00
|
|
|
char country[2];
|
2003-12-09 19:09:34 +01:00
|
|
|
|
2008-04-05 06:53:22 +02:00
|
|
|
#ifndef TORRENT_DISABLE_GEO_IP
|
2013-08-07 09:19:17 +02:00
|
|
|
// the name of the AS this peer is located in. This might be
|
|
|
|
// an empty string if there is no name in the geo ip database.
|
2008-04-05 06:53:22 +02:00
|
|
|
std::string inet_as_name;
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// the AS number the peer is located in.
|
2008-04-05 06:53:22 +02:00
|
|
|
int inet_as;
|
|
|
|
#endif
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// a measurement of the balancing of free download (that we get)
|
|
|
|
// and free upload that we give. Every peer gets a certain amount of free upload, but
|
|
|
|
// this member says how much *extra* free upload this peer has got. If it is a negative
|
|
|
|
// number it means that this was a peer from which we have got this amount of free
|
|
|
|
// download.
|
2004-01-25 19:18:36 +01:00
|
|
|
size_type load_balancing;
|
2003-12-16 14:33:29 +01:00
|
|
|
|
2004-01-05 00:51:54 +01:00
|
|
|
// this is the number of requests
|
|
|
|
// we have sent to this peer
|
|
|
|
// that we haven't got a response
|
|
|
|
// for yet
|
|
|
|
int download_queue_length;
|
2011-06-06 06:24:12 +02:00
|
|
|
|
|
|
|
// the number of block requests that have
|
|
|
|
// timed out, and are still in the download
|
|
|
|
// queue
|
|
|
|
int timed_out_requests;
|
|
|
|
|
|
|
|
// the number of busy requests in the download
|
|
|
|
// queue. A budy request is a request for a block
|
|
|
|
// we've also requested from a different peer
|
|
|
|
int busy_requests;
|
2004-01-05 00:51:54 +01:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of requests messages that are currently in the
|
|
|
|
// send buffer waiting to be sent.
|
2008-07-08 02:03:08 +02:00
|
|
|
int requests_in_buffer;
|
|
|
|
|
2007-09-10 10:07:18 +02:00
|
|
|
// the number of requests that is
|
|
|
|
// tried to be maintained (this is
|
|
|
|
// typically a function of download speed)
|
|
|
|
int target_dl_queue_length;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of piece-requests we have received from this peer
|
|
|
|
// that we haven't answered with a piece yet.
|
2004-01-14 12:46:26 +01:00
|
|
|
int upload_queue_length;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of times this peer has "failed". i.e. failed to connect
|
|
|
|
// or disconnected us. The failcount is decremented when we see this peer in a tracker
|
|
|
|
// response or peer exchange message.
|
2007-04-13 22:19:04 +02:00
|
|
|
int failcount;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// You can know which piece, and which part of that piece, that is currently being
|
|
|
|
// downloaded from a specific peer by looking at these four members.
|
|
|
|
// ``downloading_piece_index`` is the index of the piece that is currently being downloaded.
|
|
|
|
// This may be set to -1 if there's currently no piece downloading from this peer. If it is
|
|
|
|
// >= 0, the other three members are valid. ``downloading_block_index`` is the index of the
|
|
|
|
// block (or sub-piece) that is being downloaded. ``downloading_progress`` is the number
|
|
|
|
// of bytes of this block we have received from the peer, and ``downloading_total`` is
|
|
|
|
// the total number of bytes in this block.
|
2003-12-09 19:09:34 +01:00
|
|
|
int downloading_piece_index;
|
|
|
|
int downloading_block_index;
|
|
|
|
int downloading_progress;
|
|
|
|
int downloading_total;
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// a string describing the software at the other end of the connection.
|
|
|
|
// In some cases this information is not available, then it will contain a string
|
|
|
|
// that may give away something about which software is running in the other end.
|
|
|
|
// In the case of a web seed, the server type and version will be a part of this
|
|
|
|
// string.
|
2006-04-25 23:04:48 +02:00
|
|
|
std::string client;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
enum connection_type_t
|
2006-04-25 23:04:48 +02:00
|
|
|
{
|
2013-08-07 09:19:17 +02:00
|
|
|
// Regular bittorrent connection over TCP
|
2006-04-25 23:04:48 +02:00
|
|
|
standard_bittorrent = 0,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// Bittorrent connection over uTP
|
2008-12-30 04:54:07 +01:00
|
|
|
web_seed = 1,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// HTTP connection using the `BEP 19`_ protocol
|
2010-11-29 02:33:05 +01:00
|
|
|
http_seed = 2,
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// HTTP connection using the `BEP 17`_ protocol
|
2010-11-29 02:33:05 +01:00
|
|
|
bittorrent_utp = 3
|
2006-04-25 23:04:48 +02:00
|
|
|
};
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// the kind of connection this peer uses. See connection_type_t.
|
2006-04-25 23:04:48 +02:00
|
|
|
int connection_type;
|
2007-06-07 02:05:18 +02:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// an estimate of the rate this peer is downloading at, in
|
|
|
|
// bytes per second.
|
2007-06-07 02:05:18 +02:00
|
|
|
int remote_dl_rate;
|
2007-08-01 08:11:11 +02:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of bytes this peer has pending in the
|
|
|
|
// disk-io thread. Downloaded and waiting to be written to disk. This is what
|
|
|
|
// is capped by ``session_settings::max_queued_disk_bytes``.
|
2007-08-01 08:11:11 +02:00
|
|
|
int pending_disk_bytes;
|
2008-01-07 05:47:20 +01:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of bytes this peer has been
|
|
|
|
// assigned to be allowed to send and receive until it has to request more quota
|
|
|
|
// from the bandwidth manager.
|
2008-01-07 05:47:20 +01:00
|
|
|
int send_quota;
|
|
|
|
int receive_quota;
|
2008-02-09 23:42:56 +01:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// an estimated round trip time to this peer, in milliseconds. It is
|
|
|
|
// estimated by timing the the tcp ``connect()``. It may be 0 for incoming connections.
|
2008-02-09 23:42:56 +01:00
|
|
|
int rtt;
|
2008-04-03 08:11:21 +02:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the number of pieces this peer has.
|
2008-10-24 02:15:39 +02:00
|
|
|
int num_pieces;
|
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the highest download and upload
|
|
|
|
// rates seen on this connection. They are given in bytes per second. This number is
|
|
|
|
// reset to 0 on reconnect.
|
2008-04-03 08:11:21 +02:00
|
|
|
int download_rate_peak;
|
|
|
|
int upload_rate_peak;
|
2008-09-25 22:39:06 +02:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the progress of the peer in the range [0, 1]. This is always 0 when
|
|
|
|
// floating point operations are diabled, instead use ``progress_ppm``.
|
2009-07-19 06:59:27 +02:00
|
|
|
float progress; // [0, 1]
|
2013-08-07 09:19:17 +02:00
|
|
|
|
|
|
|
// indicates the download progress of the peer in the range [0, 1000000]
|
|
|
|
// (parts per million).
|
|
|
|
int progress_ppm;
|
2010-02-09 04:04:41 +01:00
|
|
|
|
|
|
|
int estimated_reciprocation_rate;
|
2010-07-17 09:13:14 +02:00
|
|
|
|
2013-08-07 09:19:17 +02:00
|
|
|
// the IP and port pair the socket is bound to locally. i.e. the IP
|
|
|
|
// address of the interface it's going out over. This may be useful for multi-homed
|
|
|
|
// clients with multiple interfaces to the internet.
|
2010-07-17 09:13:14 +02:00
|
|
|
tcp::endpoint local_endpoint;
|
2003-10-23 01:00:57 +02:00
|
|
|
};
|
|
|
|
|
2008-04-13 08:32:48 +02:00
|
|
|
struct TORRENT_EXPORT peer_list_entry
|
|
|
|
{
|
|
|
|
enum flags_t
|
|
|
|
{
|
2008-10-26 23:12:12 +01:00
|
|
|
banned = 1
|
2008-04-13 08:32:48 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
tcp::endpoint ip;
|
|
|
|
int flags;
|
|
|
|
boost::uint8_t failcount;
|
|
|
|
boost::uint8_t source;
|
|
|
|
};
|
2009-05-07 00:36:24 +02:00
|
|
|
|
|
|
|
// defined in policy.cpp
|
|
|
|
int source_rank(int source_bitmask);
|
2003-10-23 01:00:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif // TORRENT_PEER_INFO_HPP_INCLUDED
|