source: trunk/libtransmission/session.h

Last change on this file was 14724, checked in by jordan, 5 years ago

use '#pragma once' instead of #ifndef..#define..#endif guards

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