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

Last change on this file since 3171 was 3171, checked in by charles, 15 years ago
  • record the ports of incoming sockets. we might need them later if we want to disconnect and reconnect.
  • for portability, use libevent API for some socket upkeep
  • Property svn:keywords set to Date Rev Author Id
File size: 4.9 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 3171 2007-09-25 23:10: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                            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                            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_peerIoEnableAZMP( tr_peerIo * io, int flag );
53void  tr_peerIoEnableLTEP( tr_peerIo * io, int flag );
54void  tr_peerIoEnableFEXT( tr_peerIo * io, int flag );
55
56int   tr_peerIoSupportsAZMP( const tr_peerIo * io );
57int   tr_peerIoSupportsLTEP( const tr_peerIo * io );
58int   tr_peerIoSupportsFEXT( const tr_peerIo * io );
59
60/**
61***
62**/
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
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
111size_t tr_peerIoWriteBytesWaiting( const tr_peerIo * io );
112
113void tr_peerIoWrite( tr_peerIo   * io,
114                     const void  * writeme,
115                     int           writeme_len );
116
117void tr_peerIoWriteBuf( tr_peerIo       * io,
118                        struct evbuffer * buf );
119
120
121float tr_peerIoGetRateToClient( const tr_peerIo * io );
122
123float tr_peerIoGetRateToPeer( const tr_peerIo * io );
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                            int                byteCount );
148
149void tr_peerIoWriteUint16 ( tr_peerIo        * io,
150                            struct evbuffer  * outbuf,
151                            uint16_t           writeme );
152
153void tr_peerIoWriteUint32 ( tr_peerIo        * io,
154                            struct evbuffer  * outbuf,
155                            uint32_t           writeme );
156
157void tr_peerIoReadBytes   ( tr_peerIo        * io,
158                            struct evbuffer  * inbuf,
159                            void             * bytes,
160                            int                byteCount );
161
162void tr_peerIoReadUint16  ( tr_peerIo        * io,
163                            struct evbuffer  * inbuf,
164                            uint16_t         * setme );
165
166void tr_peerIoReadUint32  ( tr_peerIo        * io,
167                            struct evbuffer  * inbuf,
168                            uint32_t         * setme );
169
170void tr_peerIoDrain       ( tr_peerIo        * io,
171                            struct evbuffer  * inbuf,
172                            int                byteCount );
173
174
175#endif
Note: See TracBrowser for help on using the repository browser.