case 'f': tr_bencDictAddStr( &top, "method", "session-set" );
tr_bencDictAddStr( args, "download-dir", absolutify(buf,sizeof(buf),optarg) );
break;
- case 'l': tr_bencDictAddStr( &top, "method", "torrent-info" );
+ case 'l': tr_bencDictAddStr( &top, "method", "torrent-get" );
tr_bencDictAddInt( &top, "tag", TAG_LIST );
fields = TR_RPC_TORRENT_FIELD_ID
- | TR_RPC_TORRENT_FIELD_ACTIVITY
- | TR_RPC_TORRENT_FIELD_SIZE;
+ | TR_RPC_TORRENT_FIELD_ACTIVITY;
tr_bencDictAddInt( args, "fields", fields );
- tr_bencDictAddStr( args, "sort", "name" );
+ /*tr_bencDictAddStr( args, "sort", "name" );*/
break;
case 'm': tr_bencDictAddStr( &top, "method", "session-set" );
tr_bencDictAddInt( args, "port-forwarding-enabled", 1 );
if( ( tag == TAG_LIST ) &&
( tr_bencDictFindDict( &top, "arguments", &args ) ) &&
- ( tr_bencDictFindList( args, "torrent-info", &list ) ) )
+ ( tr_bencDictFindList( args, "torrents", &list ) ) )
{
int i, n;
for( i=0, n=tr_bencListSize( list ); i<n; ++i )
2. Message Format
Messages are formatted in a subset of JSON easily represented
- as bencoded data -- arrays, objects, strings, and numbers.
+ as bencoded data -- arrays, objects, strings, and whole numbers.
Booleans are represented as numbers where 0 is false and 1 is true.
+ Floating-point numbers are represented as strings.
Messages are formatted as objects. There are two types:
requests (described in 2.1) and responses (described in 2.2).
(1) A required "method" string telling the name of the method to invoke
(2) An optional "arguments" object of key/value pairs
- (3) An optional "tag" integer used by clients to track responses.
+ (3) An optional "tag" number used by clients to track responses.
If provided by a request, the response MUST include the same tag.
2.2. Responses
(1) A required "result" string whose value must be "success" on success,
or an error string on failure.
(2) An optional "arguments" object of key/value pairs
- (3) An optional "tag" integer as described in 2.1.
+ (3) An optional "tag" number as described in 2.1.
2.3. Transport Mechanism
- POSTing a JSON-encoded request is the preferred way of communicating
- with the Transmission server; however, a simple notation also exists
+ HTTP POSTing a JSON-encoded request is the preferred way of communicating
+ with a Transmission RPC server; however, a simple notation also exists
for sending requests in the query portion of a URL.
The URL notation works as follows:
"torrent-stop" | tr_torrentStop
"torrent-verify" | tr_torrentVerify
- Request arguments: "ids", a list of torrent id integers, sha1 hash strings,
+ Request arguments: "ids", a list of torrent id numbers, sha1 hash strings,
or both. These are the torrents that the request will
be applied to. If "ids" is ommitted, the request is
applied to all torrents.
Response arguments: none
-3.2. Torrent Information Requests
+3.2. Torrent Mutator
- Method name: "torrent-info".
+ Method name: "torrent-set"
+
+ Request arguments:
- The request supports four arguments:
+ string | value type & description
+ ---------------------------+-------------------------------------------------
+ "files-wanted" | array indices of one or more file to download
+ "files-unwanted" | array indices of one or more file to not download
+ "ids" | array which torrent(s) to set, described in 3.1
+ "peer-limit" | number maximum number of peers
+ "priority-high" | array indices of one or more high-priority files
+ "priority-low" | array indices of one or more low-priority files
+ "priority-normal" | array indices of one or more normal-priority files
+ "speed-limit-down" | number maximum download speed (in KiB/s)
+ "speed-limit-down-enabled" | 'boolean' true if the download speed is limited
+ "speed-limit-up" | number maximum upload speed (in KiB/s)
+ "speed-limit-up-enabled" | 'boolean' true if the upload speed is limited
+
+ Response arguments: none
- (1) An optional "ids" array as described in section 3.1.
- (2) A required "fields" number as described in the table below.
- (3) An optional "sort" string whose value should be one of
- "activity", "age", "id", "name", "progress", "ratio", "state", "tracker".
- The default value is "id".
- (4) An optional "sort-ascending" 'boolean'.
- This is only used if "sort-method" is supplied.
- Its default value is 'true'.
- (5) An optional "filter" string whose value may be one of
- "active", "all", "downloading", "paused", "seeding".
- The default value is "all".
+3.3. Torrent Accessors
- The respons supports two arguments:
+ Method name: "torrent-get".
- (1) A required "fields" number identical to the request's
- (2) A "torrent-info" list of objects, each of which contains the
- response names described in the table below.
+ Request arguments:
- field and | response | response | source
- numeric value | type | name |
+ string | required? | default | value type & description
+ -------------+-----------+---------+---------------------------------------
+ "ids" | no | all | array described in 3.1
+ "fields" | yes | n/a | number bitwise-or'ed field
+ | | | values from the table below
+ "sort" | no | "id" | string "activity", "age", "id",
+ | | | "name", "progress", "ratio",
+ | | | "state", or "tracker".
+ "ascending" | no | 'true' | 'boolean' true if sorting ascending
+ "filter" | no | "all" | string "active", "all", "paused",
+ | | | "downloading", or "seeding".
+
+ The response contains two arguments:
+
+ (1) A "fields" number identical to the request's
+ (2) A "torrents" array of objects, each of which contains the
+ key/value fields that match the "fields" argument.
+ See the table below for a complete list.
+
+ "fields" value | response | response | source
+ | value | key |
-------------------+----------+------------------------+-------------
activity, 1 | number | desiredAvailable | tr_stat
| number | eta | tr_stat
-------------------+----------+------------------------+-------------
announce, 2 | string | announceResponse | tr_stat
| string | announceURL | tr_stat
- | string | lastAnnounceTime | tr_stat
- | string | manualAnnounceTime | tr_stat
- | string | nextAnnounceTime | tr_stat
+ | number | lastAnnounceTime | tr_stat
+ | number | manualAnnounceTime | tr_stat
+ | number | nextAnnounceTime | tr_stat
-------------------+----------+------------------------+-------------
error, 4 | number | error | tr_stat
- | number | errorString | tr_Stat
+ | number | errorString | tr_stat
-------------------+----------+------------------------+-------------
files, 8 | array | files
+----------+--------------------------------------
| number | fromPex | tr_stat
| number | fromTracker | tr_stat
-------------------+----------+------------------------+-------------
- scrape, 512 | number | lastScrapeTime | tr_stat
+ priorities, 512 | array | priorities | tr_info
+ | array | wanted | tr_info
+ +----------+--------------------------------------
+ | priorities is an array of tr_info.fileCount
+ | numbers. Each is the tr_priority_t mode for
+ | the corresponding file.
+ +-------------------------------------------------
+ | wanted is an array of tr_info.fileCount
+ | 'booleans' true if the corresponding file
+ | is to be downloaded.
+ -------------------+----------+------------------------+-------------
+ scrape, 1024 | number | lastScrapeTime | tr_stat
| number | nextScrapeTime | tr_stat
| string | scrapeResponse | tr_stat
| string | scrapeURL | tr_stat
-------------------+----------+------------------------+-------------
- size, 1024 | number | haveUnchecked | tr_stat
+ size, 2048 | number | haveUnchecked | tr_stat
| number | haveValid | tr_stat
| number | leftUntilDone | tr_stat
| number | sizeWhenDone | tr_stat
| number | totalSize | tr_info
-------------------+----------+------------------------+-------------
tracker stats, | number | leechers | tr_stat
- 2048 | number | peersKnown | tr_stat
+ 4096 | number | peersKnown | tr_stat
| number | seeders | tr_stat
| number | timesCompleted | tr_stat
-------------------+----------+--------------------------------------
- trackers, 4096 | array | trackers
+ trackers, 8192 | array | trackers
+----------+--------------------------------------
| trackers is an array of objects that contain:
+----------+------------------------+-------------
| string | scrape | tr_info
| number | tier | tr_info
-------------------+----------+------------------------+-------------
- webseeds, 8192 | object | webseeds
+ webseeds, 16384 | array | webseeds
+----------+--------------------------------------
- | webseeds contains:
+ | webseeds is an array of strings:
+----------+------------------------+-------------
- | an array of weseed URL strings | tr_info
+ | string | webseed URL | tr_info
-------------------+----------+------------------------+-------------
-
Example:
- Say we want to get the name and total size torrents 7 and 10.
- name is in the "id" section (32) and total size is in "size" (1024),
- so the "fields" argument will be 32 + 1024 == 1056.
+ Say we want to get the name and total size of torrents #7 and #10.
+ name is in the "id" section (32) and total size is in "size" (2048),
+ so the "fields" argument will be 32 + 2048 == 2080.
Request:
{
"arguments": {
- "fields": 1056,
+ "fields": 2080,
"ids": [ 7, 10 ],
"sort-method": "name"
}
- "method": "torrent-info",
+ "method": "torrent-get",
"tag": 39693
}
{
"arguments": {
- "fields": 1056,
- "torrent-info": [
+ "fields": 2080,
+ "torrents": [
{
"hashString": "sijioejisoefjiosejfioi",
"haveUnchecked", 23023,
"tag": 39693
}
-3.3. Adding a Torrent
+3.2. Adding a Torrent
Method name: "torrent-add"
key | value type & description
-------------------+-------------------------------------------------
- "download-dir" | string path to download the torrent to
- "filename" | string location of the .torrent file
- "metainfo" | string base64-encoded .torrent content
- "paused" | boolean if true, don't start the torrent
- "peer-limit" | int maximum number of peers
+ "download-dir" | string path to download the torrent to
+ "filename" | string location of the .torrent file
+ "metainfo" | string base64-encoded .torrent content
+ "paused" | 'boolean' if true, don't start the torrent
+ "peer-limit" | number maximum number of peers
Either "filename" OR "metainfo" must be included.
All other arguments are optional.
form of one of 3.3's tr_info objects with the
fields for id, name, and hashString.
-3.4. Other Torrent Settings
-
- Common arguments:
-
- string | value type & description
- ---------------------------+-------------------------------------------------
- "peer-limit" | int maximum number of peers
- "speed-limit-down" | int maximum download speed (in KiB/s)
- "speed-limit-down-enabled" | boolean true if the download speed is limited
- "speed-limit-up" | int maximum upload speed (in KiB/s)
- "speed-limit-up-enabled" | boolean true if the upload speed is limited
-
-3.4.1. Mutators
-
- Method name: "torrent-set"
- Request arguments: 3.1's "ids", plus one or more of 3.6's arguments
- Response arguments: none
-
-
-3.5 File Priorities
-
- Common arguments:
-
- string | value type & description
- -------------------+-------------------------------------------------
- "files-wanted" | array indices of one or more file to download
- "files-unwanted" | array indices of one or more file to not download
- "priority-high" | array indices of one or more high-priority files
- "priority-low" | array indices of one or more low-priority files
- "priority-normal" | array indices of one or more normal-priority files
-
-3.5.1. Mutators
-
- Method name: "torrent-set-priorities"
- Request arguments: 3.1's "ids", plus one or more of 3.7's arguments
- Response arguments: none
-
-3.5.2. Accessors
-
- Method name: "torrent-get-priorities"
- Request arguments: none
- Response arguments: A "torrents" list of objects containing all
- of 3.7's arguments plus the torrent's "id" int.
-
4. Session Status Requests
4.1. Session Arguments
string | value type & description
---------------------------+-------------------------------------------------
- "encryption" | string "required", "preferred", "tolerated"
- "download-dir" | string default path to download torrents
- "peer-limit" | int maximum global number of peers
- "pex-allowed" | boolean true means allow pex in public torrents
- "port" | int port number
- "port-forwarding-enabled" | boolean true means enabled
- "speed-limit-down" | int max global download speed (in KiB/s)
- "speed-limit-down-enabled" | boolean true means enabled
- "speed-limit-up" | int max global upload speed (in KiB/s)
- "speed-limit-up-enabled" | boolean true means enabled
+ "encryption" | string "required", "preferred", "tolerated"
+ "download-dir" | string default path to download torrents
+ "peer-limit" | number maximum global number of peers
+ "pex-allowed" | 'boolean' true means allow pex in public torrents
+ "port" | number port number
+ "port-forwarding-enabled" | 'boolean' true means enabled
+ "speed-limit-down" | number max global download speed (in KiB/s)
+ "speed-limit-down-enabled" | 'boolean' true means enabled
+ "speed-limit-up" | number max global upload speed (in KiB/s)
+ "speed-limit-up-enabled" | 'boolean' true means enabled
4.2. Mutators
static int
compareTorrentsByActivity( const void * a, const void * b )
{
- const tr_stat * sa = tr_torrentStatCached( (tr_torrent*) a );
- const tr_stat * sb = tr_torrentStatCached( (tr_torrent*) b );
+ const tr_stat * sa = tr_torrentStatCached( *(tr_torrent**) a );
+ const tr_stat * sb = tr_torrentStatCached( *(tr_torrent**) b );
int i;
if(( i = tr_compareDouble( sa->rateUpload + sa->rateDownload,
sb->rateUpload + sb->rateDownload ) ))
static int
compareTorrentsByAge( const void * a, const void * b )
{
- return tr_compareTime( tr_torrentStatCached( (tr_torrent*)a )->addedDate,
- tr_torrentStatCached( (tr_torrent*)b )->addedDate );
+ const tr_torrent * ta = * (tr_torrent **) a;
+ const tr_torrent * tb = * (tr_torrent **) b;
+ return tr_compareTime( tr_torrentStatCached( ta )->addedDate,
+ tr_torrentStatCached( tb )->addedDate );
}
static int
compareTorrentsByID( const void * a, const void * b )
{
- return ((tr_torrent*)a)->uniqueId - ((tr_torrent*)b)->uniqueId;
+ const tr_torrent * ta = * (tr_torrent **) a;
+ const tr_torrent * tb = * (tr_torrent **) b;
+ return ta->uniqueId - tb->uniqueId;
}
static int
compareTorrentsByName( const void * a, const void * b )
{
- const tr_torrent * ta = a;
- const tr_torrent * tb = b;
+ const tr_torrent * ta = * (tr_torrent **) a;
+ const tr_torrent * tb = * (tr_torrent **) b;
return tr_strcasecmp( ta->info.name, tb->info.name );
}
static int
compareTorrentsByProgress( const void * a, const void * b )
{
- const tr_stat * sa = tr_torrentStatCached( (tr_torrent*) a );
- const tr_stat * sb = tr_torrentStatCached( (tr_torrent*) b );
+ const tr_stat * sa = tr_torrentStatCached( *(tr_torrent**) a );
+ const tr_stat * sb = tr_torrentStatCached( *(tr_torrent**) b );
int ret = tr_compareDouble( sa->percentDone, sb->percentDone );
if( !ret )
ret = compareRatio( sa->ratio, sb->ratio );
static int
compareTorrentsByRatio( const void * a, const void * b )
{
- const tr_stat * sa = tr_torrentStatCached( (tr_torrent*) a );
- const tr_stat * sb = tr_torrentStatCached( (tr_torrent*) b );
+ const tr_stat * sa = tr_torrentStatCached( *(tr_torrent**) a );
+ const tr_stat * sb = tr_torrentStatCached( *(tr_torrent**) b );
return compareRatio( sa->ratio, sb->ratio );
}
static int
compareTorrentsByState( const void * a, const void * b )
{
- const tr_stat * sa = tr_torrentStatCached( (tr_torrent*) a );
- const tr_stat * sb = tr_torrentStatCached( (tr_torrent*) b );
+ const tr_stat * sa = tr_torrentStatCached( *(tr_torrent**) a );
+ const tr_stat * sb = tr_torrentStatCached( *(tr_torrent**) b );
int ret = sa->status - sb->status;
if( !ret )
ret = compareTorrentsByRatio( a, b );
static int
compareTorrentsByTracker( const void * a, const void * b )
{
- const tr_stat * sa = tr_torrentStatCached( (tr_torrent*) a );
- const tr_stat * sb = tr_torrentStatCached( (tr_torrent*) b );
+ const tr_stat * sa = tr_torrentStatCached( *(tr_torrent**) a );
+ const tr_stat * sb = tr_torrentStatCached( *(tr_torrent**) b );
return tr_strcmp( sa->announceURL, sb->announceURL );
}
method = TR_SORT_ID;
sortAscending = 1;
- tr_bencDictFindInt( args, "sort-ascending", &sortAscending );
+ tr_bencDictFindInt( args, "ascending", &sortAscending );
if( tr_bencDictFindStr( args, "sort", &str ) ) {
if( !strcmp( str, "activity" ) ) method = TR_SORT_ACTIVITY;
else if( !strcmp( str, "age" ) ) method = TR_SORT_AGE;
tr_bencDictAddInt( d, "fromTracker", f[TR_PEER_FROM_TRACKER] );
}
+ if( fields & TR_RPC_TORRENT_FIELD_PRIORITIES ) {
+ tr_file_index_t i;
+ tr_benc * p = tr_bencDictAddList( d, "priorities", inf->fileCount );
+ tr_benc * w = tr_bencDictAddList( d, "wanted", inf->fileCount );
+ for( i=0; i<inf->fileCount; ++i ) {
+ tr_bencListAddInt( p, inf->files[i].priority );
+ tr_bencListAddInt( w, inf->files[i].dnd ? 0 : 1 );
+ }
+ }
+
if( fields & TR_RPC_TORRENT_FIELD_SCRAPE ) {
tr_bencDictAddInt( d, "lastScrapeTime", st->lastScrapeTime );
tr_bencDictAddInt( d, "nextScrapeTime", st->nextScrapeTime );
}
static const char*
-torrentInfo( tr_handle * handle, tr_benc * args_in, tr_benc * args_out )
+torrentGet( tr_handle * handle, tr_benc * args_in, tr_benc * args_out )
{
int i, torrentCount;
tr_torrent ** torrents = getTorrents( handle, args_in, &torrentCount );
- tr_benc * list = tr_bencDictAddList( args_out, "torrent-info", torrentCount );
+ tr_benc * list = tr_bencDictAddList( args_out, "torrents", torrentCount );
int64_t fields = 0;
if( !tr_bencDictFindInt( args_in, "fields", &fields ) )
****
***/
-static const char*
-torrentSet( tr_handle * h, tr_benc * args_in, tr_benc * args_out UNUSED )
-{
- int i, torrentCount;
- tr_torrent ** torrents = getTorrents( h, args_in, &torrentCount );
-
- for( i=0; i<torrentCount; ++i )
- {
- int64_t tmp;
- tr_torrent * tor = torrents[i];
- if( tr_bencDictFindInt( args_in, "peer-limit", &tmp ) )
- tr_torrentSetPeerLimit( tor, tmp );
- if( tr_bencDictFindInt( args_in, "speed-limit-down", &tmp ) )
- tr_torrentSetSpeedLimit( tor, TR_DOWN, tmp );
- if( tr_bencDictFindInt( args_in, "speed-limit-down-enabled", &tmp ) )
- tr_torrentSetSpeedMode( tor, TR_DOWN, tmp ? TR_SPEEDLIMIT_SINGLE
- : TR_SPEEDLIMIT_GLOBAL );
- if( tr_bencDictFindInt( args_in, "speed-limit-up", &tmp ) )
- tr_torrentSetSpeedLimit( tor, TR_UP, tmp );
- if( tr_bencDictFindInt( args_in, "speed-limit-up-enabled", &tmp ) )
- tr_torrentSetSpeedMode( tor, TR_UP, tmp ? TR_SPEEDLIMIT_SINGLE
- : TR_SPEEDLIMIT_GLOBAL );
- notify( h, TR_RPC_TORRENT_CHANGED, tor );
- }
-
- tr_free( torrents );
- return NULL;
-}
-
-typedef int( *fileTestFunc )( const tr_torrent * tor, int i );
-
-static int
-testFileHigh( const tr_torrent * tor, int i )
-{
- return tor->info.files[i].priority == TR_PRI_HIGH;
-}
-static int
-testFileLow( const tr_torrent * tor, int i )
-{
- return tor->info.files[i].priority == TR_PRI_LOW;
-}
-static int
-testFileNormal( const tr_torrent * tor, int i )
-{
- return tor->info.files[i].priority == TR_PRI_NORMAL;
-}
-static int
-testFileDND( const tr_torrent * tor, int i )
-{
- return tor->info.files[i].dnd != 0;
-}
-static int
-testFileDownload( const tr_torrent * tor, int i )
-{
- return tor->info.files[i].dnd == 0;
-}
-
-static void
-buildFileList( const tr_torrent * tor, tr_benc * dict,
- const char * key, fileTestFunc func )
-{
- int i;
- const int n = tor->info.fileCount;
- tr_benc * list;
- int * files = tr_new0( int, n );
- int fileCount = 0;
-
- for( i=0; i<n; ++i )
- if( func( tor, i ) )
- files[fileCount++] = i;
-
- list = tr_bencDictAddList( dict, key, fileCount );
-
- for( i=0; i<fileCount; ++i )
- tr_bencListAddInt( list, files[i] );
-
- tr_free( files );
-}
-
-static const char*
-torrentGetPriorities( tr_handle * handle,
- tr_benc * args_in, tr_benc * args_out )
-{
- int i, torrentCount;
- tr_torrent ** torrents = getTorrents( handle, args_in, &torrentCount );
- tr_benc * list = tr_bencDictAddList( args_out, "torrents", torrentCount );
-
- for( i=0; i<torrentCount; ++i )
- {
- const tr_torrent * tor = torrents[i];
- tr_benc * d = tr_bencListAddDict( list, 6 );
- tr_bencDictAddInt( d, "id", tr_torrentId( tor ) );
- buildFileList( tor, d, "files-unwanted", testFileDND );
- buildFileList( tor, d, "files-wanted", testFileDownload );
- buildFileList( tor, d, "priority-low", testFileLow );
- buildFileList( tor, d, "priority-normal", testFileNormal );
- buildFileList( tor, d, "priority-high", testFileHigh );
- }
-
- tr_free( torrents );
- return NULL;
-}
-
static void
setFilePriorities( tr_torrent * tor, int priority, tr_benc * list )
{
}
static const char*
-torrentSetPriorities( tr_handle * h,
- tr_benc * args_in, tr_benc * args_out UNUSED )
+torrentSet( tr_handle * h, tr_benc * args_in, tr_benc * args_out UNUSED )
{
int i, torrentCount;
tr_torrent ** torrents = getTorrents( h, args_in, &torrentCount );
for( i=0; i<torrentCount; ++i )
{
+ int64_t tmp;
tr_benc * files;
tr_torrent * tor = torrents[i];
setFileDLs( tor, FALSE, files );
if( tr_bencDictFindList( args_in, "files-wanted", &files ) )
setFileDLs( tor, TRUE, files );
+ if( tr_bencDictFindInt( args_in, "peer-limit", &tmp ) )
+ tr_torrentSetPeerLimit( tor, tmp );
if( tr_bencDictFindList( args_in, "priority-high", &files ) )
setFilePriorities( tor, TR_PRI_HIGH, files );
if( tr_bencDictFindList( args_in, "priority-low", &files ) )
setFilePriorities( tor, TR_PRI_LOW, files );
if( tr_bencDictFindList( args_in, "priority-normal", &files ) )
setFilePriorities( tor, TR_PRI_NORMAL, files );
+ if( tr_bencDictFindInt( args_in, "speed-limit-down", &tmp ) )
+ tr_torrentSetSpeedLimit( tor, TR_DOWN, tmp );
+ if( tr_bencDictFindInt( args_in, "speed-limit-down-enabled", &tmp ) )
+ tr_torrentSetSpeedMode( tor, TR_DOWN, tmp ? TR_SPEEDLIMIT_SINGLE
+ : TR_SPEEDLIMIT_GLOBAL );
+ if( tr_bencDictFindInt( args_in, "speed-limit-up", &tmp ) )
+ tr_torrentSetSpeedLimit( tor, TR_UP, tmp );
+ if( tr_bencDictFindInt( args_in, "speed-limit-up-enabled", &tmp ) )
+ tr_torrentSetSpeedMode( tor, TR_UP, tmp ? TR_SPEEDLIMIT_SINGLE
+ : TR_SPEEDLIMIT_GLOBAL );
notify( h, TR_RPC_TORRENT_CHANGED, tor );
}
{ "session-get", sessionGet },
{ "session-set", sessionSet },
{ "torrent-add", torrentAdd },
- { "torrent-get-priorities", torrentGetPriorities },
- { "torrent-info", torrentInfo },
+ { "torrent-get", torrentGet },
{ "torrent-remove", torrentRemove },
- { "torrent-set-priorities", torrentSetPriorities },
{ "torrent-set", torrentSet },
{ "torrent-start", torrentStart },
{ "torrent-stop", torrentStop },
TR_RPC_TORRENT_FIELD_INFO = (1<<6),
TR_RPC_TORRENT_FIELD_LIMITS = (1<<7),
TR_RPC_TORRENT_FIELD_PEERS = (1<<8),
- TR_RPC_TORRENT_FIELD_SCRAPE = (1<<9),
- TR_RPC_TORRENT_FIELD_SIZE = (1<<10),
- TR_RPC_TORRENT_FIELD_TRACKER_STATS = (1<<11),
- TR_RPC_TORRENT_FIELD_TRACKERS = (1<<12),
- TR_RPC_TORRENT_FIELD_WEBSEEDS = (1<<13)
+ TR_RPC_TORRENT_FIELD_PRIORITIES = (1<<9),
+ TR_RPC_TORRENT_FIELD_SCRAPE = (1<<10),
+ TR_RPC_TORRENT_FIELD_SIZE = (1<<11),
+ TR_RPC_TORRENT_FIELD_TRACKER_STATS = (1<<12),
+ TR_RPC_TORRENT_FIELD_TRACKERS = (1<<13),
+ TR_RPC_TORRENT_FIELD_WEBSEEDS = (1<<14)
};
struct tr_benc;