source: trunk/libtransmission/session.h @ 14581

Last change on this file since 14581 was 14581, checked in by mikedld, 6 years ago

Remove unused session tag

  • Property svn:keywords set to Date Rev Author Id
File size: 9.7 KB
Line 
1/*
2 * This file Copyright (C) 2008-2014 Mnemosyne LLC
3 *
4 * It may be used under the GNU GPL versions 2 or 3
5 * or any future license endorsed by Mnemosyne LLC.
6 *
7 * $Id: session.h 14581 2015-10-18 18:39:14Z mikedld $
8 */
9
10#ifndef __TRANSMISSION__
11 #error only libtransmission should #include this header.
12#endif
13
14#ifndef TR_INTERNAL_H
15#define TR_INTERNAL_H 1
16
17#define TR_NAME "Transmission"
18
19#ifndef UNUSED
20 #ifdef __GNUC__
21  #define UNUSED __attribute__ ((unused))
22 #else
23  #define UNUSED
24 #endif
25#endif
26
27#include "bandwidth.h"
28#include "bitfield.h"
29#include "net.h"
30#include "utils.h"
31#include "variant.h"
32
33typedef enum { TR_NET_OK, TR_NET_ERROR, TR_NET_WAIT } tr_tristate_t;
34
35typedef enum {
36    TR_AUTO_SWITCH_UNUSED,
37    TR_AUTO_SWITCH_ON,
38    TR_AUTO_SWITCH_OFF,
39} tr_auto_switch_state_t;
40
41enum
42{
43  PEER_ID_LEN = 20
44};
45
46void tr_peerIdInit (uint8_t * setme);
47
48struct event_base;
49struct evdns_base;
50
51struct tr_address;
52struct tr_announcer;
53struct tr_announcer_udp;
54struct tr_bindsockets;
55struct tr_cache;
56struct tr_fdInfo;
57struct tr_device_info;
58
59struct tr_turtle_info
60{
61    /* TR_UP and TR_DOWN speed limits */
62    unsigned int speedLimit_Bps[2];
63
64    /* is turtle mode on right now? */
65    bool isEnabled;
66
67    /* does turtle mode turn itself on and off at given times? */
68    bool isClockEnabled;
69
70    /* when clock mode is on, minutes after midnight to turn on turtle mode */
71    int beginMinute;
72
73    /* when clock mode is on, minutes after midnight to turn off turtle mode */
74    int endMinute;
75
76    /* only use clock mode on these days of the week */
77    tr_sched_day days;
78
79    /* called when isEnabled changes */
80    tr_altSpeedFunc callback;
81
82    /* the callback's user_data argument */
83    void * callbackUserData;
84
85    /* the callback's changedByUser argument.
86     * indicates whether the change came from the user or from the clock. */
87    bool changedByUser;
88
89    /* bitfield of all the minutes in a week.
90     * Each bit's value indicates whether the scheduler wants turtle
91     * limits on or off at that given minute in the week. */
92    tr_bitfield minutes;
93
94    /* recent action that was done by turtle's automatic switch */
95    tr_auto_switch_state_t autoTurtleState;
96};
97
98/** @brief handle to an active libtransmission session */
99struct tr_session
100{
101    bool                         isPortRandom;
102    bool                         isPexEnabled;
103    bool                         isDHTEnabled;
104    bool                         isUTPEnabled;
105    bool                         isLPDEnabled;
106    bool                         isBlocklistEnabled;
107    bool                         isPrefetchEnabled;
108    bool                         isTorrentDoneScriptEnabled;
109    bool                         isClosing;
110    bool                         isClosed;
111    bool                         isIncompleteFileNamingEnabled;
112    bool                         isRatioLimited;
113    bool                         isIdleLimited;
114    bool                         isIncompleteDirEnabled;
115    bool                         pauseAddedTorrent;
116    bool                         deleteSourceTorrent;
117    bool                         scrapePausedTorrents;
118
119    uint8_t                      peer_id_ttl_hours;
120
121    tr_variant                   removedTorrents;
122
123    bool                         stalledEnabled;
124    bool                         queueEnabled[2];
125    int                          queueSize[2];
126    int                          queueStalledMinutes;
127
128    int                          umask;
129
130    unsigned int                 speedLimit_Bps[2];
131    bool                         speedLimitEnabled[2];
132
133    struct tr_turtle_info        turtle;
134
135    struct tr_fdInfo           * fdInfo;
136
137    int                          magicNumber;
138
139    tr_encryption_mode           encryptionMode;
140
141    tr_preallocation_mode        preallocationMode;
142
143    struct event_base          * event_base;
144    struct evdns_base          * evdns_base;
145    struct tr_event_handle     * events;
146
147    uint16_t                     peerLimit;
148    uint16_t                     peerLimitPerTorrent;
149
150    int                          uploadSlotsPerTorrent;
151
152    /* The UDP sockets used for the DHT and uTP. */
153    tr_port                      udp_port;
154    tr_socket_t                  udp_socket;
155    tr_socket_t                  udp6_socket;
156    unsigned char *              udp6_bound;
157    struct event                 *udp_event;
158    struct event                 *udp6_event;
159
160    /* The open port on the local machine for incoming peer requests */
161    tr_port                      private_peer_port;
162
163    /**
164     * The open port on the public device for incoming peer requests.
165     * This is usually the same as private_peer_port but can differ
166     * if the public device is a router and it decides to use a different
167     * port than the one requested by Transmission.
168     */
169    tr_port                      public_peer_port;
170
171    tr_port                      randomPortLow;
172    tr_port                      randomPortHigh;
173
174    int                          peerSocketTOS;
175    char *                       peer_congestion_algorithm;
176
177    int                          torrentCount;
178    tr_torrent *                 torrentList;
179
180    char *                       torrentDoneScript;
181
182    char *                       configDir;
183    char *                       resumeDir;
184    char *                       torrentDir;
185    char *                       incompleteDir;
186
187    char *                       blocklist_url;
188
189    struct tr_device_info *      downloadDir;
190
191    struct tr_list *             blocklists;
192    struct tr_peerMgr *          peerMgr;
193    struct tr_shared *           shared;
194
195    struct tr_cache *            cache;
196
197    struct tr_lock *             lock;
198
199    struct tr_web *              web;
200
201    struct tr_rpc_server *       rpcServer;
202    tr_rpc_func                  rpc_func;
203    void *                       rpc_func_user_data;
204
205    struct tr_stats_handle     * sessionStats;
206
207    struct tr_announcer        * announcer;
208    struct tr_announcer_udp    * announcer_udp;
209
210    tr_variant                 * metainfoLookup;
211
212    struct event               * nowTimer;
213    struct event               * saveTimer;
214
215    /* monitors the "global pool" speeds */
216    struct tr_bandwidth          bandwidth;
217
218    float                        desiredRatio;
219
220    uint16_t                     idleLimitMinutes;
221
222    struct tr_bindinfo         * public_ipv4;
223    struct tr_bindinfo         * public_ipv6;
224};
225
226static inline tr_port
227tr_sessionGetPublicPeerPort (const tr_session * session)
228{
229    return session->public_peer_port;
230}
231
232bool         tr_sessionAllowsDHT (const tr_session * session);
233
234bool         tr_sessionAllowsLPD (const tr_session * session);
235
236const char * tr_sessionFindTorrentFile (const tr_session * session,
237                                        const char *       hashString);
238
239void         tr_sessionSetTorrentFile (tr_session * session,
240                                       const char * hashString,
241                                       const char * filename);
242
243bool         tr_sessionIsAddressBlocked (const tr_session        * session,
244                                         const struct tr_address * addr);
245
246void         tr_sessionLock (tr_session *);
247
248void         tr_sessionUnlock (tr_session *);
249
250bool         tr_sessionIsLocked (const tr_session *);
251
252const struct tr_address*  tr_sessionGetPublicAddress (const tr_session  * session,
253                                                      int                 tr_af_type,
254                                                      bool              * is_default_value);
255
256
257struct tr_bindsockets * tr_sessionGetBindSockets (tr_session *);
258
259int tr_sessionCountTorrents (const tr_session * session);
260
261tr_torrent ** tr_sessionGetTorrents (tr_session * session, int * setme_n);
262
263enum
264{
265    SESSION_MAGIC_NUMBER = 3845,
266};
267
268static inline bool tr_isSession (const tr_session * session)
269{
270    return (session != NULL) && (session->magicNumber == SESSION_MAGIC_NUMBER);
271}
272
273static inline bool tr_isPreallocationMode (tr_preallocation_mode m)
274{
275    return (m == TR_PREALLOCATE_NONE)
276        || (m == TR_PREALLOCATE_SPARSE)
277        || (m == TR_PREALLOCATE_FULL);
278}
279
280static inline bool tr_isEncryptionMode (tr_encryption_mode m)
281{
282    return (m == TR_CLEAR_PREFERRED)
283        || (m == TR_ENCRYPTION_PREFERRED)
284        || (m == TR_ENCRYPTION_REQUIRED);
285}
286
287static inline bool tr_isPriority (tr_priority_t p)
288{
289    return (p == TR_PRI_LOW)
290        || (p == TR_PRI_NORMAL)
291        || (p == TR_PRI_HIGH);
292}
293
294/***
295****
296***/
297
298static inline unsigned int
299toSpeedBytes (unsigned int KBps) { return KBps * tr_speed_K; }
300static inline double
301toSpeedKBps (unsigned int Bps)  { return Bps / (double)tr_speed_K; }
302
303static inline uint64_t
304toMemBytes (unsigned int MB) { uint64_t B = tr_mem_K * tr_mem_K; B *= MB; return B; }
305static inline int
306toMemMB  (uint64_t B)      { return B / (tr_mem_K * tr_mem_K); }
307
308/**
309**/
310
311unsigned int  tr_sessionGetSpeedLimit_Bps (const tr_session *, tr_direction);
312unsigned int  tr_sessionGetAltSpeed_Bps (const tr_session *, tr_direction);
313unsigned int  tr_sessionGetRawSpeed_Bps (const tr_session *, tr_direction);
314unsigned int  tr_sessionGetPieceSpeed_Bps (const tr_session *, tr_direction);
315
316void tr_sessionSetSpeedLimit_Bps (tr_session *, tr_direction, unsigned int Bps);
317void tr_sessionSetAltSpeed_Bps (tr_session *, tr_direction, unsigned int Bps);
318
319bool  tr_sessionGetActiveSpeedLimit_Bps (const tr_session  * session,
320                                         tr_direction        dir,
321                                         unsigned int      * setme);
322
323void tr_sessionGetNextQueuedTorrents (tr_session   * session,
324                                      tr_direction   dir,
325                                      size_t         numwanted,
326                                      tr_ptrArray  * setme);
327
328int tr_sessionCountQueueFreeSlots (tr_session * session, tr_direction);
329
330
331#endif
Note: See TracBrowser for help on using the repository browser.