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

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

(trunk libT) Get rid of peer-mgr-private.h (from wereHamster)

  • Property svn:keywords set to Date Rev Author Id
File size: 6.1 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 7705 2009-01-13 16:32:43Z 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
29struct tr_peer_stat;
30struct tr_torrent;
31typedef struct tr_peerMgr tr_peerMgr;
32
33enum
34{
35    /* corresponds to ut_pex's added.f flags */
36    ADDED_F_ENCRYPTION_FLAG = 1,
37
38    /* corresponds to ut_pex's added.f flags */
39    ADDED_F_SEED_FLAG = 2,
40};
41
42typedef struct tr_pex
43{
44    tr_address addr;
45    tr_port    port;
46    uint8_t    flags;
47}
48tr_pex;
49
50
51struct tr_bandwidth;
52struct tr_bitfield;
53struct tr_peerIo;
54struct tr_peermsgs;
55
56enum
57{
58    ENCRYPTION_PREFERENCE_UNKNOWN,
59    ENCRYPTION_PREFERENCE_YES,
60    ENCRYPTION_PREFERENCE_NO
61};
62
63/**
64 * State information about a connected peer.
65 *
66 * @see struct peer_atom
67 * @see tr_peermsgs
68 */
69typedef struct tr_peer
70{
71    tr_bool                  peerIsChoked;
72    tr_bool                  peerIsInterested;
73    tr_bool                  clientIsChoked;
74    tr_bool                  clientIsInterested;
75    tr_bool                  doPurge;
76
77    /* number of bad pieces they've contributed to */
78    uint8_t                  strikes;
79
80    uint8_t                  encryption_preference;
81    tr_port                  port;
82    tr_address               addr;
83    struct tr_peerIo       * io;
84
85    struct tr_bitfield     * blame;
86    struct tr_bitfield     * have;
87
88    /** how complete the peer's copy of the torrent is. [0.0...1.0] */
89    float                    progress;
90
91    /* the client name from the `v' string in LTEP's handshake dictionary */
92    char                   * client;
93
94    time_t                   chokeChangedAt;
95
96    struct tr_peermsgs     * msgs;
97    tr_publisher_tag         msgsTag;
98}
99tr_peer;
100
101
102int tr_pexCompare( const void * a, const void * b );
103
104tr_peerMgr* tr_peerMgrNew( tr_session * );
105
106void tr_peerMgrFree( tr_peerMgr * manager );
107
108tr_bool tr_peerMgrPeerIsSeed( const tr_peerMgr  * mgr,
109                              const uint8_t     * torrentHash,
110                              const tr_address  * addr );
111
112void tr_peerMgrAddIncoming( tr_peerMgr  * manager,
113                            tr_address  * addr,
114                            tr_port       port,
115                            int           socket );
116
117tr_pex * tr_peerMgrCompactToPex( const void    * compact,
118                                 size_t          compactLen,
119                                 const uint8_t * added_f,
120                                 size_t          added_f_len,
121                                 size_t        * setme_pex_count );
122
123tr_pex * tr_peerMgrCompact6ToPex( const void    * compact,
124                                  size_t          compactLen,
125                                  const uint8_t * added_f,
126                                  size_t          added_f_len,
127                                  size_t        * pexCount );
128
129tr_pex * tr_peerMgrArrayToPex( const void * array,
130                               size_t       arrayLen,
131                               size_t      * setme_pex_count );
132
133void tr_peerMgrAddPex( tr_peerMgr     * manager,
134                       const uint8_t  * torrentHash,
135                       uint8_t          from,
136                       const tr_pex   * pex );
137
138void tr_peerMgrSetBlame( tr_peerMgr        * manager,
139                         const uint8_t     * torrentHash,
140                         tr_piece_index_t    pieceIndex,
141                         int                 success );
142
143int  tr_peerMgrGetPeers( tr_peerMgr      * manager,
144                         const uint8_t   * torrentHash,
145                         tr_pex         ** setme_pex,
146                         uint8_t           af);
147
148void tr_peerMgrStartTorrent( tr_peerMgr     * manager,
149                             const uint8_t  * torrentHash );
150
151void tr_peerMgrStopTorrent( tr_peerMgr      * manager,
152                             const uint8_t  * torrentHash );
153
154void tr_peerMgrAddTorrent( tr_peerMgr         * manager,
155                           struct tr_torrent  * tor );
156
157void tr_peerMgrRemoveTorrent( tr_peerMgr     * manager,
158                              const uint8_t  * torrentHash );
159
160void tr_peerMgrTorrentAvailability( const tr_peerMgr * manager,
161                                    const uint8_t    * torrentHash,
162                                    int8_t           * tab,
163                                    unsigned int       tabCount );
164
165struct tr_bitfield* tr_peerMgrGetAvailable( const tr_peerMgr * manager,
166                                            const uint8_t    * torrentHash );
167
168int tr_peerMgrHasConnections( const tr_peerMgr * manager,
169                              const uint8_t    * torrentHash );
170
171void tr_peerMgrTorrentStats( const tr_peerMgr * manager,
172                             const uint8_t * torrentHash,
173                             int * setmePeersKnown,
174                             int * setmePeersConnected,
175                             int * setmeSeedsConnected,
176                             int * setmeWebseedsSendingToUs,
177                             int * setmePeersSendingToUs,
178                             int * setmePeersGettingFromUs,
179                             int * setmePeersFrom ); /* TR_PEER_FROM__MAX */
180
181struct tr_peer_stat* tr_peerMgrPeerStats( const tr_peerMgr  * manager,
182                                          const uint8_t     * torrentHash,
183                                          int               * setmeCount );
184
185float* tr_peerMgrWebSpeeds( const tr_peerMgr  * manager,
186                            const uint8_t     * torrentHash );
187
188
189double tr_peerGetPieceSpeed( const tr_peer    * peer,
190                             uint64_t           now,
191                             tr_direction       direction );
192
193#endif
Note: See TracBrowser for help on using the repository browser.