Changeset 6404
- Timestamp:
- Jul 26, 2008, 2:47:07 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/daemon/remote.c
r6383 r6404 173 173 } 174 174 175 #define TR_N_ELEMENTS( ary ) ( sizeof( ary ) / sizeof( *ary ) ) 176 177 static const char * files_keys[] = { 178 "files", "name", "priorities", "wanted" 179 }; 180 181 static const char * details_keys[] = { 182 "activityDate", "addedDate", "announceResponse", "announceURL", 183 "comment", "corruptEver", "creator", "dateCreated", "doneDate", 184 "downloadedEver", "errorString", "eta", "hashString", "haveUnchecked", 185 "haveValid", "id", "isPrivate", "lastAnnounceTime", "lastScrapeTime", 186 "leechers", "leftUntilDone", "name", "nextAnnounceTime", "nextScrapeTime", 187 "pieceCount", "pieceSize", "rateDownload", "rateUpload", "recheckProgress", 188 "scrapeResponse", "seeders", "sizeWhenDone", "sizeWhenDone", "startDate", 189 "status", "timesCompleted", "totalSize", "uploadedEver" 190 }; 191 192 static const char * list_keys[] = { 193 "downloadedEver", "eta", "id", "leftUntilDone", "name", "rateDownload", 194 "rateUpload", "sizeWhenDone", "status", "uploadedEver" 195 }; 196 175 197 static void 176 198 readargs( int argc, const char ** argv ) … … 185 207 while(( c = tr_getopt( getUsage(), argc, argv, opts, &optarg ))) 186 208 { 209 int i, n; 187 210 char buf[MAX_PATH_LENGTH]; 188 211 int addArg = TRUE; 189 tr_benc top, *args ;212 tr_benc top, *args, *fields; 190 213 tr_bencInitDict( &top, 3 ); 191 int64_t fields = 0;192 214 args = tr_bencDictAddDict( &top, "arguments", 0 ); 193 215 … … 221 243 tr_bencDictAddInt( &top, "tag", TAG_FILES ); 222 244 addIdArg( args, id ); 223 fields = TR_RPC_TORRENT_ID224 | TR_RPC_TORRENT_FILES225 | TR_RPC_TORRENT_PRIORITIES;226 tr_bencDictAddInt( args, "fields", fields);245 n = TR_N_ELEMENTS( files_keys ); 246 fields = tr_bencDictAddList( args, "fields", n ); 247 for( i=0; i<n; ++i ) 248 tr_bencListAddStr( fields, files_keys[i] ); 227 249 break; 228 250 case 'g': tr_bencDictAddStr( &top, "method", "torrent-set" ); … … 237 259 tr_bencDictAddInt( &top, "tag", TAG_DETAILS ); 238 260 addIdArg( args, id ); 239 fields = TR_RPC_TORRENT_ACTIVITY 240 | TR_RPC_TORRENT_ANNOUNCE 241 | TR_RPC_TORRENT_ERROR 242 | TR_RPC_TORRENT_HISTORY 243 | TR_RPC_TORRENT_ID 244 | TR_RPC_TORRENT_INFO 245 | TR_RPC_TORRENT_SCRAPE 246 | TR_RPC_TORRENT_SIZE 247 | TR_RPC_TORRENT_TRACKER_STATS; 248 tr_bencDictAddInt( args, "fields", fields ); 261 n = TR_N_ELEMENTS( details_keys ); 262 fields = tr_bencDictAddList( args, "fields", n ); 263 for( i=0; i<n; ++i ) 264 tr_bencListAddStr( fields, details_keys[i] ); 249 265 break; 250 266 case 'l': tr_bencDictAddStr( &top, "method", "torrent-get" ); 251 267 tr_bencDictAddInt( &top, "tag", TAG_LIST ); 252 fields = TR_RPC_TORRENT_ID 253 | TR_RPC_TORRENT_ACTIVITY 254 | TR_RPC_TORRENT_HISTORY 255 | TR_RPC_TORRENT_SIZE; 256 tr_bencDictAddInt( args, "fields", fields ); 268 n = TR_N_ELEMENTS( list_keys ); 269 fields = tr_bencDictAddList( args, "fields", n ); 270 for( i=0; i<n; ++i ) 271 tr_bencListAddStr( fields, list_keys[i] ); 257 272 break; 258 273 case 'm': tr_bencDictAddStr( &top, "method", "session-set" ); … … 726 741 tr_bencDictFindInt( &top, "tag", &tag ); 727 742 728 if( tr_bencDictFindStr( &top, "result", &str ) )729 printf( "%s:%d responded: \"%s\"\n", host, port, str );730 743 switch( tag ) { 731 744 case TAG_FILES: printFileList( &top ); break; 732 745 case TAG_DETAILS: printDetails( &top ); break; 733 746 case TAG_LIST: printTorrentList( &top ); break; 734 default: break; 747 default: if( tr_bencDictFindStr( &top, "result", &str ) ) 748 printf( "%s:%d responded: \"%s\"\n", host, port, str ); 735 749 } 736 750 -
trunk/doc/rpc-spec.txt
r6377 r6404 101 101 Request arguments: 102 102 103 string | required? | default | value type & description 104 -------------+-----------+---------+--------------------------------------- 105 "ids" | no | all | array described in 3.1 106 "fields" | yes | n/a | number bitwise-or'ed field 107 | | | values from the table below 103 (1) An opional "ids" array as described in 3.1. 104 (2) A required "fields" array of keys. (see list below) 108 105 109 106 Response arguments: 110 107 111 (1) A "fields" number identical to the request's 112 (2) A "torrents" array of objects, each of which contains the 113 key/value fields that match the "fields" argument. 114 See the table below for a complete list. 115 116 "fields" value | response | response | source 117 | value | key | 118 -------------------+----------+------------------------+------------- 119 activity, 1 | number | desiredAvailable | tr_stat 120 | number | eta | tr_stat 121 | number | peersConnected | tr_stat 122 | number | peersGettingFromUs | tr_stat 123 | number | peersSendingToUs | tr_stat 124 | number | rateDownload | tr_stat 125 | number | rateUpload | tr_stat 126 | number | recheckProgress | tr_stat 127 | number | status | tr_stat 128 | number | swarmSpeed (K/s) | tr_stat 129 | 'double' | uploadRatio | tr_stat 130 | number | webseedsSendingToUs | tr_stat 131 -------------------+----------+------------------------+------------- 132 announce, 2 | string | announceResponse | tr_stat 133 | string | announceURL | tr_stat 134 | number | lastAnnounceTime | tr_stat 135 | number | manualAnnounceTime | tr_stat 136 | number | nextAnnounceTime | tr_stat 137 -------------------+----------+------------------------+------------- 138 error, 4 | number | error | tr_stat 139 | number | errorString | tr_stat 140 -------------------+----------+------------------------+------------- 141 files, 8 | array | files 142 +----------+-------------------------------------- 143 | files is an array of objects that contain: 144 +----------+------------------------+------------- 145 | number | bytesCompleted | tr_torrent 146 | number | length | tr_info 147 | string | name | tr_info 148 -------------------+----------+------------------------+------------- 149 history, 16 | number | activityDate | tr_stat 150 | number | addedDate | tr_stat 151 | number | corruptEver | tr_stat 152 | number | doneDate | tr_stat 153 | number | downloadedEver | tr_stat 154 | number | startDate | tr_stat 155 | number | uploadedEver | tr_stat 156 -------------------+----------+------------------------+------------- 157 id, 32 | number | uniqueId | tr_torrent 158 | string | hashString | tr_info 159 | string | name | tr_info 160 -------------------+----------+------------------------+------------- 161 info, 64 | string | comment | tr_info 162 | string | creator | tr_info 163 | number | dateCreated | tr_info 164 | number | pieceCount | tr_info 165 | number | pieceSize | tr_info 166 | 'boolean'| isPrivate | tr_torrent 167 -------------------+----------+------------------------+------------- 168 limits, 128 | number | downloadLimit | tr_torrent 169 | number | downloadLimitMode | tr_torrent 170 | number | maxConnectedPeers | tr_torrent 171 | number | uploadLimit | tr_torrent 172 | number | uploadLimitMode | tr_torrent 173 -------------------+----------+------------------------+------------- 174 peers, 256 | not defined yet 175 -------------------+----------+------------------------+------------- 176 peer stats, 512 | number | fromCache | tr_stat 177 | number | fromIncoming | tr_stat 178 | number | fromPex | tr_stat 179 | number | fromTracker | tr_stat 180 -------------------+----------+------------------------+------------- 181 priorities, 1024 | array | priorities | tr_info 182 | array | wanted | tr_info 183 +----------+-------------------------------------- 184 | priorities is an array of tr_info.fileCount 185 | numbers. Each is the tr_priority_t mode for 186 | the corresponding file. 187 +------------------------------------------------- 188 | wanted is an array of tr_info.fileCount 189 | 'booleans' true if the corresponding file 190 | is to be downloaded. 191 -------------------+----------+------------------------+------------- 192 scrape, 2048 | number | lastScrapeTime | tr_stat 193 | number | nextScrapeTime | tr_stat 194 | string | scrapeResponse | tr_stat 195 | string | scrapeURL | tr_stat 196 -------------------+----------+------------------------+------------- 197 size, 4096 | number | haveUnchecked | tr_stat 198 | number | haveValid | tr_stat 199 | number | leftUntilDone | tr_stat 200 | number | sizeWhenDone | tr_stat 201 | number | totalSize | tr_info 202 -------------------+----------+------------------------+------------- 203 tracker stats, | number | leechers | tr_stat 204 8192 | number | peersKnown | tr_stat 205 | number | seeders | tr_stat 206 | number | timesCompleted | tr_stat 207 -------------------+----------+-------------------------------------- 208 trackers, 16384 | array | trackers 209 +----------+-------------------------------------- 210 | trackers is an array of objects that contain: 211 +----------+------------------------+------------- 212 | string | announce | tr_info 213 | string | scrape | tr_info 214 | number | tier | tr_info 215 -------------------+----------+------------------------+------------- 216 webseeds, 32768 | array | webseeds 217 +----------+-------------------------------------- 218 | webseeds is an array of strings: 219 +----------+------------------------+------------- 220 | string | webseed URL | tr_info 221 -------------------+----------+------------------------+------------- 108 (1) A "torrents" array of objects, each of which contains 109 the key/value pairs matching the request's "fields" argument. 110 111 key | type | source 112 -----------------------+--------------------------------------+--------- 113 activityDate | number | tr_stat 114 addedDate | number | tr_stat 115 announceResponse | string | tr_stat 116 announceURL | string | tr_stat 117 comment | string | tr_info 118 corruptEver | number | tr_stat 119 creator | string | tr_info 120 dateCreated | number | tr_info 121 desiredAvailable | number | tr_stat 122 doneDate | number | tr_stat 123 downloadedEver | number | tr_stat 124 downloadLimitMode | number | tr_torrent 125 downloadLimit | number | tr_torrent 126 error | number | tr_stat 127 errorString | number | tr_stat 128 eta | number | tr_stat 129 files | array (see below) | n/a 130 hashString | string | tr_info 131 haveUnchecked | number | tr_stat 132 haveValid | number | tr_stat 133 id | number | tr_torrent 134 isPrivate | 'boolean | tr_torrent 135 lastAnnounceTime | number | tr_stat 136 lastScrapeTime | number | tr_stat 137 leechers | number | tr_stat 138 leftUntilDone | number | tr_stat 139 manualAnnounceTime | number | tr_stat 140 maxConnectedPeers | number | tr_torrent 141 name | string | tr_info 142 nextAnnounceTime | number | tr_stat 143 nextScrapeTime | number | tr_stat 144 peersConnected | number | tr_stat 145 peersFrom | object (see below) | n/a 146 peersGettingFromUs | number | tr_stat 147 peersKnown | number | tr_stat 148 peersSendingToUs | number | tr_stat 149 pieceCount | tnumber | tr_info 150 pieceSize | tnumber | tr_info 151 priorities | array (see below) | n/a 152 rateDownload | number | tr_stat 153 rateUpload | number | tr_stat 154 recheckProgress | number | tr_stat 155 scrapeResponse | string | tr_stat 156 scrapeURL | string | tr_stat 157 seeders | number | tr_stat 158 sizeWhenDone | number | tr_stat 159 startDate | number | tr_stat 160 status | number | tr_stat 161 swarmSpeed (K/s) | number | tr_stat 162 timesCompleted | number | tr_stat 163 trackers | array (see below) | n/a 164 totalSize | number | tr_info 165 uploadedEver | number | tr_stat 166 uploadLimitMode | number | tr_torrent 167 uploadLimit | number | tr_torrent 168 uploadRatio | 'double' | tr_stat 169 wanted | array (see below) | n/a 170 webseeds | array (see below) | n/a 171 webseedsSendingToUs | number | tr_stat 172 | | 173 | | 174 -----------------------+--------------------------------------+ 175 files | array of objects, each containing: | 176 +------------------+-------------------+ 177 | key | type | 178 | bytesCompleted | number | tr_torrent 179 | length | number | tr_info 180 | name | string | tr_info 181 -----------------------+--------------------------------------+ 182 peersFrom | an object containing: | 183 +------------------+-------------------+ 184 | fromCache | number | tr_stat 185 | fromIncoming | number | tr_stat 186 | fromPex | number | tr_stat 187 | fromTracker | number | tr_stat 188 -----------------------+--------------------------------------+ 189 priorities | an array of tr_info.filecount | tr_info 190 | numbers. each is the tr_priority_t | 191 | mode for the corresponding file. | 192 -----------------------+--------------------------------------+ 193 trackers | array of objects, each containing: | 194 +------------------+-------------------+ 195 | announce | string | tr_info 196 | scrape | string | tr_info 197 | tier | number | tr_info 198 -----------------------+--------------------------------------+ 199 wanted | an array of tr_info.fileCount | tr_info 200 | 'booleans' true if the corresponding | 201 | file is to be downloaded. | 202 -----------------------+--------------------------------------+ 203 webseeds | an array of strings: | 204 +------------------+-------------------+ 205 | webseed | string | tr_info 206 +------------------+-------------------+ 222 207 223 208 Example: 224 209 225 210 Say we want to get the name and total size of torrents #7 and #10. 226 name is in the "id" section (32) and total size is in "size" (2048),227 so the "fields" argument will be 32 + 2048 == 2080.228 211 229 212 Request: … … 232 215 "arguments": { 233 216 "fields": 2080, 234 " ids": [ 7, 10],217 "fields": [ "name", "totalSize" ], 235 218 "sort-method": "name" 236 219 } … … 247 230 "torrents": [ 248 231 { 249 "hashString": "sijioejisoefjiosejfioi", 250 "haveUnchecked", 23023, 251 "haveValid", 27986795145, 252 "leftUntilDone", 0, 232 "id": 10, 253 233 "name": "Fedora x86_64 DVD", 254 "sizeWhenDone", 34983493932,255 234 "totalSize", 34983493932, 256 "uniqueId": 10,257 235 } 258 236 { 259 "hashString": "asdasiofjosejfoasjfiosj", 260 "haveUnchecked", 0, 261 "haveValid", 9923890123, 262 "leftUntilDone", 0, 237 "id": 7, 263 238 "name": "Ubuntu x86_64 DVD", 264 "sizeWhenDone", 9923890123,265 239 "totalSize", 9923890123, 266 "uniqueId": 7,267 240 }, 268 241 ] -
trunk/libtransmission/rpc.c
r6377 r6404 199 199 200 200 static void 201 add Info( const tr_torrent * tor, tr_benc * d, uint64_t fields)201 addField( const tr_torrent * tor, tr_benc * d, const char * key ) 202 202 { 203 203 const tr_info * inf = tr_torrentInfo( tor ); 204 204 const tr_stat * st = tr_torrentStat( (tr_torrent*)tor ); 205 205 206 tr_bencInitDict( d, 64 ); 207 208 if( fields & TR_RPC_TORRENT_ACTIVITY ) { 209 tr_bencDictAddInt( d, "desiredAvailable", st->desiredAvailable ); 210 tr_bencDictAddInt( d, "eta", st->eta ); 211 tr_bencDictAddInt( d, "peersConnected", st->peersConnected ); 212 tr_bencDictAddInt( d, "peersGettingFromUs", st->peersGettingFromUs ); 213 tr_bencDictAddInt( d, "peersSendingToUs", st->peersSendingToUs ); 214 tr_bencDictAddInt( d, "rateDownload", (int)(st->rateDownload*1024) ); 215 tr_bencDictAddInt( d, "rateUpload", (int)(st->rateUpload*1024) ); 216 tr_bencDictAddDouble( d, "recheckProgress", st->recheckProgress ); 217 tr_bencDictAddInt( d, "status", st->status ); 218 tr_bencDictAddInt( d, "swarmSpeed", (int)(st->swarmSpeed*1024) ); 219 tr_bencDictAddInt( d, "webseedsSendingToUs", st->webseedsSendingToUs ); 220 tr_bencDictAddDouble( d, "uploadRatio", tr_getRatio( st->uploadedEver, st->downloadedEver ) ); 221 } 222 223 if( fields & TR_RPC_TORRENT_ANNOUNCE ) { 224 tr_bencDictAddStr( d, "announceResponse", st->announceResponse ); 225 tr_bencDictAddStr( d, "announceURL", st->announceURL ); 226 tr_bencDictAddInt( d, "lastAnnounceTime", st->lastAnnounceTime ); 227 tr_bencDictAddInt( d, "manualAnnounceTime", st->manualAnnounceTime ); 228 tr_bencDictAddInt( d, "nextAnnounceTime", st->nextAnnounceTime ); 229 } 230 231 if( fields & TR_RPC_TORRENT_ERROR ) { 232 tr_bencDictAddInt( d, "error", st->error ); 233 tr_bencDictAddStr( d, "errorString", st->errorString ); 234 } 235 236 if( fields & TR_RPC_TORRENT_FILES ) 237 addFiles( tor, tr_bencDictAddList( d, "files", inf->fileCount ) ); 238 239 if( fields & TR_RPC_TORRENT_HISTORY ) { 240 tr_bencDictAddInt( d, "activityDate", st->activityDate ); 241 tr_bencDictAddInt( d, "addedDate", st->addedDate ); 242 tr_bencDictAddInt( d, "corruptEver", st->corruptEver ); 243 tr_bencDictAddInt( d, "doneDate", st->doneDate ); 244 tr_bencDictAddInt( d, "downloadedEver", st->downloadedEver ); 245 tr_bencDictAddInt( d, "startDate", st->startDate ); 246 tr_bencDictAddInt( d, "uploadedEver", st->uploadedEver ); 247 } 248 249 if( fields & TR_RPC_TORRENT_ID ) { 250 tr_bencDictAddInt( d, "id", st->id ); 251 tr_bencDictAddStr( d, "hashString", tor->info.hashString ); 252 tr_bencDictAddStr( d, "name", inf->name ); 253 } 254 255 if( fields & TR_RPC_TORRENT_INFO ) { 256 tr_bencDictAddStr( d, "comment", inf->comment ? inf->comment : "" ); 257 tr_bencDictAddStr( d, "creator", inf->creator ? inf->creator : "" ); 258 tr_bencDictAddInt( d, "dateCreated", inf->dateCreated ); 259 tr_bencDictAddInt( d, "isPrivate", tr_torrentIsPrivate( tor ) ); 260 tr_bencDictAddInt( d, "pieceCount", inf->pieceCount ); 261 tr_bencDictAddInt( d, "pieceSize", inf->pieceSize ); 262 } 263 264 if( fields & TR_RPC_TORRENT_LIMITS ) { 265 tr_bencDictAddInt( d, "downloadLimit", tr_torrentGetSpeedLimit( tor, TR_DOWN ) ); 266 tr_bencDictAddInt( d, "downloadLimitMode", tr_torrentGetSpeedMode( tor, TR_DOWN ) ); 267 tr_bencDictAddInt( d, "maxConnectedPeers", tr_torrentGetPeerLimit( tor ) ); 268 tr_bencDictAddInt( d, "uploadLimit", tr_torrentGetSpeedLimit( tor, TR_UP ) ); 269 tr_bencDictAddInt( d, "uploadLimitMode", tr_torrentGetSpeedMode( tor, TR_UP ) ); 270 } 271 272 if( fields & TR_RPC_TORRENT_PEER_STATS ) { 206 if( !strcmp( key, "activityDate" ) ) 207 tr_bencDictAddInt( d, key, st->activityDate ); 208 else if( !strcmp( key, "addedDate" ) ) 209 tr_bencDictAddInt( d, key, st->addedDate ); 210 else if( !strcmp( key, "announceResponse" ) ) 211 tr_bencDictAddStr( d, key, st->announceResponse ); 212 else if( !strcmp( key, "announceURL" ) ) 213 tr_bencDictAddStr( d, key, st->announceURL ); 214 else if( !strcmp( key, "comment" ) ) 215 tr_bencDictAddStr( d, key, inf->comment ? inf->comment : "" ); 216 else if( !strcmp( key, "corruptEver" ) ) 217 tr_bencDictAddInt( d, key, st->corruptEver ); 218 else if( !strcmp( key, "creator" ) ) 219 tr_bencDictAddStr( d, key, inf->creator ? inf->creator : "" ); 220 else if( !strcmp( key, "dateCreated" ) ) 221 tr_bencDictAddInt( d, key, inf->dateCreated ); 222 else if( !strcmp( key, "desiredAvailable" ) ) 223 tr_bencDictAddInt( d, key, st->desiredAvailable ); 224 else if( !strcmp( key, "doneDate" ) ) 225 tr_bencDictAddInt( d, key, st->doneDate ); 226 else if( !strcmp( key, "downloadedEver" ) ) 227 tr_bencDictAddInt( d, key, st->downloadedEver ); 228 else if( !strcmp( key, "downloadLimitMode" ) ) 229 tr_bencDictAddInt( d, key, tr_torrentGetSpeedMode( tor, TR_DOWN ) ); 230 else if( !strcmp( key, "downloadLimit" ) ) 231 tr_bencDictAddInt( d, key, tr_torrentGetSpeedLimit( tor, TR_DOWN ) ); 232 else if( !strcmp( key, "error" ) ) 233 tr_bencDictAddInt( d, key, st->error ); 234 else if( !strcmp( key, "errorString" ) ) 235 tr_bencDictAddStr( d, key, st->errorString ); 236 else if( !strcmp( key, "eta" ) ) 237 tr_bencDictAddInt( d, key, st->eta ); 238 else if( !strcmp( key, "files" ) ) 239 addFiles( tor, tr_bencDictAddList( d, key, inf->fileCount ) ); 240 else if( !strcmp( key, "hashString" ) ) 241 tr_bencDictAddStr( d, key, tor->info.hashString ); 242 else if( !strcmp( key, "haveUnchecked" ) ) 243 tr_bencDictAddInt( d, key, st->haveUnchecked ); 244 else if( !strcmp( key, "haveValid" ) ) 245 tr_bencDictAddInt( d, key, st->haveValid ); 246 else if( !strcmp( key, "id" ) ) 247 tr_bencDictAddInt( d, key, st->id ); 248 else if( !strcmp( key, "isPrivate" ) ) 249 tr_bencDictAddInt( d, key, tr_torrentIsPrivate( tor ) ); 250 else if( !strcmp( key, "lastAnnounceTime" ) ) 251 tr_bencDictAddInt( d, key, st->lastAnnounceTime ); 252 else if( !strcmp( key, "lastScrapeTime" ) ) 253 tr_bencDictAddInt( d, key, st->lastScrapeTime ); 254 else if( !strcmp( key, "leechers" ) ) 255 tr_bencDictAddInt( d, key, st->leechers ); 256 else if( !strcmp( key, "leftUntilDone" ) ) 257 tr_bencDictAddInt( d, key, st->leftUntilDone ); 258 else if( !strcmp( key, "manualAnnounceTime" ) ) 259 tr_bencDictAddInt( d, key, st->manualAnnounceTime ); 260 else if( !strcmp( key, "maxConnectedPeers" ) ) 261 tr_bencDictAddInt( d, key, tr_torrentGetPeerLimit( tor ) ); 262 else if( !strcmp( key, "name" ) ) 263 tr_bencDictAddStr( d, key, inf->name ); 264 else if( !strcmp( key, "nextAnnounceTime" ) ) 265 tr_bencDictAddInt( d, key, st->nextAnnounceTime ); 266 else if( !strcmp( key, "nextScrapeTime" ) ) 267 tr_bencDictAddInt( d, key, st->nextScrapeTime ); 268 else if( !strcmp( key, "peersConnected" ) ) 269 tr_bencDictAddInt( d, key, st->peersConnected ); 270 else if( !strcmp( key, "peersFrom" ) ) { 271 tr_benc * tmp = tr_bencDictAddDict( d, key, 4 ); 273 272 const int * f = st->peersFrom; 274 tr_bencDictAddInt( d, "fromCache", f[TR_PEER_FROM_CACHE] ); 275 tr_bencDictAddInt( d, "fromIncoming", f[TR_PEER_FROM_INCOMING] ); 276 tr_bencDictAddInt( d, "fromPex", f[TR_PEER_FROM_PEX] ); 277 tr_bencDictAddInt( d, "fromTracker", f[TR_PEER_FROM_TRACKER] ); 278 } 279 280 if( fields & TR_RPC_TORRENT_PRIORITIES ) { 273 tr_bencDictAddInt( tmp, "fromCache", f[TR_PEER_FROM_CACHE] ); 274 tr_bencDictAddInt( tmp, "fromIncoming", f[TR_PEER_FROM_INCOMING] ); 275 tr_bencDictAddInt( tmp, "fromPex", f[TR_PEER_FROM_PEX] ); 276 tr_bencDictAddInt( tmp, "fromTracker", f[TR_PEER_FROM_TRACKER] ); 277 } 278 else if( !strcmp( key, "peersGettingFromUs" ) ) 279 tr_bencDictAddInt( d, key, st->peersGettingFromUs ); 280 else if( !strcmp( key, "peersKnown" ) ) 281 tr_bencDictAddInt( d, key, st->peersKnown ); 282 else if( !strcmp( key, "peersSendingToUs" ) ) 283 tr_bencDictAddInt( d, key, st->peersSendingToUs ); 284 else if( !strcmp( key, "pieceCount" ) ) 285 tr_bencDictAddInt( d, key, inf->pieceCount ); 286 else if( !strcmp( key, "pieceSize" ) ) 287 tr_bencDictAddInt( d, key, inf->pieceSize ); 288 else if( !strcmp( key, "priorities" ) ) { 281 289 tr_file_index_t i; 282 tr_benc * p = tr_bencDictAddList( d, "priorities", inf->fileCount ); 283 tr_benc * w = tr_bencDictAddList( d, "wanted", inf->fileCount ); 284 for( i=0; i<inf->fileCount; ++i ) { 290 tr_benc * p = tr_bencDictAddList( d, key, inf->fileCount ); 291 for( i=0; i<inf->fileCount; ++i ) 285 292 tr_bencListAddInt( p, inf->files[i].priority ); 293 } 294 else if( !strcmp( key, "rateDownload" ) ) 295 tr_bencDictAddInt( d, key, (int)(st->rateDownload*1024) ); 296 else if( !strcmp( key, "rateUpload" ) ) 297 tr_bencDictAddInt( d, key, (int)(st->rateUpload*1024) ); 298 else if( !strcmp( key, "recheckProgress" ) ) 299 tr_bencDictAddDouble( d, key, st->recheckProgress ); 300 else if( !strcmp( key, "scrapeResponse" ) ) 301 tr_bencDictAddStr( d, key, st->scrapeResponse ); 302 else if( !strcmp( key, "scrapeURL" ) ) 303 tr_bencDictAddStr( d, key, st->scrapeURL ); 304 else if( !strcmp( key, "seeders" ) ) 305 tr_bencDictAddInt( d, key, st->seeders ); 306 else if( !strcmp( key, "sizeWhenDone" ) ) 307 tr_bencDictAddInt( d, key, st->sizeWhenDone ); 308 else if( !strcmp( key, "startDate" ) ) 309 tr_bencDictAddInt( d, key, st->startDate ); 310 else if( !strcmp( key, "status" ) ) 311 tr_bencDictAddInt( d, key, st->status ); 312 else if( !strcmp( key, "swarmSpeed" ) ) 313 tr_bencDictAddInt( d, key, (int)(st->swarmSpeed*1024) ); 314 else if( !strcmp( key, "timesCompleted" ) ) 315 tr_bencDictAddInt( d, key, st->timesCompleted ); 316 else if( !strcmp( key, "trackers" ) ) 317 addTrackers( inf, tr_bencDictAddList( d, key, inf->trackerCount ) ); 318 else if( !strcmp( key, "totalSize" ) ) 319 tr_bencDictAddInt( d, key, inf->totalSize ); 320 else if( !strcmp( key, "uploadedEver" ) ) 321 tr_bencDictAddInt( d, key, st->uploadedEver ); 322 else if( !strcmp( key, "uploadLimitMode" ) ) 323 tr_bencDictAddInt( d, key, tr_torrentGetSpeedMode( tor, TR_UP ) ); 324 else if( !strcmp( key, "uploadLimit" ) ) 325 tr_bencDictAddInt( d, key, tr_torrentGetSpeedLimit( tor, TR_UP ) ); 326 else if( !strcmp( key, "uploadRatio" ) ) 327 tr_bencDictAddDouble( d, key, tr_getRatio( st->uploadedEver, st->downloadedEver ) ); 328 else if( !strcmp( key, "wanted" ) ) { 329 tr_file_index_t i; 330 tr_benc * w = tr_bencDictAddList( d, key, inf->fileCount ); 331 for( i=0; i<inf->fileCount; ++i ) 286 332 tr_bencListAddInt( w, inf->files[i].dnd ? 0 : 1 ); 287 } 288 } 289 290 if( fields & TR_RPC_TORRENT_SCRAPE ) { 291 tr_bencDictAddInt( d, "lastScrapeTime", st->lastScrapeTime ); 292 tr_bencDictAddInt( d, "nextScrapeTime", st->nextScrapeTime ); 293 tr_bencDictAddStr( d, "scrapeResponse", st->scrapeResponse ); 294 tr_bencDictAddStr( d, "scrapeURL", st->scrapeURL ); 295 } 296 297 if( fields & TR_RPC_TORRENT_SIZE ) { 298 tr_bencDictAddInt( d, "haveUnchecked", st->haveUnchecked ); 299 tr_bencDictAddInt( d, "haveValid", st->haveValid ); 300 tr_bencDictAddInt( d, "leftUntilDone", st->leftUntilDone ); 301 tr_bencDictAddInt( d, "sizeWhenDone", st->sizeWhenDone ); 302 tr_bencDictAddInt( d, "totalSize", inf->totalSize ); 303 } 304 305 if( fields & TR_RPC_TORRENT_TRACKER_STATS ) { 306 tr_bencDictAddInt( d, "leechers", st->leechers ); 307 tr_bencDictAddInt( d, "peersKnown", st->peersKnown ); 308 tr_bencDictAddInt( d, "seeders", st->seeders ); 309 tr_bencDictAddInt( d, "timesCompleted", st->timesCompleted ); 310 } 311 312 if( fields & TR_RPC_TORRENT_TRACKERS ) 313 addTrackers( inf, tr_bencDictAddList( d, "trackers", inf->trackerCount ) ); 314 315 if( fields & TR_RPC_TORRENT_WEBSEEDS ) 316 addWebseeds( inf, tr_bencDictAddList( d, "webseeds", inf->trackerCount ) ); 333 } 334 else if( !strcmp( key, "webseeds" ) ) 335 addWebseeds( inf, tr_bencDictAddList( d, key, inf->trackerCount ) ); 336 else if( !strcmp( key, "webseedsSendingToUs" ) ) 337 tr_bencDictAddInt( d, key, st->webseedsSendingToUs ); 338 } 339 340 static void 341 addInfo( const tr_torrent * tor, tr_benc * d, tr_benc * fields ) 342 { 343 int i; 344 const int n = tr_bencListSize( fields ); 345 const char * str; 346 347 tr_bencInitDict( d, n ); 348 349 for( i=0; i<n; ++i ) 350 if( tr_bencGetStr( tr_bencListChild( fields, i ), &str ) ) 351 addField( tor, d, str ); 317 352 } 318 353 … … 323 358 tr_torrent ** torrents = getTorrents( handle, args_in, &torrentCount ); 324 359 tr_benc * list = tr_bencDictAddList( args_out, "torrents", torrentCount ); 325 int64_t fields = 0; 326 327 if( !tr_bencDictFindInt( args_in, "fields", &fields ) ) 328 fields = ~(int64_t)0; 329 tr_bencDictAddInt( args_out, "fields", fields ); 360 tr_benc * fields; 361 362 if( !tr_bencDictFindList( args_in, "fields", &fields ) ) 363 return "no fields specified"; 330 364 331 365 for( i=0; i<torrentCount; ++i ) … … 485 519 486 520 if( tor ) { 487 addInfo( tor, tr_bencDictAdd( args_out, "torrent-added" ), TR_RPC_TORRENT_ID ); 521 tr_benc fields; 522 tr_bencInitList( &fields, 3 ); 523 tr_bencListAddStr( &fields, "id" ); 524 tr_bencListAddStr( &fields, "name" ); 525 tr_bencListAddStr( &fields, "hashString" ); 526 addInfo( tor, tr_bencDictAdd( args_out, "torrent-added" ), &fields ); 488 527 notify( h, TR_RPC_TORRENT_ADDED, tor ); 528 tr_bencFree( &fields ); 489 529 } else if( err == TR_EDUPLICATE ) { 490 530 return "duplicate torrent"; -
trunk/libtransmission/rpc.h
r6346 r6404 17 17 **** RPC processing 18 18 ***/ 19 20 enum21 {22 TR_RPC_TORRENT_ACTIVITY = (1<<0),23 TR_RPC_TORRENT_ANNOUNCE = (1<<1),24 TR_RPC_TORRENT_ERROR = (1<<2),25 TR_RPC_TORRENT_FILES = (1<<3),26 TR_RPC_TORRENT_HISTORY = (1<<4),27 TR_RPC_TORRENT_ID = (1<<5),28 TR_RPC_TORRENT_INFO = (1<<6),29 TR_RPC_TORRENT_LIMITS = (1<<7),30 TR_RPC_TORRENT_PEERS = (1<<8),31 TR_RPC_TORRENT_PEER_STATS = (1<<9),32 TR_RPC_TORRENT_PRIORITIES = (1<<10),33 TR_RPC_TORRENT_SCRAPE = (1<<11),34 TR_RPC_TORRENT_SIZE = (1<<12),35 TR_RPC_TORRENT_TRACKER_STATS = (1<<13),36 TR_RPC_TORRENT_TRACKERS = (1<<14),37 TR_RPC_TORRENT_WEBSEEDS = (1<<15)38 };39 19 40 20 struct tr_benc; -
trunk/web/javascript/transmission.remote.js
r6346 r6404 21 21 RPC._UpSpeedLimited = 'speed-limit-up-enabled'; 22 22 RPC._DownSpeedLimited = 'speed-limit-down-enabled'; 23 24 RPC._TorrentActivity = (1<<0);25 RPC._TorrentAnnounce = (1<<1);26 RPC._TorrentError = (1<<2);27 RPC._TorrentFiles = (1<<3);28 RPC._TorrentHistory = (1<<4);29 RPC._TorrentId = (1<<5);30 RPC._TorrentInfo = (1<<6);31 RPC._TorrentLimits = (1<<7);32 RPC._TorrentPeers = (1<<8);33 RPC._TorrentPeerStats = (1<<9);34 RPC._TorrentPriorities = (1<<10);35 RPC._TorrentScrape = (1<<11);36 RPC._TorrentSize = (1<<12);37 RPC._TorrentTrackerStats = (1<<13);38 RPC._TorrentTrackers = (1<<14);39 RPC._TorrentWebseeds = (1<<15);40 23 41 24 function TransmissionRemote( controller ) … … 104 87 o.method = 'torrent-get' 105 88 o.arguments = { }; 106 o.arguments.fields = RPC._TorrentActivity 107 + RPC._TorrentAnnounce 108 + RPC._TorrentError 109 + RPC._TorrentHistory 110 + RPC._TorrentId 111 + RPC._TorrentInfo 112 + RPC._TorrentLimits 113 + RPC._TorrentScrape 114 + RPC._TorrentSize 115 + RPC._TorrentTrackerStats; 89 o.arguments.fields = [ 90 'addedDate', 'announceURL', 'comment', 'creator', 91 'dateCreated', 'downloadedEver', 'error', 'errorString', 92 'eta', 'hashString', 'haveUnchecked', 'haveValid', 'id', 93 'isPrivate', 'leechers', 'leftUntilDone', 'name', 94 'peersGettingFromUs', 'peersKnown', 'peersSendingToUs', 95 'rateDownload', 'rateUpload', 'seeders', 'sizeWhenDone', 96 'status', 'swarmSpeed', 'totalSize', 'uploadedEver' ]; 116 97 this.sendRequest( RPC._Root, $.toJSON(o), function(data) { 117 98 tr.updateTorrents( data.arguments.torrents );
Note: See TracChangeset
for help on using the changeset viewer.