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
49
class HandshakeManager;
54
friend class Handshake;
55
friend class HandshakeManager;
56
friend class PeerList;
58
static const int flag_connected = (1 << 0);
59
static const int flag_incoming = (1 << 1);
60
static const int flag_handshake = (1 << 2);
62
PeerInfo(const sockaddr* address);
65
bool is_valid() const;
66
bool is_connected() const { return m_flags & flag_connected; }
67
bool is_incoming() const { return m_flags & flag_incoming; }
68
bool is_handshake() const { return m_flags & flag_handshake; }
70
const std::string& id() const { return m_id; }
72
int flags() const { return m_flags; }
74
const char* options() const { return m_options; }
75
const sockaddr* socket_address() const { return m_address; }
77
uint16_t listen_port() const { return m_listenPort; }
79
uint32_t failed_counter() const { return m_failedCounter; }
80
void set_failed_counter(uint32_t c) { m_failedCounter = c; }
82
uint32_t transfer_counter() const { return m_transferCounter; }
83
void set_transfer_counter(uint32_t c) { m_transferCounter = c; }
85
uint32_t last_connection() const { return m_lastConnection; }
86
void set_last_connection(uint32_t tvsec) { m_lastConnection = tvsec; }
89
void set_flags(int flags) { m_flags |= flags; }
90
void unset_flags(int flags) { m_flags &= ~flags; }
92
void set_id(const std::string& id) { m_id = id; }
94
void set_port(uint16_t port);
95
void set_listen_port(uint16_t port) { m_listenPort = port; }
97
char* set_options() { return m_options; }
100
PeerInfo(const PeerInfo&);
101
void operator = (const PeerInfo&);
103
// Replace id with a char buffer, or a cheap struct?
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.
120
} // namespace torrent