source: trunk/libtransmission/peer-mgr.h @ 8561

Last change on this file since 8561 was 8561, checked in by charles, 13 years ago

(trunk libT) re-start work on making libT doxygen friendly. still a long ways to go on this.

  • Property svn:keywords set to Date Rev Author Id
File size: 5.4 KB
Line 
1/*
2 * This file Copyright (C) 2007-2009 Charles Kerr <charles@transmissionbt.com>
3 *
4 * This file is licensed by the GPL version 2.  Works owned by the
5 * Transmission project are granted a special exemption to clause 2(b)
6 * so that the bulk of its code can remain under the MIT license.
7 * This exemption does not extend to derived works not owned by
8 * the Transmission project.
9 *
10 * $Id: peer-mgr.h 8561 2009-05-29 19:17:12Z charles $
11 */
12
13#ifndef __TRANSMISSION__
14#error only libtransmission should #include this header.
15#endif
16
17#ifndef TR_PEER_MGR_H
18#define TR_PEER_MGR_H
19
20#include <inttypes.h> /* uint16_t */
21
22#ifdef WIN32
23 #include <winsock2.h> /* struct in_addr */
24#endif
25
26#include "net.h"
27#include "publish.h" /* tr_publisher_tag */
28
29/**
30 * @addtogroup peers Peers
31 * @{
32 */
33
34struct tr_peer_stat;
35struct tr_torrent;
36typedef struct tr_peerMgr tr_peerMgr;
37
38enum
39{
40    /* corresponds to ut_pex's added.f flags */
41    ADDED_F_ENCRYPTION_FLAG = 1,
42
43    /* corresponds to ut_pex's added.f flags */
44    ADDED_F_SEED_FLAG = 2,
45};
46
47typedef struct tr_pex
48{
49    tr_address addr;
50    tr_port    port;
51    uint8_t    flags;
52}
53tr_pex;
54
55
56struct tr_bandwidth;
57struct tr_bitfield;
58struct tr_peerIo;
59struct tr_peermsgs;
60
61enum
62{
63    ENCRYPTION_PREFERENCE_UNKNOWN,
64    ENCRYPTION_PREFERENCE_YES,
65    ENCRYPTION_PREFERENCE_NO
66};
67
68/* opaque forward declaration */
69struct peer_atom;
70
71/**
72 * State information about a connected peer.
73 *
74 * @see struct peer_atom
75 * @see tr_peermsgs
76 */
77typedef struct tr_peer
78{
79    tr_bool                  peerIsChoked;
80    tr_bool                  peerIsInterested;
81    tr_bool                  clientIsChoked;
82    tr_bool                  clientIsInterested;
83    tr_bool                  doPurge;
84
85    /* number of bad pieces they've contributed to */
86    uint8_t                  strikes;
87
88    uint8_t                  encryption_preference;
89    tr_port                  port;
90    tr_port                  dht_port;
91    tr_address               addr;
92    struct tr_peerIo       * io;
93    struct peer_atom       * atom;
94
95    struct tr_bitfield     * blame;
96    struct tr_bitfield     * have;
97
98    /** how complete the peer's copy of the torrent is. [0.0...1.0] */
99    float                    progress;
100
101    /* the client name from the `v' string in LTEP's handshake dictionary */
102    char                   * client;
103
104    time_t                   chokeChangedAt;
105
106    struct tr_peermsgs     * msgs;
107    tr_publisher_tag         msgsTag;
108}
109tr_peer;
110
111
112int tr_pexCompare( const void * a, const void * b );
113
114tr_peerMgr* tr_peerMgrNew( tr_session * );
115
116void tr_peerMgrFree( tr_peerMgr * manager );
117
118tr_bool tr_peerMgrPeerIsSeed( const tr_torrent * tor,
119                              const tr_address * addr );
120
121void tr_peerMgrAddIncoming( tr_peerMgr  * manager,
122                            tr_address  * addr,
123                            tr_port       port,
124                            int           socket );
125
126tr_pex * tr_peerMgrCompactToPex( const void    * compact,
127                                 size_t          compactLen,
128                                 const uint8_t * added_f,
129                                 size_t          added_f_len,
130                                 size_t        * setme_pex_count );
131
132tr_pex * tr_peerMgrCompact6ToPex( const void    * compact,
133                                  size_t          compactLen,
134                                  const uint8_t * added_f,
135                                  size_t          added_f_len,
136                                  size_t        * pexCount );
137
138tr_pex * tr_peerMgrArrayToPex( const void * array,
139                               size_t       arrayLen,
140                               size_t      * setme_pex_count );
141
142void tr_peerMgrAddPex( tr_torrent     * tor,
143                       uint8_t          from,
144                       const tr_pex   * pex );
145
146void tr_peerMgrSetBlame( tr_torrent        * tor,
147                         tr_piece_index_t    pieceIndex,
148                         int                 success );
149
150int  tr_peerMgrGetPeers( tr_torrent      * tor,
151                         tr_pex         ** setme_pex,
152                         uint8_t           af);
153
154void tr_peerMgrStartTorrent( tr_torrent * tor );
155
156void tr_peerMgrStopTorrent( tr_torrent * tor );
157
158void tr_peerMgrAddTorrent( tr_peerMgr         * manager,
159                           struct tr_torrent  * tor );
160
161void tr_peerMgrRemoveTorrent( tr_torrent * tor );
162
163void tr_peerMgrTorrentAvailability( const tr_torrent * tor,
164                                    int8_t           * tab,
165                                    unsigned int       tabCount );
166
167struct tr_bitfield* tr_peerMgrGetAvailable( const tr_torrent * tor );
168
169void tr_peerMgrTorrentStats( tr_torrent * tor,
170                             int * setmePeersKnown,
171                             int * setmePeersConnected,
172                             int * setmeSeedsConnected,
173                             int * setmeWebseedsSendingToUs,
174                             int * setmePeersSendingToUs,
175                             int * setmePeersGettingFromUs,
176                             int * setmePeersFrom ); /* TR_PEER_FROM__MAX */
177
178struct tr_peer_stat* tr_peerMgrPeerStats( const tr_torrent * tor,
179                                          int              * setmeCount );
180
181float tr_peerMgrGetWebseedSpeed( const tr_torrent * tor, uint64_t now );
182
183float* tr_peerMgrWebSpeeds( const tr_torrent * tor );
184
185
186double tr_peerGetPieceSpeed( const tr_peer    * peer,
187                             uint64_t           now,
188                             tr_direction       direction );
189
190/* @} */
191
192#endif
Note: See TracBrowser for help on using the repository browser.