source: trunk/libtransmission/peer-mgr.h

Last change on this file was 14724, checked in by jordan, 5 years ago

use '#pragma once' instead of #ifndef..#define..#endif guards

  • Property svn:keywords set to Date Rev Author Id
File size: 6.8 KB
Line 
1/*
2 * This file Copyright (C) 2007-2014 Mnemosyne LLC
3 *
4 * It may be used under the GNU GPL versions 2 or 3
5 * or any future license endorsed by Mnemosyne LLC.
6 *
7 * $Id: peer-mgr.h 14724 2016-03-29 16:37:21Z mikedld $
8 */
9
10#ifndef __TRANSMISSION__
11 #error only libtransmission should #include this header.
12#endif
13
14#pragma once
15
16#include <inttypes.h> /* uint16_t */
17
18#ifdef _WIN32
19 #include <winsock2.h> /* struct in_addr */
20#endif
21
22#include "net.h" /* tr_address */
23#include "peer-common.h"
24#include "quark.h"
25
26/**
27 * @addtogroup peers Peers
28 * @{
29 */
30
31struct UTPSocket;
32struct tr_peer_stat;
33struct tr_torrent;
34typedef struct tr_peerMgr tr_peerMgr;
35
36/* added_f's bitwise-or'ed flags */
37enum
38{
39  /* true if the peer supports encryption */
40  ADDED_F_ENCRYPTION_FLAG = 1,
41
42  /* true if the peer is a seed or partial seed */
43  ADDED_F_SEED_FLAG = 2,
44
45  /* true if the peer supports uTP */
46  ADDED_F_UTP_FLAGS = 4,
47
48  /* true if the peer has holepunch support */
49  ADDED_F_HOLEPUNCH = 8,
50
51  /* true if the peer telling us about this peer
52   * initiated the connection (implying that it is connectible) */
53  ADDED_F_CONNECTABLE = 16
54};
55
56typedef struct tr_pex
57{
58  tr_address addr;
59  tr_port    port; /* this field is in network byte order */
60  uint8_t    flags;
61}
62tr_pex;
63
64struct peer_atom;
65struct tr_peerIo;
66struct tr_peerMsgs;
67struct tr_swarm;
68
69static inline bool
70tr_isPex (const tr_pex * pex)
71{
72  return pex && tr_address_is_valid (&pex->addr);
73}
74
75const tr_address * tr_peerAddress (const tr_peer *);
76
77int tr_pexCompare (const void * a, const void * b);
78
79tr_peerMgr * tr_peerMgrNew                  (tr_session          * session);
80
81void         tr_peerMgrFree                 (tr_peerMgr          * manager);
82
83bool         tr_peerMgrPeerIsSeed           (const tr_torrent    * tor,
84                                             const tr_address    * addr);
85
86void         tr_peerMgrSetUtpSupported      (tr_torrent          * tor,
87                                             const tr_address    * addr);
88
89void         tr_peerMgrSetUtpFailed         (tr_torrent          * tor,
90                                             const tr_address    * addr,
91                                             bool                  failed);
92
93void         tr_peerMgrGetNextRequests      (tr_torrent          * torrent,
94                                             tr_peer             * peer,
95                                             int                   numwant,
96                                             tr_block_index_t    * setme,
97                                             int                 * numgot,
98                                             bool                  get_intervals);
99
100bool         tr_peerMgrDidPeerRequest       (const tr_torrent    * torrent,
101                                             const tr_peer       * peer,
102                                             tr_block_index_t      block);
103
104void         tr_peerMgrRebuildRequests      (tr_torrent          * torrent);
105
106void         tr_peerMgrAddIncoming          (tr_peerMgr          * manager,
107                                             tr_address          * addr,
108                                             tr_port               port,
109                                             tr_socket_t           socket,
110                                             struct UTPSocket    * utp_socket);
111
112tr_pex *     tr_peerMgrCompactToPex         (const void          * compact,
113                                             size_t                compactLen,
114                                             const uint8_t       * added_f,
115                                             size_t                added_f_len,
116                                             size_t              * setme_pex_count);
117
118tr_pex *     tr_peerMgrCompact6ToPex        (const void          * compact,
119                                             size_t                compactLen,
120                                             const uint8_t       * added_f,
121                                             size_t                added_f_len,
122                                             size_t              * pexCount);
123
124tr_pex *     tr_peerMgrArrayToPex           (const void          * array,
125                                             size_t                arrayLen,
126                                             size_t              * setme_pex_count);
127
128/**
129 * @param seedProbability [0..100] for likelihood that the peer is a seed; -1 for unknown
130 */
131void         tr_peerMgrAddPex               (tr_torrent          * tor,
132                                             uint8_t               from,
133                                             const tr_pex        * pex,
134                                             int8_t                seedProbability);
135
136void         tr_peerMgrMarkAllAsSeeds       (tr_torrent          * tor);
137
138enum
139{
140  TR_PEERS_CONNECTED,
141  TR_PEERS_INTERESTING
142};
143
144int          tr_peerMgrGetPeers             (tr_torrent          * tor,
145                                             tr_pex             ** setme_pex,
146                                             uint8_t               address_type,
147                                             uint8_t               peer_list_mode,
148                                             int                   max_peer_count);
149
150void         tr_peerMgrStartTorrent         (tr_torrent          * tor);
151
152void         tr_peerMgrStopTorrent          (tr_torrent          * tor);
153
154void         tr_peerMgrAddTorrent           (tr_peerMgr          * manager,
155                                             struct tr_torrent   * tor);
156
157void         tr_peerMgrRemoveTorrent        (tr_torrent          * tor);
158
159void         tr_peerMgrTorrentAvailability  (const tr_torrent    * tor,
160                                             int8_t              * tab,
161                                             unsigned int          tabCount);
162
163uint64_t     tr_peerMgrGetDesiredAvailable  (const tr_torrent    * tor);
164
165void         tr_peerMgrOnTorrentGotMetainfo (tr_torrent         * tor);
166
167void         tr_peerMgrOnBlocklistChanged   (tr_peerMgr         * manager);
168
169struct tr_peer_stat * tr_peerMgrPeerStats   (const tr_torrent   * tor,
170                                             int                * setmeCount);
171
172double *     tr_peerMgrWebSpeeds_KBps       (const tr_torrent   * tor);
173
174unsigned int tr_peerGetPieceSpeed_Bps       (const tr_peer      * peer,
175                                             uint64_t             now,
176                                             tr_direction         direction);
177
178void         tr_peerMgrClearInterest        (tr_torrent         * tor);
179
180void         tr_peerMgrGotBadPiece          (tr_torrent         * tor,
181                                             tr_piece_index_t     pieceIndex);
182
183void         tr_peerMgrPieceCompleted       (tr_torrent         * tor,
184                                             tr_piece_index_t     pieceIndex);
185
186
187
188/* @} */
Note: See TracBrowser for help on using the repository browser.