source: branches/1.4x/libtransmission/peer-io.h @ 7455

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

(1.4x libT) backport handshake, peer, bandwidth, peer-io to 1.4x.

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