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

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

(libT) add #ifdefs to ensure that client apps don't #include private libtransmission headers.

  • Property svn:keywords set to Date Rev Author Id
File size: 6.9 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 7151 2008-11-24 20:17:36Z 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 bufferevent;
27struct tr_bandwidth;
28struct tr_crypto;
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 bufferevent   * ev,
114                                        void                 * user_data );
115
116typedef void      ( *tr_did_write_cb )( tr_peerIo            * io,
117                                        size_t                 bytesWritten,
118                                        int                    wasPieceData,
119                                        void                 * userData );
120
121typedef void      ( *tr_net_error_cb )( struct bufferevent  * ev,
122                                        short                 what,
123                                        void                * userData );
124
125void    tr_peerIoSetIOFuncs      ( tr_peerIo        * io,
126                                   tr_can_read_cb     readcb,
127                                   tr_did_write_cb    writecb,
128                                   tr_net_error_cb    errcb,
129                                   void             * user_data );
130
131/**
132***
133**/
134
135void    tr_peerIoWrite          ( tr_peerIo         * io,
136                                  const void        * writeme,
137                                  size_t              writemeLen,
138                                  int                 isPieceData );
139
140void    tr_peerIoWriteBuf       ( tr_peerIo         * io,
141                                  struct evbuffer   * buf,
142                                  int                 isPieceData );
143
144/**
145***
146**/
147
148struct tr_crypto* tr_peerIoGetCrypto( tr_peerIo * io );
149
150typedef enum
151{
152    /* these match the values in MSE's crypto_select */
153    PEER_ENCRYPTION_NONE  = ( 1 << 0 ),
154    PEER_ENCRYPTION_RC4   = ( 1 << 1 )
155}
156EncryptionMode;
157
158void              tr_peerIoSetEncryption( tr_peerIo * io,
159                                          int         encryptionMode );
160
161int               tr_peerIoIsEncrypted( const tr_peerIo * io );
162
163void              tr_peerIoWriteBytes( tr_peerIo *       io,
164                                       struct evbuffer * outbuf,
165                                       const void *      bytes,
166                                       size_t            byteCount );
167
168void              tr_peerIoWriteUint8( tr_peerIo *       io,
169                                       struct evbuffer * outbuf,
170                                       uint8_t           writeme );
171
172void              tr_peerIoWriteUint16( tr_peerIo *       io,
173                                        struct evbuffer * outbuf,
174                                        uint16_t          writeme );
175
176void              tr_peerIoWriteUint32( tr_peerIo *       io,
177                                        struct evbuffer * outbuf,
178                                        uint32_t          writeme );
179
180void              tr_peerIoReadBytes( tr_peerIo *       io,
181                                      struct evbuffer * inbuf,
182                                      void *            bytes,
183                                      size_t            byteCount );
184
185void              tr_peerIoReadUint8( tr_peerIo *       io,
186                                      struct evbuffer * inbuf,
187                                      uint8_t *         setme );
188
189void              tr_peerIoReadUint16( tr_peerIo *       io,
190                                       struct evbuffer * inbuf,
191                                       uint16_t *        setme );
192
193void              tr_peerIoReadUint32( tr_peerIo *       io,
194                                       struct evbuffer * inbuf,
195                                       uint32_t *        setme );
196
197void              tr_peerIoDrain( tr_peerIo *       io,
198                                  struct evbuffer * inbuf,
199                                  size_t            byteCount );
200
201/**
202***
203**/
204
205size_t            tr_peerIoGetWriteBufferSpace( const tr_peerIo * io );
206
207void              tr_peerIoSetBandwidth( tr_peerIo            * io,
208                                         tr_direction           direction,
209                                         struct tr_bandwidth  * bandwidth );
210
211
212#endif
Note: See TracBrowser for help on using the repository browser.