From 1b8435aa0223799f766210e9a2085fb494042a43 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 10 Jul 2008 14:20:36 +0000 Subject: [PATCH] (1) remote: fix bug with specifying torrent id for file list. (2) very minor cleanup --- daemon/remote.c | 37 +++++++++++++++++---------------- libtransmission/rpc.c | 48 +++++++++++++++---------------------------- libtransmission/rpc.h | 30 +++++++++++++-------------- 3 files changed, 50 insertions(+), 65 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 3f0b42473..4043c5109 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -177,10 +177,10 @@ readargs( int argc, const char ** argv ) break; case 'f': tr_bencDictAddStr( &top, "method", "torrent-get" ); tr_bencDictAddInt( &top, "tag", TAG_FILES ); - tr_rpc_parse_list_str( tr_bencDictAdd( args, "ids" ), optarg, strlen(optarg) ); - fields = TR_RPC_TORRENT_FIELD_ID - | TR_RPC_TORRENT_FIELD_FILES - | TR_RPC_TORRENT_FIELD_PRIORITIES; + addIdArg( args, id ); + fields = TR_RPC_TORRENT_ID + | TR_RPC_TORRENT_FILES + | TR_RPC_TORRENT_PRIORITIES; tr_bencDictAddInt( args, "fields", fields ); break; case 'g': debug = 1; @@ -189,23 +189,23 @@ readargs( int argc, const char ** argv ) case 'i': tr_bencDictAddStr( &top, "method", "torrent-get" ); tr_bencDictAddInt( &top, "tag", TAG_DETAILS ); addIdArg( args, id ); - fields = TR_RPC_TORRENT_FIELD_ACTIVITY - | TR_RPC_TORRENT_FIELD_ANNOUNCE - | TR_RPC_TORRENT_FIELD_ERROR - | TR_RPC_TORRENT_FIELD_HISTORY - | TR_RPC_TORRENT_FIELD_ID - | TR_RPC_TORRENT_FIELD_INFO - | TR_RPC_TORRENT_FIELD_SCRAPE - | TR_RPC_TORRENT_FIELD_SIZE - | TR_RPC_TORRENT_FIELD_TRACKER_STATS; + fields = TR_RPC_TORRENT_ACTIVITY + | TR_RPC_TORRENT_ANNOUNCE + | TR_RPC_TORRENT_ERROR + | TR_RPC_TORRENT_HISTORY + | TR_RPC_TORRENT_ID + | TR_RPC_TORRENT_INFO + | TR_RPC_TORRENT_SCRAPE + | TR_RPC_TORRENT_SIZE + | TR_RPC_TORRENT_TRACKER_STATS; tr_bencDictAddInt( args, "fields", fields ); break; 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_HISTORY - | TR_RPC_TORRENT_FIELD_SIZE; + fields = TR_RPC_TORRENT_ID + | TR_RPC_TORRENT_ACTIVITY + | TR_RPC_TORRENT_HISTORY + | TR_RPC_TORRENT_SIZE; tr_bencDictAddInt( args, "fields", fields ); break; case 'm': tr_bencDictAddStr( &top, "method", "session-set" ); @@ -243,7 +243,8 @@ readargs( int argc, const char ** argv ) addIdArg( args, id ); break; case 'w': tr_bencDictAddStr( &top, "method", "session-set" ); - tr_bencDictAddStr( args, "download-dir", absolutify(buf,sizeof(buf),optarg) ); + tr_bencDictAddStr( args, "download-dir", + absolutify(buf,sizeof(buf),optarg) ); break; case 'x': tr_bencDictAddStr( &top, "method", "session-set" ); tr_bencDictAddInt( args, "pex-allowed", 1 ); diff --git a/libtransmission/rpc.c b/libtransmission/rpc.c index 251d590e0..2ded11266 100644 --- a/libtransmission/rpc.c +++ b/libtransmission/rpc.c @@ -49,10 +49,6 @@ getTorrents( tr_handle * handle, tr_benc * args, int * setmeCount ) tr_torrent ** torrents = NULL; tr_benc * ids; - /*** - **** Build the array of torrents - ***/ - if( tr_bencDictFindList( args, "ids", &ids ) ) { int i; @@ -91,10 +87,6 @@ getTorrents( tr_handle * handle, tr_benc * args, int * setmeCount ) torrents[torrentCount++] = tor; } - /*** - **** return the results - ***/ - *setmeCount = torrentCount; return torrents; } @@ -206,7 +198,7 @@ addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields ) tr_bencInitDict( d, 64 ); - if( fields & TR_RPC_TORRENT_FIELD_ACTIVITY ) { + if( fields & TR_RPC_TORRENT_ACTIVITY ) { tr_bencDictAddInt( d, "desiredAvailable", st->desiredAvailable ); tr_bencDictAddInt( d, "eta", st->eta ); tr_bencDictAddInt( d, "peersConnected", st->peersConnected ); @@ -220,7 +212,7 @@ addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields ) tr_bencDictAddInt( d, "webseedsSendingToUs", st->webseedsSendingToUs ); } - if( fields & TR_RPC_TORRENT_FIELD_ANNOUNCE ) { + if( fields & TR_RPC_TORRENT_ANNOUNCE ) { tr_bencDictAddStr( d, "announceResponse", st->announceResponse ); tr_bencDictAddStr( d, "announceURL", st->announceURL ); tr_bencDictAddInt( d, "lastAnnounceTime", st->lastAnnounceTime ); @@ -228,15 +220,15 @@ addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields ) tr_bencDictAddInt( d, "nextAnnounceTime", st->nextAnnounceTime ); } - if( fields & TR_RPC_TORRENT_FIELD_ERROR ) { + if( fields & TR_RPC_TORRENT_ERROR ) { tr_bencDictAddInt( d, "error", st->error ); tr_bencDictAddStr( d, "errorString", st->errorString ); } - if( fields & TR_RPC_TORRENT_FIELD_FILES ) + if( fields & TR_RPC_TORRENT_FILES ) addFiles( inf, tr_bencDictAddList( d, "files", inf->fileCount ) ); - if( fields & TR_RPC_TORRENT_FIELD_HISTORY ) { + if( fields & TR_RPC_TORRENT_HISTORY ) { tr_bencDictAddInt( d, "activityDate", st->activityDate ); tr_bencDictAddInt( d, "addedDate", st->addedDate ); tr_bencDictAddInt( d, "corruptEver", st->corruptEver ); @@ -246,13 +238,13 @@ addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields ) tr_bencDictAddInt( d, "uploadedEver", st->uploadedEver ); } - if( fields & TR_RPC_TORRENT_FIELD_ID ) { + if( fields & TR_RPC_TORRENT_ID ) { tr_bencDictAddInt( d, "id", st->id ); tr_bencDictAddStr( d, "hashString", tor->info.hashString ); tr_bencDictAddStr( d, "name", inf->name ); } - if( fields & TR_RPC_TORRENT_FIELD_INFO ) { + if( fields & TR_RPC_TORRENT_INFO ) { tr_bencDictAddStr( d, "comment", inf->comment ? inf->comment : "" ); tr_bencDictAddStr( d, "creator", inf->creator ? inf->creator : "" ); tr_bencDictAddInt( d, "dateCreated", inf->dateCreated ); @@ -261,7 +253,7 @@ addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields ) tr_bencDictAddInt( d, "pieceSize", inf->pieceSize ); } - if( fields & TR_RPC_TORRENT_FIELD_LIMITS ) { + if( fields & TR_RPC_TORRENT_LIMITS ) { tr_bencDictAddInt( d, "downloadLimit", tr_torrentGetSpeedLimit( tor, TR_DOWN ) ); tr_bencDictAddInt( d, "downloadLimitMode", tr_torrentGetSpeedMode( tor, TR_DOWN ) ); tr_bencDictAddInt( d, "maxConnectedPeers", tr_torrentGetPeerLimit( tor ) ); @@ -269,7 +261,7 @@ addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields ) tr_bencDictAddInt( d, "uploadLimitMode", tr_torrentGetSpeedMode( tor, TR_UP ) ); } - if( fields & TR_RPC_TORRENT_FIELD_PEERS ) { + if( fields & TR_RPC_TORRENT_PEERS ) { const int * f = st->peersFrom; tr_bencDictAddInt( d, "fromCache", f[TR_PEER_FROM_CACHE] ); tr_bencDictAddInt( d, "fromIncoming", f[TR_PEER_FROM_INCOMING] ); @@ -277,7 +269,7 @@ addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields ) tr_bencDictAddInt( d, "fromTracker", f[TR_PEER_FROM_TRACKER] ); } - if( fields & TR_RPC_TORRENT_FIELD_PRIORITIES ) { + if( fields & TR_RPC_TORRENT_PRIORITIES ) { tr_file_index_t i; tr_benc * p = tr_bencDictAddList( d, "priorities", inf->fileCount ); tr_benc * w = tr_bencDictAddList( d, "wanted", inf->fileCount ); @@ -287,14 +279,14 @@ addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields ) } } - if( fields & TR_RPC_TORRENT_FIELD_SCRAPE ) { + if( fields & TR_RPC_TORRENT_SCRAPE ) { tr_bencDictAddInt( d, "lastScrapeTime", st->lastScrapeTime ); tr_bencDictAddInt( d, "nextScrapeTime", st->nextScrapeTime ); tr_bencDictAddStr( d, "scrapeResponse", st->scrapeResponse ); tr_bencDictAddStr( d, "scrapeURL", st->scrapeURL ); } - if( fields & TR_RPC_TORRENT_FIELD_SIZE ) { + if( fields & TR_RPC_TORRENT_SIZE ) { tr_bencDictAddInt( d, "haveUnchecked", st->haveUnchecked ); tr_bencDictAddInt( d, "haveValid", st->haveValid ); tr_bencDictAddInt( d, "leftUntilDone", st->leftUntilDone ); @@ -302,17 +294,17 @@ addInfo( const tr_torrent * tor, tr_benc * d, uint64_t fields ) tr_bencDictAddInt( d, "totalSize", inf->totalSize ); } - if( fields & TR_RPC_TORRENT_FIELD_TRACKER_STATS ) { + if( fields & TR_RPC_TORRENT_TRACKER_STATS ) { tr_bencDictAddInt( d, "leechers", st->leechers ); tr_bencDictAddInt( d, "peersKnown", st->peersKnown ); tr_bencDictAddInt( d, "seeders", st->seeders ); tr_bencDictAddInt( d, "timesCompleted", st->timesCompleted ); } - if( fields & TR_RPC_TORRENT_FIELD_TRACKERS ) + if( fields & TR_RPC_TORRENT_TRACKERS ) addTrackers( inf, tr_bencDictAddList( d, "trackers", inf->trackerCount ) ); - if( fields & TR_RPC_TORRENT_FIELD_WEBSEEDS ) + if( fields & TR_RPC_TORRENT_WEBSEEDS ) addWebseeds( inf, tr_bencDictAddList( d, "webseeds", inf->trackerCount ) ); } @@ -464,7 +456,7 @@ torrentAdd( tr_handle * h, tr_benc * args_in, tr_benc * args_out ) tr_ctorFree( ctor ); if( tor ) { - addInfo( tor, tr_bencDictAdd( args_out, "torrent-added" ), TR_RPC_TORRENT_FIELD_ID ); + addInfo( tor, tr_bencDictAdd( args_out, "torrent-added" ), TR_RPC_TORRENT_ID ); notify( h, TR_RPC_TORRENT_ADDED, tor ); } else if( err == TR_EDUPLICATE ) { return "duplicate torrent"; @@ -727,14 +719,6 @@ tr_rpc_request_exec_uri( struct tr_handle * handle, tr_bencInitDict( &top, 3 ); args = tr_bencDictAddDict( &top, "arguments", 0 ); - /* munge the URI into a usable form. - * we have very loose typing on this to make the URIs as simple as possible: - * - anything not a 'tag' or 'method' is automatically in 'arguments' - * - values that are all-digits are numbers - * - values that are all-digits or commas are number lists - * - all other values are strings - */ - pch = strchr( request, '?' ); if( !pch ) pch = request; while( pch ) diff --git a/libtransmission/rpc.h b/libtransmission/rpc.h index d3a4da9a6..1df5e2036 100644 --- a/libtransmission/rpc.h +++ b/libtransmission/rpc.h @@ -19,21 +19,21 @@ enum { - TR_RPC_TORRENT_FIELD_ACTIVITY = (1<<0), - TR_RPC_TORRENT_FIELD_ANNOUNCE = (1<<1), - TR_RPC_TORRENT_FIELD_ERROR = (1<<2), - TR_RPC_TORRENT_FIELD_FILES = (1<<3), - TR_RPC_TORRENT_FIELD_HISTORY = (1<<4), - TR_RPC_TORRENT_FIELD_ID = (1<<5), - 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_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) + TR_RPC_TORRENT_ACTIVITY = (1<<0), + TR_RPC_TORRENT_ANNOUNCE = (1<<1), + TR_RPC_TORRENT_ERROR = (1<<2), + TR_RPC_TORRENT_FILES = (1<<3), + TR_RPC_TORRENT_HISTORY = (1<<4), + TR_RPC_TORRENT_ID = (1<<5), + TR_RPC_TORRENT_INFO = (1<<6), + TR_RPC_TORRENT_LIMITS = (1<<7), + TR_RPC_TORRENT_PEERS = (1<<8), + TR_RPC_TORRENT_PRIORITIES = (1<<9), + TR_RPC_TORRENT_SCRAPE = (1<<10), + TR_RPC_TORRENT_SIZE = (1<<11), + TR_RPC_TORRENT_TRACKER_STATS = (1<<12), + TR_RPC_TORRENT_TRACKERS = (1<<13), + TR_RPC_TORRENT_WEBSEEDS = (1<<14) }; struct tr_benc;