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

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

(trunk libT) really fuck up the peer i/o code. also this breaks the mac build until someone removes iobuf.c from libtransmission's list of files.

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