source: branches/encryption/libtransmission/peer-io.h @ 2985

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

work on incoming connections, and better deciding of which pieces to request first.

  • Property svn:keywords set to Date Rev Author Id
File size: 4.6 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 2985 2007-09-07 20:55:38Z 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**/
31
32tr_peerIo*
33      tr_peerIoNewOutgoing( struct tr_handle   * handle,
34                            struct in_addr     * addr,
35                            int                  port,
36                            const  uint8_t     * torrentHash );
37
38tr_peerIo*
39      tr_peerIoNewIncoming( struct tr_handle   * handle,
40                            struct in_addr     * addr,
41                            int                  socket );
42
43void  tr_peerIoFree      ( tr_peerIo  * io );
44
45tr_handle* tr_peerIoGetHandle( tr_peerIo * io );
46
47/**
48***
49**/
50
51enum
52{
53    LT_EXTENSIONS_NONE,
54    LT_EXTENSIONS_LTEP,
55    LT_EXTENSIONS_AZMP
56};
57
58void  tr_peerIoSetExtension( tr_peerIo  * io,
59                             int          lt_extensions );
60
61int   tr_peerIoGetExtension( const tr_peerIo * io );
62
63/**
64***
65**/
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
82/**
83***
84**/
85
86void  tr_peerIoSetPeersId( tr_peerIo      * io,
87                           const uint8_t  * peer_id );
88
89const uint8_t*
90      tr_peerIoGetPeersId( const tr_peerIo * io );
91
92/**
93***
94**/
95
96typedef enum { READ_MORE, READ_AGAIN, READ_DONE } ReadState;
97typedef ReadState (*tr_can_read_cb)(struct bufferevent*, void* user_data);
98typedef void (*tr_did_write_cb)(struct bufferevent *, void *);
99typedef void (*tr_net_error_cb)(struct bufferevent *, short what, void *);
100
101void  tr_peerIoSetIOFuncs( tr_peerIo        * io,
102                           tr_can_read_cb     readcb,
103                           tr_did_write_cb    writecb,
104                           tr_net_error_cb    errcb,
105                           void             * user_data );
106
107void  tr_peerIoSetIOMode ( tr_peerIo   * io,
108                           short         enable_mode,
109                           short         disable_mode );
110
111void tr_peerIoWrite( tr_peerIo   * io,
112                     const void  * writeme,
113                     int           writeme_len );
114
115void tr_peerIoWriteBuf( tr_peerIo             * io,
116                        const struct evbuffer * buf );
117
118
119float tr_peerIoGetRateToClient( const tr_peerIo * io );
120
121float tr_peerIoGetRateToPeer( const tr_peerIo * io );
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_PLAINTEXT = (1<<0),
133    PEER_ENCRYPTION_RC4       = (1<<1)
134}
135EncryptionMode;
136
137void tr_peerIoSetEncryption( tr_peerIo       * io,
138                              int              encryptionMode );
139
140void tr_peerIoWriteBytes  ( tr_peerIo        * io,
141                            struct evbuffer  * outbuf,
142                            const void       * bytes,
143                            int                byteCount );
144
145void tr_peerIoWriteUint16 ( tr_peerIo        * io,
146                            struct evbuffer  * outbuf,
147                            uint16_t           writeme );
148
149void tr_peerIoWriteUint32 ( tr_peerIo        * io,
150                            struct evbuffer  * outbuf,
151                            uint32_t           writeme );
152
153void tr_peerIoReadBytes   ( tr_peerIo        * io,
154                            struct evbuffer  * inbuf,
155                            void             * bytes,
156                            int                byteCount );
157
158void tr_peerIoReadUint16  ( tr_peerIo        * io,
159                            struct evbuffer  * inbuf,
160                            uint16_t         * setme );
161
162void tr_peerIoReadUint32  ( tr_peerIo        * io,
163                            struct evbuffer  * inbuf,
164                            uint32_t         * setme );
165
166void tr_peerIoDrain       ( tr_peerIo        * io,
167                            struct evbuffer  * inbuf,
168                            int                byteCount );
169
170
171#endif
Note: See TracBrowser for help on using the repository browser.