mirror of
https://github.com/transmission/transmission
synced 2024-12-26 01:27:28 +00:00
(libT) (1) shave a few bytes from tr_peer and tr_ratecontrol's footprints. (2) remove some dead code.
This commit is contained in:
parent
5f9ec561e6
commit
70fcc56beb
5 changed files with 157 additions and 179 deletions
|
@ -34,27 +34,6 @@ enum
|
||||||
ENCRYPTION_PREFERENCE_NO
|
ENCRYPTION_PREFERENCE_NO
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
*** The "SWIFT" system is described by Karthik Tamilmani,
|
|
||||||
*** Vinay Pai, and Alexander Mohr of Stony Brook University
|
|
||||||
*** in their paper "SWIFT: A System With Incentives For Trading"
|
|
||||||
*** http://citeseer.ist.psu.edu/tamilmani04swift.html
|
|
||||||
***
|
|
||||||
*** More SWIFT constants are defined in peer-mgr.c
|
|
||||||
**/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use SWIFT?
|
|
||||||
*/
|
|
||||||
static const int SWIFT_ENABLED = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For every byte the peer uploads to us,
|
|
||||||
* allow them to download this many bytes from us
|
|
||||||
*/
|
|
||||||
static const double SWIFT_REPAYMENT_RATIO = 1.33;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct tr_peer
|
typedef struct tr_peer
|
||||||
{
|
{
|
||||||
unsigned int peerIsChoked : 1;
|
unsigned int peerIsChoked : 1;
|
||||||
|
@ -88,10 +67,8 @@ typedef struct tr_peer
|
||||||
struct tr_ratecontrol * rcToClient;
|
struct tr_ratecontrol * rcToClient;
|
||||||
struct tr_ratecontrol * rcToPeer;
|
struct tr_ratecontrol * rcToPeer;
|
||||||
|
|
||||||
double rateToClient;
|
float rateToClient;
|
||||||
double rateToPeer;
|
float rateToPeer;
|
||||||
|
|
||||||
int64_t credit;
|
|
||||||
}
|
}
|
||||||
tr_peer;
|
tr_peer;
|
||||||
|
|
||||||
|
|
|
@ -35,35 +35,6 @@
|
||||||
#include "trevent.h"
|
#include "trevent.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
/**
|
|
||||||
*** The "SWIFT" system is described by Karthik Tamilmani,
|
|
||||||
*** Vinay Pai, and Alexander Mohr of Stony Brook University
|
|
||||||
*** in their paper "SWIFT: A System With Incentives For Trading"
|
|
||||||
*** http://citeseer.ist.psu.edu/tamilmani04swift.html
|
|
||||||
***
|
|
||||||
*** More SWIFT constants are defined in peer-mgr-private.h
|
|
||||||
**/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allow new peers to download this many bytes from
|
|
||||||
* us when getting started. This can prevent gridlock
|
|
||||||
* with other peers using tit-for-tat algorithms
|
|
||||||
*/
|
|
||||||
static const int SWIFT_INITIAL_CREDIT = 64 * 1024; /* 64 KiB */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We expend a fraction of our torrent's total upload speed
|
|
||||||
* on largesse by uniformly distributing free credit to
|
|
||||||
* all of our peers. This too helps prevent gridlock.
|
|
||||||
*/
|
|
||||||
static const double SWIFT_LARGESSE = 0.15; /* 15% of our UL */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* How frequently to extend largesse-based credit
|
|
||||||
*/
|
|
||||||
static const int SWIFT_PERIOD_MSEC = 5000;
|
|
||||||
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
/* how frequently to change which peers are choked */
|
/* how frequently to change which peers are choked */
|
||||||
|
@ -135,7 +106,6 @@ typedef struct
|
||||||
tr_timer * reconnectTimer;
|
tr_timer * reconnectTimer;
|
||||||
tr_timer * rechokeTimer;
|
tr_timer * rechokeTimer;
|
||||||
tr_timer * refillTimer;
|
tr_timer * refillTimer;
|
||||||
tr_timer * swiftTimer;
|
|
||||||
tr_torrent * tor;
|
tr_torrent * tor;
|
||||||
tr_peer * optimistic; /* the optimistic peer, or NULL if none */
|
tr_peer * optimistic; /* the optimistic peer, or NULL if none */
|
||||||
tr_bitfield * requested;
|
tr_bitfield * requested;
|
||||||
|
@ -308,7 +278,6 @@ peerConstructor( const struct in_addr * in_addr )
|
||||||
{
|
{
|
||||||
tr_peer * p;
|
tr_peer * p;
|
||||||
p = tr_new0( tr_peer, 1 );
|
p = tr_new0( tr_peer, 1 );
|
||||||
p->credit = SWIFT_INITIAL_CREDIT;
|
|
||||||
p->rcToClient = tr_rcInit( );
|
p->rcToClient = tr_rcInit( );
|
||||||
p->rcToPeer = tr_rcInit( );
|
p->rcToPeer = tr_rcInit( );
|
||||||
memcpy( &p->in_addr, in_addr, sizeof(struct in_addr) );
|
memcpy( &p->in_addr, in_addr, sizeof(struct in_addr) );
|
||||||
|
@ -392,7 +361,6 @@ torrentDestructor( Torrent * t )
|
||||||
tr_timerFree( &t->reconnectTimer );
|
tr_timerFree( &t->reconnectTimer );
|
||||||
tr_timerFree( &t->rechokeTimer );
|
tr_timerFree( &t->rechokeTimer );
|
||||||
tr_timerFree( &t->refillTimer );
|
tr_timerFree( &t->refillTimer );
|
||||||
tr_timerFree( &t->swiftTimer );
|
|
||||||
|
|
||||||
tr_bitfieldFree( t->requested );
|
tr_bitfieldFree( t->requested );
|
||||||
tr_ptrArrayFree( t->pool, (PtrArrayForeachFunc)tr_free );
|
tr_ptrArrayFree( t->pool, (PtrArrayForeachFunc)tr_free );
|
||||||
|
@ -1235,7 +1203,6 @@ tr_peerMgrGetPeers( tr_peerMgr * manager,
|
||||||
|
|
||||||
static int reconnectPulse( void * vtorrent );
|
static int reconnectPulse( void * vtorrent );
|
||||||
static int rechokePulse( void * vtorrent );
|
static int rechokePulse( void * vtorrent );
|
||||||
static int swiftPulse( void * vtorrent );
|
|
||||||
|
|
||||||
void
|
void
|
||||||
tr_peerMgrStartTorrent( tr_peerMgr * manager,
|
tr_peerMgrStartTorrent( tr_peerMgr * manager,
|
||||||
|
@ -1250,7 +1217,6 @@ tr_peerMgrStartTorrent( tr_peerMgr * manager,
|
||||||
assert( t != NULL );
|
assert( t != NULL );
|
||||||
assert( ( t->isRunning != 0 ) == ( t->reconnectTimer != NULL ) );
|
assert( ( t->isRunning != 0 ) == ( t->reconnectTimer != NULL ) );
|
||||||
assert( ( t->isRunning != 0 ) == ( t->rechokeTimer != NULL ) );
|
assert( ( t->isRunning != 0 ) == ( t->rechokeTimer != NULL ) );
|
||||||
assert( ( t->isRunning != 0 ) == ( t->swiftTimer != NULL ) );
|
|
||||||
|
|
||||||
if( !t->isRunning )
|
if( !t->isRunning )
|
||||||
{
|
{
|
||||||
|
@ -1264,15 +1230,9 @@ tr_peerMgrStartTorrent( tr_peerMgr * manager,
|
||||||
rechokePulse, t,
|
rechokePulse, t,
|
||||||
RECHOKE_PERIOD_MSEC );
|
RECHOKE_PERIOD_MSEC );
|
||||||
|
|
||||||
t->swiftTimer = tr_timerNew( t->manager->handle,
|
|
||||||
swiftPulse, t,
|
|
||||||
SWIFT_PERIOD_MSEC );
|
|
||||||
|
|
||||||
reconnectPulse( t );
|
reconnectPulse( t );
|
||||||
|
|
||||||
rechokePulse( t );
|
rechokePulse( t );
|
||||||
|
|
||||||
swiftPulse( t );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
managerUnlock( manager );
|
managerUnlock( manager );
|
||||||
|
@ -1286,7 +1246,6 @@ stopTorrent( Torrent * t )
|
||||||
t->isRunning = 0;
|
t->isRunning = 0;
|
||||||
tr_timerFree( &t->rechokeTimer );
|
tr_timerFree( &t->rechokeTimer );
|
||||||
tr_timerFree( &t->reconnectTimer );
|
tr_timerFree( &t->reconnectTimer );
|
||||||
tr_timerFree( &t->swiftTimer );
|
|
||||||
|
|
||||||
/* disconnect the peers. */
|
/* disconnect the peers. */
|
||||||
tr_ptrArrayForeach( t->peers, (PtrArrayForeachFunc)peerDestructor );
|
tr_ptrArrayForeach( t->peers, (PtrArrayForeachFunc)peerDestructor );
|
||||||
|
@ -1563,7 +1522,7 @@ isSame( const tr_peer * peer )
|
||||||
***
|
***
|
||||||
**/
|
**/
|
||||||
|
|
||||||
static double
|
static int
|
||||||
getWeightedRate( const tr_peer * peer, int clientIsSeed )
|
getWeightedRate( const tr_peer * peer, int clientIsSeed )
|
||||||
{
|
{
|
||||||
return (int)( 10.0 * ( clientIsSeed ? peer->rateToPeer
|
return (int)( 10.0 * ( clientIsSeed ? peer->rateToPeer
|
||||||
|
@ -1658,55 +1617,6 @@ rechokePulse( void * vtorrent )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***
|
|
||||||
****
|
|
||||||
***/
|
|
||||||
|
|
||||||
static int
|
|
||||||
swiftPulse( void * vtorrent )
|
|
||||||
{
|
|
||||||
Torrent * t = vtorrent;
|
|
||||||
torrentLock( t );
|
|
||||||
|
|
||||||
if( !tr_torrentIsSeed( t->tor ) )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int peerCount = 0;
|
|
||||||
int deadbeatCount = 0;
|
|
||||||
tr_peer ** peers = getConnectedPeers( t, &peerCount );
|
|
||||||
tr_peer ** deadbeats = tr_new( tr_peer*, peerCount );
|
|
||||||
|
|
||||||
const double ul_KiBsec = tr_rcRate( t->tor->upload );
|
|
||||||
const double ul_KiB = ul_KiBsec * (SWIFT_PERIOD_MSEC/1000.0);
|
|
||||||
const double ul_bytes = ul_KiB * 1024;
|
|
||||||
const double freeCreditTotal = ul_bytes * SWIFT_LARGESSE;
|
|
||||||
int freeCreditPerPeer;
|
|
||||||
|
|
||||||
for( i=0; i<peerCount; ++i ) {
|
|
||||||
tr_peer * peer = peers[i];
|
|
||||||
if( peer->credit <= 0 )
|
|
||||||
deadbeats[deadbeatCount++] = peer;
|
|
||||||
}
|
|
||||||
|
|
||||||
freeCreditPerPeer = (int)( freeCreditTotal / deadbeatCount );
|
|
||||||
for( i=0; i<deadbeatCount; ++i )
|
|
||||||
deadbeats[i]->credit = freeCreditPerPeer;
|
|
||||||
|
|
||||||
tordbg( t, "%d deadbeats, "
|
|
||||||
"who are each being granted %d bytes' credit "
|
|
||||||
"for a total of %.1f KiB, "
|
|
||||||
"%d%% of the torrent's ul speed %.1f\n",
|
|
||||||
deadbeatCount, freeCreditPerPeer,
|
|
||||||
ul_KiBsec*SWIFT_LARGESSE, (int)(SWIFT_LARGESSE*100), ul_KiBsec );
|
|
||||||
|
|
||||||
tr_free( deadbeats );
|
|
||||||
tr_free( peers );
|
|
||||||
}
|
|
||||||
|
|
||||||
torrentUnlock( t );
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***
|
/***
|
||||||
****
|
****
|
||||||
**** Life and Death
|
**** Life and Death
|
||||||
|
@ -1752,9 +1662,9 @@ shouldPeerBeClosed( const Torrent * t, const tr_peer * peer, int peerCount )
|
||||||
const int relaxStrictnessIfFewerThanN = (int)((getMaxPeerCount(tor) * 0.9) + 0.5);
|
const int relaxStrictnessIfFewerThanN = (int)((getMaxPeerCount(tor) * 0.9) + 0.5);
|
||||||
/* if we have >= relaxIfFewerThan, strictness is 100%.
|
/* if we have >= relaxIfFewerThan, strictness is 100%.
|
||||||
* if we have zero connections, strictness is 0% */
|
* if we have zero connections, strictness is 0% */
|
||||||
const double strictness = peerCount >= relaxStrictnessIfFewerThanN
|
const float strictness = peerCount >= relaxStrictnessIfFewerThanN
|
||||||
? 1.0
|
? 1.0
|
||||||
: peerCount / (double)relaxStrictnessIfFewerThanN;
|
: peerCount / (float)relaxStrictnessIfFewerThanN;
|
||||||
const int lo = MIN_UPLOAD_IDLE_SECS;
|
const int lo = MIN_UPLOAD_IDLE_SECS;
|
||||||
const int hi = MAX_UPLOAD_IDLE_SECS;
|
const int hi = MAX_UPLOAD_IDLE_SECS;
|
||||||
const int limit = lo + ((hi-lo) * strictness);
|
const int limit = lo + ((hi-lo) * strictness);
|
||||||
|
|
|
@ -1160,7 +1160,6 @@ clientGotBytes( tr_peermsgs * msgs, uint32_t byteCount )
|
||||||
tor->activityDate = now;
|
tor->activityDate = now;
|
||||||
tor->downloadedCur += byteCount;
|
tor->downloadedCur += byteCount;
|
||||||
msgs->info->pieceDataActivityDate = now;
|
msgs->info->pieceDataActivityDate = now;
|
||||||
msgs->info->credit += (int)(byteCount * SWIFT_REPAYMENT_RATIO);
|
|
||||||
tr_rcTransferred( msgs->info->rcToClient, byteCount );
|
tr_rcTransferred( msgs->info->rcToClient, byteCount );
|
||||||
tr_rcTransferred( tor->download, byteCount );
|
tr_rcTransferred( tor->download, byteCount );
|
||||||
tr_rcTransferred( tor->handle->download, byteCount );
|
tr_rcTransferred( tor->handle->download, byteCount );
|
||||||
|
@ -1383,7 +1382,6 @@ peerGotBytes( tr_peermsgs * msgs, uint32_t byteCount )
|
||||||
tor->activityDate = now;
|
tor->activityDate = now;
|
||||||
tor->uploadedCur += byteCount;
|
tor->uploadedCur += byteCount;
|
||||||
msgs->info->pieceDataActivityDate = now;
|
msgs->info->pieceDataActivityDate = now;
|
||||||
msgs->info->credit -= byteCount;
|
|
||||||
tr_rcTransferred( msgs->info->rcToPeer, byteCount );
|
tr_rcTransferred( msgs->info->rcToPeer, byteCount );
|
||||||
tr_rcTransferred( tor->upload, byteCount );
|
tr_rcTransferred( tor->upload, byteCount );
|
||||||
tr_rcTransferred( tor->handle->upload, byteCount );
|
tr_rcTransferred( tor->handle->upload, byteCount );
|
||||||
|
@ -1578,27 +1576,13 @@ sendKeepalive( tr_peermsgs * msgs )
|
||||||
***
|
***
|
||||||
**/
|
**/
|
||||||
|
|
||||||
static int
|
|
||||||
isSwiftEnabled( const tr_peermsgs * msgs )
|
|
||||||
{
|
|
||||||
/* rationale: SWIFT is good for getting rid of deadbeats, but most
|
|
||||||
* private trackers have ratios where you _want_ to feed deadbeats
|
|
||||||
* as much as possible. So we disable SWIFT on private torrents */
|
|
||||||
return SWIFT_ENABLED
|
|
||||||
&& !tr_torrentIsSeed( msgs->torrent )
|
|
||||||
&& !tr_torrentIsPrivate( msgs->torrent );
|
|
||||||
}
|
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
getUploadMax( const tr_peermsgs * msgs )
|
getUploadMax( const tr_peermsgs * msgs )
|
||||||
{
|
{
|
||||||
static const size_t maxval = ~0;
|
static const size_t maxval = ~0;
|
||||||
const tr_torrent * tor = msgs->torrent;
|
const tr_torrent * tor = msgs->torrent;
|
||||||
const int useSwift = isSwiftEnabled( msgs );
|
|
||||||
const size_t swiftLeft = msgs->info->credit;
|
|
||||||
int speedLeft;
|
int speedLeft;
|
||||||
int bufLeft;
|
int bufLeft;
|
||||||
size_t ret;
|
|
||||||
|
|
||||||
if( tor->uploadLimitMode == TR_SPEEDLIMIT_GLOBAL )
|
if( tor->uploadLimitMode == TR_SPEEDLIMIT_GLOBAL )
|
||||||
speedLeft = tor->handle->useUploadLimit ? tr_rcBytesLeft( tor->handle->upload ) : maxval;
|
speedLeft = tor->handle->useUploadLimit ? tr_rcBytesLeft( tor->handle->upload ) : maxval;
|
||||||
|
@ -1611,10 +1595,7 @@ getUploadMax( const tr_peermsgs * msgs )
|
||||||
* queued up in it... blocksize, +13 for the size of the BT protocol's
|
* queued up in it... blocksize, +13 for the size of the BT protocol's
|
||||||
* block message overhead */
|
* block message overhead */
|
||||||
bufLeft = tor->blockSize + 13 - tr_peerIoWriteBytesWaiting( msgs->io );
|
bufLeft = tor->blockSize + 13 - tr_peerIoWriteBytesWaiting( msgs->io );
|
||||||
ret = MIN( speedLeft, bufLeft );
|
return MIN( speedLeft, bufLeft );
|
||||||
if( useSwift)
|
|
||||||
ret = MIN( ret, swiftLeft );
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
@ -42,8 +42,8 @@ struct tr_transfer
|
||||||
|
|
||||||
struct tr_ratecontrol
|
struct tr_ratecontrol
|
||||||
{
|
{
|
||||||
int limit;
|
int8_t limit;
|
||||||
int newest;
|
int8_t newest;
|
||||||
struct tr_transfer transfers[HISTORY_SIZE];
|
struct tr_transfer transfers[HISTORY_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,20 @@ typedef uint32_t tr_file_index_t;
|
||||||
typedef uint32_t tr_piece_index_t;
|
typedef uint32_t tr_piece_index_t;
|
||||||
typedef uint64_t tr_block_index_t;
|
typedef uint64_t tr_block_index_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief returns Transmission's default configuration file directory.
|
||||||
|
*
|
||||||
|
* The default configuration directory is determined this way:
|
||||||
|
* - If the TRANSMISSION_HOME environmental variable is set,
|
||||||
|
* its value is returned.
|
||||||
|
* - otherwise, if we're running on Darwin,
|
||||||
|
* "$HOME/Library/Application Support/Transmission" is returned.
|
||||||
|
* - otherwise, if we're running on WIN32,
|
||||||
|
* "$CSIDL_APPDATA/Transmission" is returned.
|
||||||
|
* - otherwise, if XDG_CONFIG_HOME is set,
|
||||||
|
* "$XDG_CONFIG_HOME/transmission" is returned.
|
||||||
|
* - lastly, $HOME/.config/transmission" is used.
|
||||||
|
*/
|
||||||
const char* tr_getDefaultConfigDir( void );
|
const char* tr_getDefaultConfigDir( void );
|
||||||
|
|
||||||
typedef struct tr_ctor tr_ctor;
|
typedef struct tr_ctor tr_ctor;
|
||||||
|
@ -72,61 +86,123 @@ typedef struct tr_torrent tr_torrent;
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_CONFIG_DIR tr_getDefaultConfigDir()
|
#define TR_DEFAULT_CONFIG_DIR tr_getDefaultConfigDir()
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_PEX_ENABLED 1
|
#define TR_DEFAULT_PEX_ENABLED 1
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_PORT_FORWARDING_ENABLED 0
|
#define TR_DEFAULT_PORT_FORWARDING_ENABLED 0
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_PORT 51413
|
#define TR_DEFAULT_PORT 51413
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_GLOBAL_PEER_LIMIT 200
|
#define TR_DEFAULT_GLOBAL_PEER_LIMIT 200
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_PEER_SOCKET_TOS 8
|
#define TR_DEFAULT_PEER_SOCKET_TOS 8
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_BLOCKLIST_ENABLED 0
|
#define TR_DEFAULT_BLOCKLIST_ENABLED 0
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_RPC_ENABLED 0
|
#define TR_DEFAULT_RPC_ENABLED 0
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_RPC_PORT 9091
|
#define TR_DEFAULT_RPC_PORT 9091
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_RPC_PORT_STR "9091"
|
#define TR_DEFAULT_RPC_PORT_STR "9091"
|
||||||
|
/** @see tr_sessionInitFull */
|
||||||
#define TR_DEFAULT_RPC_ACL "+127.0.0.1"
|
#define TR_DEFAULT_RPC_ACL "+127.0.0.1"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create and return a Transmission session handle.
|
* @brief Start a libtransmission session.
|
||||||
|
* @return an opaque handle to the new session
|
||||||
*
|
*
|
||||||
* @param configDir the config directory where libtransmission config
|
* @param configDir
|
||||||
* subdirectories will be found, such as "torrents",
|
* The config directory where libtransmission config subdirectories
|
||||||
* "resume", and "blocklists".
|
* will be found, such as "torrents", "resume", and "blocklists".
|
||||||
* TR_DEFAULT_CONFIG_DIR can be used as a default.
|
* #TR_DEFAULT_CONFIG_DIR can be used as a default.
|
||||||
* @param downloadDir The default directory to save added torrents.
|
*
|
||||||
* This can be changed per-session with
|
* @param downloadDir
|
||||||
* tr_sessionSetDownloadDir() and per-torrent with
|
* The default directory to save added torrents.
|
||||||
* tr_ctorSetDownloadDir().
|
* This can be changed per-session with
|
||||||
* @param tag Obsolete. Only used now for locating legacy fastresume files.
|
* tr_sessionSetDownloadDir() and per-torrent with
|
||||||
* Valid tags: beos, cli, daemon, gtk, macos, wx
|
* tr_ctorSetDownloadDir().
|
||||||
* @param isPexEnabled whether or not PEX is allowed for non-private torrents.
|
*
|
||||||
* This can be changed per-session with
|
* @param tag
|
||||||
* tr_sessionSetPexEnabled().
|
* Obsolete. Only used now for locating legacy fastresume files.
|
||||||
* TR_DEFAULT_PEX_ENABLED is the default.
|
* This will be removed at some point in the future.
|
||||||
* @param isPortForwardingEnabled If true, libtransmission will attempt
|
* Valid tags: beos cli daemon gtk macos wx
|
||||||
* to find a local UPnP-enabled or NATPMP-enabled
|
*
|
||||||
* router and forward a port from there to the local
|
* @param isPexEnabled
|
||||||
* machine. This is so remote peers can initiate
|
* whether or not PEX is allowed for non-private torrents.
|
||||||
* connections with us.
|
* This can be changed per-session with
|
||||||
* TR_DEFAULT_PORT_FORWARDING_ENABLED is the default.
|
* tr_sessionSetPexEnabled().
|
||||||
* @param publicPort Port number to open for incoming peer connections.
|
* #TR_DEFAULT_PEX_ENABLED is the default.
|
||||||
* TR_DEFAULT_PORT is the default.
|
*
|
||||||
* @param encryptionMode must be one of TR_PLAINTEXT_PREFERRED,
|
* @param isPortForwardingEnabled
|
||||||
* TR_ENCRYPTION_PREFERRED, or TR_ENCRYPTION_REQUIRED.
|
* If true, libtransmission will attempt
|
||||||
* @param isUploadLimitEnabled If true, libtransmission will limit the entire
|
* to find a local UPnP-enabled or NATPMP-enabled
|
||||||
* session's upload speed from `uploadLimit'.
|
* router and forward a port from there to the local
|
||||||
* @param uploadLimit The speed limit to use for the entire session when
|
* machine. This is so remote peers can initiate
|
||||||
* isUploadLimitEnabled is true.
|
* connections with us.
|
||||||
* @param isDownloadLimitEnabled If true, libtransmission will limit the entire
|
* #TR_DEFAULT_PORT_FORWARDING_ENABLED is the default.
|
||||||
* session's download speed from `downloadLimit'.
|
*
|
||||||
* @param downloadLimit The speed limit to use for the entire session when
|
* @param publicPort
|
||||||
* isDownloadLimitEnabled is true.
|
* Port number to open for incoming peer connections.
|
||||||
* @param peerLimit The maximum number of peer connections allowed in a session.
|
* #TR_DEFAULT_PORT is the default.
|
||||||
* TR_DEFAULT_GLOBAL_PEER_LIMIT can be used as a default.
|
*
|
||||||
|
* @param encryptionMode
|
||||||
|
* Must be one of #TR_PLAINTEXT_PREFERRED,
|
||||||
|
* #TR_ENCRYPTION_PREFERRED, or #TR_ENCRYPTION_REQUIRED.
|
||||||
|
*
|
||||||
|
* @param isUploadLimitEnabled
|
||||||
|
* If true, libtransmission will limit the entire
|
||||||
|
* session's upload speed from "uploadLimit".
|
||||||
|
*
|
||||||
|
* @param uploadLimit
|
||||||
|
* The speed limit to use for the entire session when
|
||||||
|
* "isUploadLimitEnabled" is true.
|
||||||
|
*
|
||||||
|
* @param isDownloadLimitEnabled
|
||||||
|
* If true, libtransmission will limit the entire
|
||||||
|
* session's download speed from "downloadLimit".
|
||||||
|
*
|
||||||
|
* @param downloadLimit
|
||||||
|
* The speed limit to use for the entire session when
|
||||||
|
* "isDownloadLimitEnabled" is true.
|
||||||
|
*
|
||||||
|
* @param peerLimit
|
||||||
|
* The maximum number of peer connections allowed in a session.
|
||||||
|
* #TR_DEFAULT_GLOBAL_PEER_LIMIT can be used as a default.
|
||||||
|
*
|
||||||
|
* @param messageLevel
|
||||||
|
* Verbosity level of libtransmission's logging mechanism.
|
||||||
|
* Must be one of #TR_MSG_ERR, #TR_MSG_INF, #TR_MSG_DBG.
|
||||||
|
*
|
||||||
|
* @param isMessageQueueingEnabled
|
||||||
|
* If true, then messages will build up in a queue until
|
||||||
|
* processed by the client application.
|
||||||
|
*
|
||||||
|
* @param isBlocklistEnabled
|
||||||
|
* If true, then Transmission will not allow peer connections
|
||||||
|
* to the IP addressess specified in the blocklist.
|
||||||
|
*
|
||||||
|
* @param peerSocketTOS
|
||||||
|
*
|
||||||
|
* @param rpcIsEnabled
|
||||||
|
* If true, then libtransmission will open an http server port
|
||||||
|
* to listen for incoming RPC requests.
|
||||||
|
*
|
||||||
|
* @param rpcPort
|
||||||
|
* The port on which to listen for incoming RPC requests
|
||||||
|
*
|
||||||
|
* @param rpcACL
|
||||||
|
* The access control list for allowing/denying RPC requests
|
||||||
|
* from specific IP ranges.
|
||||||
|
* @see tr_sessionSetRPCACL()
|
||||||
*
|
*
|
||||||
* @see TR_DEFAULT_PEER_SOCKET_TOS
|
* @see TR_DEFAULT_PEER_SOCKET_TOS
|
||||||
* @see TR_DEFAULT_BLOCKLIST_ENABLED
|
* @see TR_DEFAULT_BLOCKLIST_ENABLED
|
||||||
* @see TR_DEFAULT_RPC_ENABLED
|
* @see TR_DEFAULT_RPC_ENABLED
|
||||||
* @see TR_DEFAULT_RPC_PORT
|
* @see TR_DEFAULT_RPC_PORT
|
||||||
* @see TR_DEFAULT_RPC_ACL
|
* @see TR_DEFAULT_RPC_ACL
|
||||||
|
* @see tr_sessionClose()
|
||||||
*/
|
*/
|
||||||
tr_handle * tr_sessionInitFull( const char * configDir,
|
tr_handle * tr_sessionInitFull( const char * configDir,
|
||||||
const char * downloadDir,
|
const char * downloadDir,
|
||||||
|
@ -146,17 +222,20 @@ tr_handle * tr_sessionInitFull( const char * configDir,
|
||||||
int peerSocketTOS,
|
int peerSocketTOS,
|
||||||
int rpcIsEnabled,
|
int rpcIsEnabled,
|
||||||
int rpcPort,
|
int rpcPort,
|
||||||
const char * rpcACL );
|
const char * rpcAccessControlList );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Like tr_sessionInitFull() but with default values supplied.
|
* @brief shorter form of tr_sessionInitFull()
|
||||||
|
*
|
||||||
|
* @deprecated Use tr_sessionInitFull() instead.
|
||||||
*/
|
*/
|
||||||
tr_handle * tr_sessionInit( const char * configDir,
|
tr_handle * tr_sessionInit( const char * configDir,
|
||||||
const char * downloadDir,
|
const char * downloadDir,
|
||||||
const char * tag );
|
const char * tag );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shut down a libtransmission instance created by tr_sessionInit*()
|
* @brief end a libtransmission session
|
||||||
|
* @see tr_sessionInitFull()
|
||||||
*/
|
*/
|
||||||
void tr_sessionClose( tr_handle * );
|
void tr_sessionClose( tr_handle * );
|
||||||
|
|
||||||
|
@ -170,18 +249,43 @@ const char * tr_sessionGetConfigDir( const tr_handle * );
|
||||||
/**
|
/**
|
||||||
* Set the per-session default download folder for new torrents.
|
* Set the per-session default download folder for new torrents.
|
||||||
* @see tr_sessionInitFull()
|
* @see tr_sessionInitFull()
|
||||||
|
* @see tr_sessionGetDownloadDir()
|
||||||
* @see tr_ctorSetDownloadDir()
|
* @see tr_ctorSetDownloadDir()
|
||||||
*/
|
*/
|
||||||
void tr_sessionSetDownloadDir( tr_handle *, const char * downloadDir );
|
void tr_sessionSetDownloadDir( tr_handle *, const char * downloadDir );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the default download folder for new torrents.
|
||||||
|
*
|
||||||
|
* This is set by tr_sessionInitFull() or tr_sessionSetDownloadDir(),
|
||||||
|
* and can be overridden on a per-torrent basis by tr_ctorSetDownloadDir().
|
||||||
|
*/
|
||||||
const char * tr_sessionGetDownloadDir( const tr_handle * );
|
const char * tr_sessionGetDownloadDir( const tr_handle * );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set whether or not RPC calls are allowed in this session.
|
||||||
|
*
|
||||||
|
* @details If true, libtransmission will open a server socket to listen
|
||||||
|
* for incoming http RPC requests as described in docs/rpc-spec.txt.
|
||||||
|
*
|
||||||
|
* This is intially set by tr_sessionInitFull() and can be
|
||||||
|
* queried by tr_sessionIsRPCEnabled().
|
||||||
|
*/
|
||||||
void tr_sessionSetRPCEnabled( tr_handle *, int isEnabled );
|
void tr_sessionSetRPCEnabled( tr_handle *, int isEnabled );
|
||||||
|
|
||||||
|
/** @brief Get whether or not RPC calls are allowed in this session.
|
||||||
|
@see tr_sessionInitFull()
|
||||||
|
@see tr_sessionSetRPCEnabled() */
|
||||||
int tr_sessionIsRPCEnabled( const tr_handle * handle );
|
int tr_sessionIsRPCEnabled( const tr_handle * handle );
|
||||||
|
|
||||||
|
/** @brief Specify which port to listen for RPC requests on.
|
||||||
|
@see tr_sessionInitFull()
|
||||||
|
@see tr_sessionGetRPCPort */
|
||||||
void tr_sessionSetRPCPort( tr_handle *, int port );
|
void tr_sessionSetRPCPort( tr_handle *, int port );
|
||||||
|
|
||||||
|
/** @brief Get which port to listen for RPC requests on.
|
||||||
|
@see tr_sessionInitFull()
|
||||||
|
@see tr_sessionSetRPCPort */
|
||||||
int tr_sessionGetRPCPort( const tr_handle * );
|
int tr_sessionGetRPCPort( const tr_handle * );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -197,9 +301,15 @@ int tr_sessionGetRPCPort( const tr_handle * );
|
||||||
* Client applications need to validate user input, or better yet
|
* Client applications need to validate user input, or better yet
|
||||||
* generate it from a higher-level interface that doesn't allow user error,
|
* generate it from a higher-level interface that doesn't allow user error,
|
||||||
* before calling this function.
|
* before calling this function.
|
||||||
|
*
|
||||||
|
* @see tr_sessionInitFull
|
||||||
|
* @see tr_sessionGetRPCACL
|
||||||
*/
|
*/
|
||||||
void tr_sessionSetRPCACL( tr_handle *, const char * acl );
|
void tr_sessionSetRPCACL( tr_handle *, const char * acl );
|
||||||
|
|
||||||
|
/** Returns the Access Control List for allowing/denying RPC requests.
|
||||||
|
@see tr_sessionInitFull
|
||||||
|
@see tr_sessionSetRPCACL */
|
||||||
const char* tr_sessionGetRPCACL( const tr_handle * );
|
const char* tr_sessionGetRPCACL( const tr_handle * );
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
@ -231,9 +341,9 @@ void tr_sessionSetRPCCallback( tr_handle * handle,
|
||||||
|
|
||||||
typedef struct tr_session_stats
|
typedef struct tr_session_stats
|
||||||
{
|
{
|
||||||
|
float ratio; /* TR_RATIO_INF, TR_RATIO_NA, or total up/down */
|
||||||
uint64_t uploadedBytes; /* total up */
|
uint64_t uploadedBytes; /* total up */
|
||||||
uint64_t downloadedBytes; /* total down */
|
uint64_t downloadedBytes; /* total down */
|
||||||
double ratio; /* TR_RATIO_INF, TR_RATIO_NA, or total up/down */
|
|
||||||
uint64_t filesAdded; /* number of files added */
|
uint64_t filesAdded; /* number of files added */
|
||||||
uint64_t sessionCount; /* program started N times */
|
uint64_t sessionCount; /* program started N times */
|
||||||
uint64_t secondsActive; /* how long Transmisson's been running */
|
uint64_t secondsActive; /* how long Transmisson's been running */
|
||||||
|
|
Loading…
Reference in a new issue