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

Last change on this file since 4036 was 4036, checked in by charles, 15 years ago

improve upload speeds when the speed limits are uncapped.

  • Property svn:keywords set to Date Rev Author Id
File size: 5.0 KB
Line 
1/*
2 * This file Copyright (C) 2007 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 4036 2007-12-01 23:08:34Z 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
85
86/**
87***
88**/
89
90void  tr_peerIoSetPeersId( tr_peerIo      * io,
91                           const uint8_t  * peer_id );
92
93const uint8_t*
94      tr_peerIoGetPeersId( const tr_peerIo * io );
95
96/**
97***
98**/
99
100typedef enum { READ_MORE, READ_AGAIN, READ_DONE } ReadState;
101typedef ReadState (*tr_can_read_cb)(struct bufferevent*, void* user_data);
102typedef void (*tr_did_write_cb)(struct bufferevent *, void *);
103typedef void (*tr_net_error_cb)(struct bufferevent *, short what, void *);
104
105void  tr_peerIoSetIOFuncs( tr_peerIo        * io,
106                           tr_can_read_cb     readcb,
107                           tr_did_write_cb    writecb,
108                           tr_net_error_cb    errcb,
109                           void             * user_data );
110
111size_t tr_peerIoWriteBytesWaiting( const tr_peerIo * io );
112
113void tr_peerIoTryRead( tr_peerIo * io );
114
115void tr_peerIoWrite( tr_peerIo   * io,
116                     const void  * writeme,
117                     int           writeme_len );
118
119void tr_peerIoWriteBuf( tr_peerIo       * io,
120                        struct evbuffer * buf );
121
122
123/**
124***
125**/
126
127struct tr_crypto* tr_peerIoGetCrypto( tr_peerIo * io );
128
129typedef enum
130{
131    /* these match the values in MSE's crypto_select */
132    PEER_ENCRYPTION_NONE  = (1<<0),
133    PEER_ENCRYPTION_RC4   = (1<<1)
134}
135EncryptionMode;
136
137void tr_peerIoSetEncryption( tr_peerIo       * io,
138                              int              encryptionMode );
139
140int  tr_peerIoIsEncrypted( const tr_peerIo * io );
141
142void tr_peerIoWriteBytes  ( tr_peerIo        * io,
143                            struct evbuffer  * outbuf,
144                            const void       * bytes,
145                            size_t             byteCount );
146
147void tr_peerIoWriteUint8  ( tr_peerIo        * io,
148                            struct evbuffer  * outbuf,
149                            uint8_t            writeme );
150
151void tr_peerIoWriteUint16 ( tr_peerIo        * io,
152                            struct evbuffer  * outbuf,
153                            uint16_t           writeme );
154
155void tr_peerIoWriteUint32 ( tr_peerIo        * io,
156                            struct evbuffer  * outbuf,
157                            uint32_t           writeme );
158
159void tr_peerIoReadBytes   ( tr_peerIo        * io,
160                            struct evbuffer  * inbuf,
161                            void             * bytes,
162                            size_t             byteCount );
163
164void tr_peerIoReadUint8   ( tr_peerIo        * io,
165                            struct evbuffer  * inbuf,
166                            uint8_t          * setme );
167
168void tr_peerIoReadUint16  ( tr_peerIo        * io,
169                            struct evbuffer  * inbuf,
170                            uint16_t         * setme );
171
172void tr_peerIoReadUint32  ( tr_peerIo        * io,
173                            struct evbuffer  * inbuf,
174                            uint32_t         * setme );
175
176void tr_peerIoDrain       ( tr_peerIo        * io,
177                            struct evbuffer  * inbuf,
178                            size_t             byteCount );
179
180
181#endif
Note: See TracBrowser for help on using the repository browser.