Ticket #71: r555_ticket71.patch
File r555_ticket71.patch, 3.0 KB (added by brent, 16 years ago) |
---|
-
libtransmission/tracker.c
35 35 char stopped; 36 36 37 37 int interval; 38 int min_interval; 38 39 int seeders; 39 40 int leechers; 40 41 int hasManyPeers; … … 80 81 tc->started = 1; 81 82 82 83 tc->interval = 300; 84 tc->min_interval = 0; 83 85 tc->seeders = -1; 84 86 tc->leechers = -1; 85 87 … … 133 135 the tracker a bit until we get a decent number of peers */ 134 136 if( tc->hasManyPeers ) 135 137 { 136 if( tc->tor->peerCount < 5 && now > tc->dateOk + 10000 ) 137 { 138 return 1; 138 /* If there is a min interval specified, respect it */ 139 if( tc->min_interval > 0 ){ 140 if( tc->tor->peerCount < 30 && now > tc->dateOk + 1000 * tc->min_interval ) 141 { 142 return 1; 143 } 144 } 145 /* Gentle hammering */ 146 else { 147 if( tc->tor->peerCount < 10 && now > tc->dateOk + 60000 ) 148 { 149 return 1; 150 } 151 if( tc->tor->peerCount < 20 && now > tc->dateOk + 120000 ) 152 { 153 return 1; 154 } 139 155 } 140 if( tc->tor->peerCount < 10 && now > tc->dateOk + 20000 )141 {142 return 1;143 }144 if( tc->tor->peerCount < 15 && now > tc->dateOk + 30000 )145 {146 return 1;147 }148 156 } 149 157 150 158 return 0; … … 481 489 tor->error &= ~TR_ETRACKER; 482 490 tc->lastAttempt = TC_ATTEMPT_OK; 483 491 484 if( !tc->interval )485 {486 /* Get the tracker interval, ignore it if it is not between487 10 sec and 5 mins */488 if( !( beFoo = tr_bencDictFind( &beAll, "interval" ) ) ||489 !( beFoo->type & TYPE_INT ) )490 {491 tr_err( "Tracker: no 'interval' field" );492 goto cleanup;493 }494 492 495 tc->interval = beFoo->val.i; 496 tc->interval = MIN( tc->interval, 300 ); 497 tc->interval = MAX( 10, tc->interval ); 493 /* Get the tracker interval, ignore it if it is under 494 10 sec */ 495 if( !( beFoo = tr_bencDictFind( &beAll, "interval" ) ) || 496 !( beFoo->type & TYPE_INT ) ) 497 { 498 tr_err( "Tracker: no 'interval' field" ); 499 goto cleanup; 500 } 498 501 499 tr_inf( "Tracker: interval = %d seconds", tc->interval );500 } 502 tc->interval = beFoo->val.i; 503 tc->interval = MAX( 10, tc->interval ); 501 504 505 tr_inf( "Tracker: interval = %d seconds", tc->interval ); 506 507 508 /* Get min interval */ 509 if( ( beFoo = tr_bencDictFind( &beAll, "min interval" ) ) && 510 ( beFoo->type & TYPE_INT ) ) 511 { 512 tc->min_interval = beFoo->val.i; 513 tr_inf( "Tracker: minimum interval = %d seconds", tc->min_interval ); 514 //interval should not be less than min_interval 515 if( tc->interval < tc->min_interval ) 516 { 517 tc->interval = tc->min_interval; 518 tr_inf( "Tracker: interval = %d seconds, adjusted by minimum interval", tc->interval ); 519 } 520 } 521 502 522 if( ( beFoo = tr_bencDictFind( &beAll, "complete" ) ) && 503 523 ( beFoo->type & TYPE_INT ) ) 504 524 {