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

Last change on this file since 6415 was 6415, checked in by charles, 13 years ago

#1123: unreachable peers need to be handled better

  • Property svn:keywords set to Date Rev Author Id
File size: 5.1 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 6415 2008-07-29 00:52:02Z charles $
11 */
12
13#ifndef TR_PEER_IO_H
14#define TR_PEER_IO_H
15
16/**
17***
18**/
19
20struct in_addr;
21struct evbuffer;
22struct bufferevent;
23struct tr_handle;
24struct tr_crypto;
25typedef struct tr_peerIo tr_peerIo;
26
27/**
28***
29**/
30
31tr_peerIo*
32      tr_peerIoNewOutgoing( struct tr_handle     * handle,
33                            const struct in_addr * addr,
34                            int                    port,
35                            const  uint8_t       * torrentHash );
36
37tr_peerIo*
38      tr_peerIoNewIncoming( struct tr_handle     * handle,
39                            const struct in_addr * addr,
40                            uint16_t               port,
41                            int                    socket );
42
43void  tr_peerIoFree      ( tr_peerIo  * io );
44
45tr_handle* tr_peerIoGetHandle( tr_peerIo * io );
46
47/**
48***
49**/
50
51void  tr_peerIoEnableLTEP( tr_peerIo * io, int flag );
52void  tr_peerIoEnableFEXT( tr_peerIo * io, int flag );
53
54int   tr_peerIoSupportsLTEP( const tr_peerIo * io );
55int   tr_peerIoSupportsFEXT( const tr_peerIo * io );
56
57/**
58***
59**/
60
61const char*
62       tr_peerIoAddrStr( const struct in_addr * addr, uint16_t port );
63
64const char*
65      tr_peerIoGetAddrStr( const tr_peerIo * io );
66
67const struct in_addr*
68      tr_peerIoGetAddress( const tr_peerIo * io, uint16_t * port );
69
70const uint8_t*
71      tr_peerIoGetTorrentHash( tr_peerIo * io );
72
73int   tr_peerIoHasTorrentHash( const tr_peerIo * io );
74
75void  tr_peerIoSetTorrentHash( tr_peerIo      * io,
76                               const uint8_t  * hash );
77
78int   tr_peerIoReconnect( tr_peerIo * io );
79
80int   tr_peerIoIsIncoming( const tr_peerIo * io );
81
82void  tr_peerIoSetTimeoutSecs( tr_peerIo * io, int secs );
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*
95      tr_peerIoGetPeersId( const tr_peerIo * io );
96
97/**
98***
99**/
100
101typedef enum { READ_MORE, READ_AGAIN, READ_DONE } ReadState;
102typedef ReadState (*tr_can_read_cb)(struct bufferevent*, void* user_data);
103typedef void (*tr_did_write_cb)(struct bufferevent *, void *);
104typedef void (*tr_net_error_cb)(struct bufferevent *, short what, void *);
105
106void  tr_peerIoSetIOFuncs( tr_peerIo        * io,
107                           tr_can_read_cb     readcb,
108                           tr_did_write_cb    writecb,
109                           tr_net_error_cb    errcb,
110                           void             * user_data );
111
112size_t tr_peerIoWriteBytesWaiting( const tr_peerIo * io );
113
114void tr_peerIoTryRead( tr_peerIo * io );
115
116void tr_peerIoWrite( tr_peerIo   * io,
117                     const void  * writeme,
118                     int           writeme_len );
119
120void tr_peerIoWriteBuf( tr_peerIo       * io,
121                        struct evbuffer * buf );
122
123
124/**
125***
126**/
127
128struct tr_crypto* tr_peerIoGetCrypto( tr_peerIo * io );
129
130typedef enum
131{
132    /* these match the values in MSE's crypto_select */
133    PEER_ENCRYPTION_NONE  = (1<<0),
134    PEER_ENCRYPTION_RC4   = (1<<1)
135}
136EncryptionMode;
137
138void tr_peerIoSetEncryption( tr_peerIo       * io,
139                              int              encryptionMode );
140
141int  tr_peerIoIsEncrypted( const tr_peerIo * io );
142
143void tr_peerIoWriteBytes  ( tr_peerIo        * io,
144                            struct evbuffer  * outbuf,
145                            const void       * bytes,
146                            size_t             byteCount );
147
148void tr_peerIoWriteUint8  ( tr_peerIo        * io,
149                            struct evbuffer  * outbuf,
150                            uint8_t            writeme );
151
152void tr_peerIoWriteUint16 ( tr_peerIo        * io,
153                            struct evbuffer  * outbuf,
154                            uint16_t           writeme );
155
156void tr_peerIoWriteUint32 ( tr_peerIo        * io,
157                            struct evbuffer  * outbuf,
158                            uint32_t           writeme );
159
160void tr_peerIoReadBytes   ( tr_peerIo        * io,
161                            struct evbuffer  * inbuf,
162                            void             * bytes,
163                            size_t             byteCount );
164
165void tr_peerIoReadUint8   ( tr_peerIo        * io,
166                            struct evbuffer  * inbuf,
167                            uint8_t          * setme );
168
169void tr_peerIoReadUint16  ( tr_peerIo        * io,
170                            struct evbuffer  * inbuf,
171                            uint16_t         * setme );
172
173void tr_peerIoReadUint32  ( tr_peerIo        * io,
174                            struct evbuffer  * inbuf,
175                            uint32_t         * setme );
176
177void tr_peerIoDrain       ( tr_peerIo        * io,
178                            struct evbuffer  * inbuf,
179                            size_t             byteCount );
180
181int64_t tr_peerIoCountBytesFromPeer( const tr_peerIo * io );
182
183#endif
Note: See TracBrowser for help on using the repository browser.