Changeset 1320
- Timestamp:
- Jan 8, 2007, 9:53:55 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/internal.h
r1242 r1320 140 140 struct tr_torrent_s 141 141 { 142 tr_handle_t * handle; 142 143 tr_info_t info; 143 144 144 tr_ratecontrol_t * globalUpload; 145 tr_ratecontrol_t * globalDownload; 145 int customSpeedLimit; 146 146 tr_ratecontrol_t * upload; 147 147 tr_ratecontrol_t * download; … … 202 202 tr_torrent_t * torrentList; 203 203 204 tr_ratecontrol_t * upload;205 tr_ratecontrol_t * download;204 int uploadLimit; 205 int downloadLimit; 206 206 tr_fd_t * fdlimit; 207 207 tr_choking_t * choking; -
trunk/libtransmission/peer.c
r1288 r1320 267 267 for( ;; ) 268 268 { 269 if( tor && ( !tr_rcCanTransfer( tor->globalDownload)270 || !tr_rcCanTransfer( tor->download) ) )269 if( tor && ( ( !tor->customSpeedLimit && !tr_rcCanGlobalTransfer( tor->handle, 0 ) ) 270 || ( tor->customSpeedLimit && !tr_rcCanTransfer( tor->download ) ) ) ) 271 271 { 272 272 break; … … 302 302 tr_rcTransferred( peer->download, ret ); 303 303 tr_rcTransferred( tor->download, ret ); 304 tr_rcTransferred( tor->globalDownload, ret );305 304 if( parseBuf( tor, peer ) ) 306 305 { … … 438 437 while( ( p = blockPending( tor, peer, &size ) ) ) 439 438 { 440 if( !tr_rcCanTransfer( tor->globalUpload)441 || !tr_rcCanTransfer( tor->upload) )439 if( ( !tor->customSpeedLimit && !tr_rcCanGlobalTransfer( tor->handle, 1 ) ) 440 || ( tor->customSpeedLimit && !tr_rcCanTransfer( tor->upload ) ) ) 442 441 { 443 442 break; … … 457 456 tr_rcTransferred( peer->upload, ret ); 458 457 tr_rcTransferred( tor->upload, ret ); 459 tr_rcTransferred( tor->globalUpload, ret );460 458 461 459 tor->uploadedCur += ret; -
trunk/libtransmission/ratecontrol.c
r261 r1320 91 91 } 92 92 93 int tr_rcCanGlobalTransfer( tr_handle_t * h, int isUpload ) 94 { 95 tr_torrent_t * tor; 96 tr_ratecontrol_t * r; 97 float rate = 0; 98 int limit = isUpload ? h->uploadLimit : h->downloadLimit; 99 100 if( limit < 0 ) 101 { 102 return 1; 103 } 104 105 for( tor = h->torrentList; tor && rate < (float)limit; tor = tor->next ) 106 { 107 if( !tor->customSpeedLimit ) 108 { 109 r = isUpload ? tor->upload : tor->download; 110 tr_lockLock( &r->lock ); 111 rate += rateForInterval( r, 1000 ); 112 tr_lockUnlock( &r->lock ); 113 } 114 } 115 116 return rate < (float)limit; 117 } 118 93 119 void tr_rcSetLimit( tr_ratecontrol_t * r, int limit ) 94 120 { -
trunk/libtransmission/ratecontrol.h
r261 r1320 26 26 27 27 tr_ratecontrol_t * tr_rcInit(); 28 int tr_rcCanGlobalTransfer( tr_handle_t * h, int isUpload ); 28 29 void tr_rcSetLimit( tr_ratecontrol_t *, int ); 29 30 int tr_rcCanTransfer( tr_ratecontrol_t * ); -
trunk/libtransmission/transmission.c
r1302 r1320 71 71 72 72 /* Initialize rate and file descripts controls */ 73 h->upload = tr_rcInit(); 74 h->download = tr_rcInit(); 73 h->uploadLimit = -1; 74 h->downloadLimit = -1; 75 75 76 h->fdlimit = tr_fdInit(); 76 77 h->choking = tr_chokingInit( h ); … … 193 194 void tr_setGlobalUploadLimit( tr_handle_t * h, int limit ) 194 195 { 195 tr_rcSetLimit( h->upload, limit );196 h->uploadLimit = limit; 196 197 tr_chokingSetLimit( h->choking, limit ); 197 198 } … … 199 200 void tr_setGlobalDownloadLimit( tr_handle_t * h, int limit ) 200 201 { 201 tr_rcSetLimit( h->download, limit ); 202 h->downloadLimit = limit; 203 } 204 205 void tr_setUseCustomLimit( tr_torrent_t * tor, int limit ) 206 { 207 tor->customSpeedLimit = limit; 202 208 } 203 209 … … 273 279 tr_info_t * inf; 274 280 int i; 275 281 276 282 inf = &tor->info; 277 283 inf->flags = flags; … … 290 296 } 291 297 298 tor->handle = h; 292 299 tor->status = TR_STATUS_PAUSE; 293 300 tor->id = h->id; … … 310 317 tr_lockInit( &tor->lock ); 311 318 312 tor->globalUpload = h->upload;313 tor->globalDownload = h->download;314 319 tor->fdlimit = h->fdlimit; 315 320 tor->upload = tr_rcInit(); … … 739 744 tr_chokingClose( h->choking ); 740 745 tr_fdClose( h->fdlimit ); 741 tr_rcClose( h->upload );742 tr_rcClose( h->download );743 746 free( h ); 744 747 -
trunk/libtransmission/transmission.h
r1302 r1320 161 161 void tr_torrentIterate( tr_handle_t *, tr_callback_t, void * ); 162 162 163 void tr_setUseCustomLimit( tr_torrent_t * tor, int limit ); 164 void tr_setUploadLimit( tr_torrent_t * tor, int limit ); 165 void tr_setDownloadLimit( tr_torrent_t * tor, int limit ); 166 163 167 /*********************************************************************** 164 168 * tr_torrentRates -
trunk/macosx/Torrent.m
r1319 r1320 593 593 - (void) updateSpeedSetting 594 594 { 595 tr_setUploadLimit(fHandle, fLimitCustom && fCheckUpload ? fUploadLimit : -1); 596 tr_setDownloadLimit(fHandle, fLimitCustom && fCheckDownload ? fDownloadLimit : -1); 595 tr_setUseCustomLimit(fHandle, fLimitCustom); 596 tr_setUploadLimit(fHandle, fCheckUpload ? fUploadLimit : -1); 597 tr_setDownloadLimit(fHandle, fCheckDownload ? fDownloadLimit : -1); 597 598 } 598 599
Note: See TracChangeset
for help on using the changeset viewer.