mirror of
https://github.com/transmission/transmission
synced 2024-12-26 09:37:56 +00:00
fix bug that tended to disconnect from valid peers when we were seeding. also, follow the BT spec's terminology a little closer.
This commit is contained in:
parent
7a54e88d4e
commit
968868debe
3 changed files with 7 additions and 7 deletions
|
@ -43,8 +43,8 @@ typedef struct tr_peer
|
||||||
/* the client name from the `v' string in LTEP's handshake dictionary */
|
/* the client name from the `v' string in LTEP's handshake dictionary */
|
||||||
char * client;
|
char * client;
|
||||||
|
|
||||||
time_t clientSentBlockAt;
|
time_t clientSentPieceDataAt;
|
||||||
time_t peerSentBlockAt;
|
time_t peerSentPieceDataAt;
|
||||||
time_t peerSentKeepaliveAt;
|
time_t peerSentKeepaliveAt;
|
||||||
time_t chokeChangedAt;
|
time_t chokeChangedAt;
|
||||||
time_t connectionChangedAt;
|
time_t connectionChangedAt;
|
||||||
|
|
|
@ -1066,7 +1066,7 @@ clientIsSnubbedBy( const tr_peer * peer )
|
||||||
{
|
{
|
||||||
assert( peer != NULL );
|
assert( peer != NULL );
|
||||||
|
|
||||||
return peer->peerSentBlockAt < (time(NULL) - SNUBBED_SEC);
|
return peer->peerSentPieceDataAt < (time(NULL) - SNUBBED_SEC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1175,12 +1175,12 @@ shouldPeerBeDisconnected( Torrent * t, tr_peer * peer, int peerCount, int isSeed
|
||||||
else
|
else
|
||||||
strictness = peerCount / (double)relaxStrictnessIfFewerThanN;
|
strictness = peerCount / (double)relaxStrictnessIfFewerThanN;
|
||||||
|
|
||||||
/* test: has it been too long since we exchanged block data? */
|
/* test: has it been too long since we exchanged piece data? */
|
||||||
if( ( now - peer->connectionChangedAt ) >= MAX_TRANSFER_IDLE ) {
|
if( ( now - peer->connectionChangedAt ) >= MAX_TRANSFER_IDLE ) {
|
||||||
const uint64_t lo = MIN_TRANSFER_IDLE;
|
const uint64_t lo = MIN_TRANSFER_IDLE;
|
||||||
const uint64_t hi = MAX_TRANSFER_IDLE;
|
const uint64_t hi = MAX_TRANSFER_IDLE;
|
||||||
const uint64_t limit = lo + ((hi-lo) * strictness);
|
const uint64_t limit = lo + ((hi-lo) * strictness);
|
||||||
const uint64_t interval = now - (isSeeding ? peer->clientSentBlockAt : peer->peerSentBlockAt);
|
const uint64_t interval = now - (isSeeding ? peer->clientSentPieceDataAt : peer->peerSentPieceDataAt);
|
||||||
if( interval > limit )
|
if( interval > limit )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -937,7 +937,7 @@ readBtPiece( tr_peermsgs * msgs, struct evbuffer * inbuf )
|
||||||
/* update our tables accordingly */
|
/* update our tables accordingly */
|
||||||
assert( inlen >= msgs->blockToUs.length );
|
assert( inlen >= msgs->blockToUs.length );
|
||||||
msgs->blockToUs.length -= inlen;
|
msgs->blockToUs.length -= inlen;
|
||||||
msgs->info->peerSentBlockAt = time( NULL );
|
msgs->info->peerSentPieceDataAt = time( NULL );
|
||||||
clientGotBytes( msgs, inlen );
|
clientGotBytes( msgs, inlen );
|
||||||
|
|
||||||
/* if this was the entire block, save it */
|
/* if this was the entire block, save it */
|
||||||
|
@ -1040,7 +1040,7 @@ pulse( void * vmsgs )
|
||||||
evbuffer_drain( msgs->outBlock, outlen );
|
evbuffer_drain( msgs->outBlock, outlen );
|
||||||
peerGotBytes( msgs, outlen );
|
peerGotBytes( msgs, outlen );
|
||||||
len -= outlen;
|
len -= outlen;
|
||||||
msgs->info->peerSentBlockAt = time( NULL );
|
msgs->info->clientSentPieceDataAt = time( NULL );
|
||||||
dbgmsg( msgs, "wrote %d bytes; %d left in block", (int)outlen, (int)len );
|
dbgmsg( msgs, "wrote %d bytes; %d left in block", (int)outlen, (int)len );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue