diff --git a/trackerlogic.c b/trackerlogic.c index faca19b..05c00b0 100644 --- a/trackerlogic.c +++ b/trackerlogic.c @@ -103,6 +103,16 @@ ot_torrent *add_peer_to_torrent( ot_hash *hash, ot_peer *peer WANT_SYNC_PARAM( } else { stats_issue_event( EVENT_RENEW, 0, OT_PEERTIME( peer_dest ) ); +#ifdef WANT_SYNC_LIVE + /* Won't live sync peers that come back too fast. Only exception: + fresh "completed" reports */ + if( !from_sync ) { + if( OT_PEERTIME( peer_dest ) > OT_CLIENT_SYNC_RENEW_BOUNDARY || + ( !(OT_FLAG(peer_dest) & PEER_FLAG_COMPLETED ) && (OT_FLAG(peer) & PEER_FLAG_COMPLETED ) ) ) + livesync_tell( hash, peer ); + } +#endif + if( (OT_FLAG(peer_dest) & PEER_FLAG_SEEDING ) && !(OT_FLAG(peer) & PEER_FLAG_SEEDING ) ) torrent->peer_list->seed_count--; if( !(OT_FLAG(peer_dest) & PEER_FLAG_SEEDING ) && (OT_FLAG(peer) & PEER_FLAG_SEEDING ) ) diff --git a/trackerlogic.h b/trackerlogic.h index c2d071a..0b73d5e 100644 --- a/trackerlogic.h +++ b/trackerlogic.h @@ -26,6 +26,9 @@ typedef time_t ot_time; #define OT_CLIENT_REQUEST_INTERVAL_RANDOM ( OT_CLIENT_REQUEST_INTERVAL - OT_CLIENT_REQUEST_VARIATION/2 + (int)( random( ) % OT_CLIENT_REQUEST_VARIATION ) ) +/* If peers come back before 10 minutes, don't live sync them */ +#define OT_CLIENT_SYNC_RENEW_BOUNDARY 10 + /* We maintain a list of 1024 pointers to sorted list of ot_torrent structs Sort key is, of course, its hash */ #define OT_BUCKET_COUNT 1024