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

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

(libT) move the TR_GNUC macros from utils.h to a standalone header file so other libT headers can use them without getting an extra dependency tree.

  • Property svn:keywords set to Date Rev Author Id
File size: 4.6 KB
Line 
1/*
2 * This file Copyright (C) 2007-2008 Charles Kerr <charles@rebelbase.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 6948 2008-10-22 18:42:37Z charles $
11 */
12
13#ifndef TR_PEER_MGR_H
14#define TR_PEER_MGR_H
15
16#include <inttypes.h> /* uint16_t */
17
18#include "net.h" /* struct in_addr */
19#include "tr-gnuc.h"
20
21struct in_addr;
22struct tr_handle;
23struct tr_peer_stat;
24struct tr_torrent;
25typedef struct tr_peerMgr tr_peerMgr;
26
27enum
28{
29    /* corresponds to ut_pex's added.f flags */
30    ADDED_F_ENCRYPTION_FLAG = 1,
31
32    /* corresponds to ut_pex's added.f flags */
33    ADDED_F_SEED_FLAG = 2,
34};
35
36typedef struct tr_pex
37{
38    struct in_addr in_addr;
39    uint16_t    port;
40    uint8_t     flags;
41}
42tr_pex;
43
44int tr_pexCompare( const void * a, const void * b );
45
46tr_peerMgr* tr_peerMgrNew( struct tr_handle * ) TR_GNUC_MALLOC;
47
48void tr_peerMgrFree( tr_peerMgr * manager );
49
50int tr_peerMgrPeerIsSeed( const tr_peerMgr      * mgr,
51                          const uint8_t         * torrentHash,
52                          const struct in_addr  * addr );
53
54void tr_peerMgrAddIncoming( tr_peerMgr     * manager,
55                            struct in_addr * addr,
56                            uint16_t         port,
57                            int              socket );
58
59tr_pex * tr_peerMgrCompactToPex( const void    * compact,
60                                 size_t          compactLen,
61                                 const uint8_t * added_f,
62                                 size_t          added_f_len,
63                                 size_t        * setme_pex_count );
64
65void tr_peerMgrAddPex( tr_peerMgr     * manager,
66                       const uint8_t  * torrentHash,
67                       uint8_t          from,
68                       const tr_pex   * pex );
69
70void tr_peerMgrSetBlame( tr_peerMgr        * manager,
71                         const uint8_t     * torrentHash,
72                         tr_piece_index_t    pieceIndex,
73                         int                 success );
74
75int  tr_peerMgrGetPeers( tr_peerMgr      * manager,
76                         const uint8_t   * torrentHash,
77                         tr_pex         ** setme_pex );
78
79void tr_peerMgrStartTorrent( tr_peerMgr     * manager,
80                             const uint8_t  * torrentHash );
81
82void tr_peerMgrStopTorrent( tr_peerMgr      * manager,
83                             const uint8_t  * torrentHash );
84
85void tr_peerMgrAddTorrent( tr_peerMgr         * manager,
86                           struct tr_torrent  * tor );
87
88void tr_peerMgrRemoveTorrent( tr_peerMgr     * manager,
89                              const uint8_t  * torrentHash );
90
91void tr_peerMgrTorrentAvailability( const tr_peerMgr * manager,
92                                    const uint8_t    * torrentHash,
93                                    int8_t           * tab,
94                                    unsigned int       tabCount );
95
96struct tr_bitfield* tr_peerMgrGetAvailable( const tr_peerMgr * manager,
97                                            const uint8_t    * torrentHash );
98
99int tr_peerMgrHasConnections( const tr_peerMgr * manager,
100                              const uint8_t    * torrentHash );
101
102void tr_peerMgrTorrentStats( const tr_peerMgr * manager,
103                             const uint8_t * torrentHash,
104                             int * setmePeersKnown,
105                             int * setmePeersConnected,
106                             int * setmeSeedsConnected,
107                             int * setmeWebseedsSendingToUs,
108                             int * setmePeersSendingToUs,
109                             int * setmePeersGettingFromUs,
110                             int * setmePeersFrom ); /* TR_PEER_FROM__MAX */
111
112double tr_peerMgrGetRate( const tr_peerMgr  * manager,
113                          tr_direction        direction );
114
115struct tr_peer_stat* tr_peerMgrPeerStats( const tr_peerMgr  * manager,
116                                          const uint8_t     * torrentHash,
117                                          int               * setmeCount );
118
119float* tr_peerMgrWebSpeeds( const tr_peerMgr  * manager,
120                            const uint8_t     * torrentHash );
121
122
123struct tr_bitfield * tr_peerMgrGenerateAllowedSet( const uint32_t setCount,
124                                                   const uint32_t pieceCount,
125                                                   const uint8_t infohash[20],
126                                                   const struct in_addr * ip );
127
128
129#endif
Note: See TracBrowser for help on using the repository browser.