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

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

(libT) yet another stab at getting bandwidth management under control. this version may suck less than previous attempts. It also breaks the mac build until someone adds iobuf.[ch] to xcode...

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