source: trunk/libtransmission/peer-io.h @ 7441

Last change on this file since 7441 was 7441, checked in by charles, 12 years ago

try to rework the bandwidth code yet again s.t. it satisfies all three: (1) fairly distributes bandwidth across all peers, (2) scales well in high-bandwidth situations, (3) is good at hitting and staying at bandwidth limits/goals

  • Property svn:keywords set to Date Rev Author Id
File size: 7.1 KB
Line 
1/*
2 * This file Copyright (C) 2007-2008 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-io.h 7441 2008-12-20 22:19:34Z charles $
11 */
12
13#ifndef __TRANSMISSION__
14#error only libtransmission should #include this header.
15#endif
16
17#ifndef TR_PEER_IO_H
18#define TR_PEER_IO_H
19
20/**
21***
22**/
23
24struct evbuffer;
25struct tr_address;
26struct tr_bandwidth;
27struct tr_crypto;
28typedef struct tr_peerIo tr_peerIo;
29
30/**
31***
32**/
33
34tr_peerIo*  tr_peerIoNewOutgoing( tr_session              * session,
35                                  const struct tr_address * addr,
36                                  tr_port                   port,
37                                  const  uint8_t          * torrentHash );
38
39tr_peerIo*  tr_peerIoNewIncoming( tr_session              * session,
40                                  const struct tr_address * addr,
41                                  tr_port                   port,
42                                  int                       socket );
43
44void        tr_peerIoFree       ( tr_peerIo               * io );
45
46
47/**
48***
49**/
50
51void        tr_peerIoEnableLTEP( tr_peerIo * io, tr_bool flag );
52
53tr_bool     tr_peerIoSupportsLTEP( const tr_peerIo * io );
54
55void        tr_peerIoEnableFEXT( tr_peerIo * io, tr_bool flag );
56
57tr_bool     tr_peerIoSupportsFEXT( const tr_peerIo * io );
58
59/**
60***
61**/
62
63tr_session* tr_peerIoGetSession ( tr_peerIo * io );
64
65const char* tr_peerIoAddrStr( const struct tr_address * addr,
66                              tr_port                   port );
67
68const char* tr_peerIoGetAddrStr( const tr_peerIo * io );
69
70const struct tr_address * tr_peerIoGetAddress( const tr_peerIo * io,
71                                               tr_port         * port );
72
73const uint8_t*       tr_peerIoGetTorrentHash( tr_peerIo * io );
74
75int                  tr_peerIoHasTorrentHash( const tr_peerIo * io );
76
77void                 tr_peerIoSetTorrentHash( tr_peerIo *     io,
78                                              const uint8_t * hash );
79
80int                  tr_peerIoReconnect( tr_peerIo * io );
81
82tr_bool              tr_peerIoIsIncoming( const tr_peerIo * io );
83
84int                  tr_peerIoGetAge( const tr_peerIo * io );
85
86
87/**
88***
89**/
90
91void                 tr_peerIoSetPeersId( tr_peerIo *     io,
92                                          const uint8_t * peer_id );
93
94const uint8_t*       tr_peerIoGetPeersId( const tr_peerIo * io );
95
96/**
97***
98**/
99
100typedef enum
101{
102    READ_NOW,
103    READ_LATER,
104    READ_ERR
105}
106ReadState;
107
108typedef ReadState ( *tr_can_read_cb  )( tr_peerIo        * io,
109                                        void             * user_data,
110                                        size_t           * setme_piece_byte_count );
111
112typedef void      ( *tr_did_write_cb )( tr_peerIo        * io,
113                                        size_t             bytesWritten,
114                                        int                wasPieceData,
115                                        void             * userData );
116
117typedef void      ( *tr_net_error_cb )( tr_peerIo        * io,
118                                        short              what,
119                                        void             * userData );
120
121void    tr_peerIoSetIOFuncs      ( tr_peerIo        * io,
122                                   tr_can_read_cb     readcb,
123                                   tr_did_write_cb    writecb,
124                                   tr_net_error_cb    errcb,
125                                   void             * user_data );
126
127/**
128***
129**/
130
131void    tr_peerIoWrite          ( tr_peerIo         * io,
132                                  const void        * writeme,
133                                  size_t              writemeLen,
134                                  int                 isPieceData );
135
136void    tr_peerIoWriteBuf       ( tr_peerIo         * io,
137                                  struct evbuffer   * buf,
138                                  int                 isPieceData );
139
140/**
141***
142**/
143
144struct tr_crypto* tr_peerIoGetCrypto( tr_peerIo * io );
145
146typedef enum
147{
148    /* these match the values in MSE's crypto_select */
149    PEER_ENCRYPTION_NONE  = ( 1 << 0 ),
150    PEER_ENCRYPTION_RC4   = ( 1 << 1 )
151}
152EncryptionMode;
153
154void      tr_peerIoSetEncryption( tr_peerIo * io,
155                                  int         encryptionMode );
156
157int       tr_peerIoIsEncrypted( const tr_peerIo * io );
158
159void      tr_peerIoWriteBytes( tr_peerIo *       io,
160                               struct evbuffer * outbuf,
161                               const void *      bytes,
162                               size_t            byteCount );
163
164void      tr_peerIoWriteUint8( tr_peerIo *       io,
165                               struct evbuffer * outbuf,
166                               uint8_t           writeme );
167
168void      tr_peerIoWriteUint16( tr_peerIo *       io,
169                                struct evbuffer * outbuf,
170                                uint16_t          writeme );
171
172void      tr_peerIoWriteUint32( tr_peerIo *       io,
173                                struct evbuffer * outbuf,
174                                uint32_t          writeme );
175
176void      tr_peerIoReadBytes( tr_peerIo *       io,
177                              struct evbuffer * inbuf,
178                              void *            bytes,
179                              size_t            byteCount );
180
181void      tr_peerIoReadUint8( tr_peerIo *       io,
182                              struct evbuffer * inbuf,
183                              uint8_t *         setme );
184
185void      tr_peerIoReadUint16( tr_peerIo *       io,
186                               struct evbuffer * inbuf,
187                               uint16_t *        setme );
188
189void      tr_peerIoReadUint32( tr_peerIo *       io,
190                               struct evbuffer * inbuf,
191                               uint32_t *        setme );
192
193void      tr_peerIoDrain( tr_peerIo *       io,
194                          struct evbuffer * inbuf,
195                          size_t            byteCount );
196
197/**
198***
199**/
200
201size_t    tr_peerIoGetWriteBufferSpace( const tr_peerIo * io );
202
203void      tr_peerIoSetBandwidth( tr_peerIo            * io,
204                                 struct tr_bandwidth  * bandwidth );
205
206void      tr_peerIoBandwidthUsed( tr_peerIo           * io,
207                                  tr_direction          direction,
208                                  size_t                byteCount,
209                                  int                   isPieceData );
210
211/**
212***
213**/
214
215tr_bool   tr_peerIoHasBandwidthLeft( const tr_peerIo  * io,
216                                     tr_direction       direction );
217
218void      tr_peerIoSetEnabled( tr_peerIo    * io,
219                               tr_direction   dir,
220                               tr_bool        isEnabled );
221                       
222int       tr_peerIoFlush( tr_peerIo     * io,
223                          tr_direction    dir,
224                          size_t          byteLimit );
225
226struct evbuffer * tr_peerIoGetReadBuffer( tr_peerIo * io );
227
228
229
230
231#endif
Note: See TracBrowser for help on using the repository browser.