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

Last change on this file since 4608 was 4608, checked in by charles, 14 years ago

follow the spec's suggestion that new connections be 3x as likely for optimistic unchoke

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