1
// libTorrent - BitTorrent library
2
// Copyright (C) 2005-2006, 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_INFO_H
38
#define LIBTORRENT_PEER_INFO_H
40
#include <torrent/hash_string.h>
41
#include <torrent/peer/client_info.h>
45
class LIBTORRENT_EXPORT PeerInfo {
47
friend class ConnectionList;
48
friend class Handshake;
49
friend class HandshakeManager;
50
friend class PeerList;
52
static const int flag_connected = (1 << 0);
53
static const int flag_incoming = (1 << 1);
54
static const int flag_handshake = (1 << 2);
56
PeerInfo(const sockaddr* address);
59
bool is_connected() const { return m_flags & flag_connected; }
60
bool is_incoming() const { return m_flags & flag_incoming; }
61
bool is_handshake() const { return m_flags & flag_handshake; }
63
int flags() const { return m_flags; }
65
const HashString& id() const { return m_id; }
66
const ClientInfo& client_info() const { return m_clientInfo; }
68
const char* options() const { return m_options; }
69
const sockaddr* socket_address() const { return m_address; }
71
uint16_t listen_port() const { return m_listenPort; }
73
uint32_t failed_counter() const { return m_failedCounter; }
74
void set_failed_counter(uint32_t c) { m_failedCounter = c; }
76
uint32_t transfer_counter() const { return m_transferCounter; }
77
void set_transfer_counter(uint32_t c) { m_transferCounter = c; }
79
uint32_t last_connection() const { return m_lastConnection; }
80
void set_last_connection(uint32_t tvsec) { m_lastConnection = tvsec; }
82
// Internal to libTorrent:
83
PeerConnectionBase* connection() { return m_connection; }
86
void set_flags(int flags) { m_flags |= flags; }
87
void unset_flags(int flags) { m_flags &= ~flags; }
89
HashString& mutable_id() { return m_id; }
90
ClientInfo& mutable_client_info() { return m_clientInfo; }
92
void set_port(uint16_t port) LIBTORRENT_NO_EXPORT;
93
void set_listen_port(uint16_t port) { m_listenPort = port; }
95
char* set_options() { return m_options; }
96
void set_connection(PeerConnectionBase* c) { m_connection = c; }
99
PeerInfo(const PeerInfo&);
100
void operator = (const PeerInfo&);
102
// Replace id with a char buffer, or a cheap struct?
105
ClientInfo m_clientInfo;
109
uint32_t m_failedCounter;
110
uint32_t m_transferCounter;
111
uint32_t m_lastConnection;
113
uint16_t m_listenPort;
115
// Replace this with a union. Since the user never copies PeerInfo
116
// it should be safe to not require sockaddr_in6 to be part of it.
119
PeerConnectionBase* m_connection;