1
// libTorrent - BitTorrent library
2
// Copyright (C) 2005-2007, Jari Sundell
4
// This program is free software; you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation; either version 2 of the License, or
7
// (at your option) any later version.
9
// This program is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
// GNU General Public License for more details.
14
// You should have received a copy of the GNU General Public License
15
// along with this program; if not, write to the Free Software
16
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
// In addition, as a special exception, the copyright holders give
19
// permission to link the code of portions of this program with the
20
// OpenSSL library under certain conditions as described in each
21
// individual source file, and distribute linked combinations
24
// You must obey the GNU General Public License in all respects for
25
// all of the code used other than OpenSSL. If you modify file(s)
26
// with this exception, you may extend this exception to your version
27
// of the file(s), but you are not obligated to do so. If you do not
28
// wish to do so, delete this exception statement from your version.
29
// If you delete this exception statement from all source files in the
30
// program, then also delete it here.
32
// Contact: Jari Sundell <jaris@ifi.uio.no>
35
// 3185 Skoppum, NORWAY
37
#ifndef LIBTORRENT_PEER_H
38
#define LIBTORRENT_PEER_H
41
#include <torrent/common.h>
42
#include <torrent/peer/peer_info.h>
46
class PeerConnectionBase;
48
// == and = operators works as expected.
50
// The Peer class is a wrapper around the internal peer class. This
51
// peer class may be invalidated during a torrent::work call. So if
52
// you keep a list or single instances in the client, you need to
53
// listen to the appropriate signals from the download to keep up to
55
class LIBTORRENT_EXPORT Peer {
57
// Does not check if it has been removed from the download.
58
bool is_incoming() const { return peer_info()->is_incoming(); }
59
bool is_encrypted() const;
60
bool is_obfuscated() const;
62
bool is_up_choked() const;
63
bool is_up_interested() const;
65
bool is_down_choked() const;
66
bool is_down_choked_limited() const;
67
bool is_down_queued() const;
68
bool is_down_interested() const;
70
bool is_snubbed() const;
71
bool is_banned() const;
73
void set_snubbed(bool v);
74
void set_banned(bool v);
76
const HashString& id() const { return peer_info()->id(); }
77
const char* options() const { return peer_info()->options(); }
78
const sockaddr* address() const { return peer_info()->socket_address(); }
80
const Rate* down_rate() const;
81
const Rate* up_rate() const;
82
const Rate* peer_rate() const;
84
const Bitfield* bitfield() const;
86
const BlockTransfer* transfer() const;
88
uint32_t incoming_queue_size() const;
89
uint32_t outgoing_queue_size() const;
91
uint32_t chunks_done() const;
93
uint32_t failed_counter() const { return peer_info()->failed_counter(); }
95
void disconnect(int flags);
101
const PeerInfo* peer_info() const { return m_peerInfo; }
103
PeerConnectionBase* m_ptr() { return reinterpret_cast<PeerConnectionBase*>(this); }
104
const PeerConnectionBase* c_ptr() const { return reinterpret_cast<const PeerConnectionBase*>(this); }
111
void operator = (const Peer&);
113
bool operator == (const Peer& p) const;
115
PeerInfo* m_peerInfo;