From 486c55c1eda718a85940684ff2bf22c69762b4b5 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 13 Jan 2009 21:00:05 +0000 Subject: [PATCH] (trunk libT) peerMgr: operate directly on tr_torrent and not peerMgr+torrentHash --- libtransmission/fastresume.c | 4 +- libtransmission/handshake.c | 4 +- libtransmission/peer-mgr.c | 188 ++++++++++++----------------------- libtransmission/peer-mgr.h | 40 +++----- libtransmission/peer-msgs.c | 16 +-- libtransmission/resume.c | 12 +-- libtransmission/torrent.c | 27 ++--- libtransmission/torrent.h | 3 + 8 files changed, 102 insertions(+), 192 deletions(-) diff --git a/libtransmission/fastresume.c b/libtransmission/fastresume.c index cb47f6677..6c127ba10 100644 --- a/libtransmission/fastresume.c +++ b/libtransmission/fastresume.c @@ -415,9 +415,7 @@ parsePeers( tr_torrent * tor, { tr_pex pex; readBytes( &pex, &buf, sizeof( tr_pex ) ); - tr_peerMgrAddPex( tor->session->peerMgr, tor->info.hash, - TR_PEER_FROM_CACHE, - &pex ); + tr_peerMgrAddPex( tor, TR_PEER_FROM_CACHE, &pex ); } tr_tordbg( tor, "Loaded %d peers from resume file", count ); diff --git a/libtransmission/handshake.c b/libtransmission/handshake.c index edcabcf28..86b707058 100644 --- a/libtransmission/handshake.c +++ b/libtransmission/handshake.c @@ -846,9 +846,7 @@ readCryptoProvide( tr_handshake * handshake, if(( tor = tr_torrentFindFromObfuscatedHash( handshake->session, obfuscatedTorrentHash ))) { const tr_bool clientIsSeed = tr_torrentIsSeed( tor ); - const tr_bool peerIsSeed = tr_peerMgrPeerIsSeed( handshake->session->peerMgr, - tor->info.hash, - tr_peerIoGetAddress( handshake->io, NULL ) ); + const tr_bool peerIsSeed = tr_peerMgrPeerIsSeed( tor, tr_peerIoGetAddress( handshake->io, NULL ) ); dbgmsg( handshake, "got INCOMING connection's encrypted handshake for torrent [%s]", tor->info.name ); tr_peerIoSetTorrentHash( handshake->io, tor->info.hash ); diff --git a/libtransmission/peer-mgr.c b/libtransmission/peer-mgr.c index 42617fcd6..e5a49e837 100644 --- a/libtransmission/peer-mgr.c +++ b/libtransmission/peer-mgr.c @@ -1,3 +1,4 @@ + /* * This file Copyright (C) 2007-2009 Charles Kerr * @@ -115,7 +116,7 @@ struct peer_atom time_t piece_data_time; }; -typedef struct +typedef struct tr_torrent_peers { tr_bool isRunning; @@ -138,7 +139,6 @@ Torrent; struct tr_peerMgr { tr_session * session; - tr_ptrArray torrents; /* Torrent */ tr_ptrArray incomingHandshakes; /* tr_handshake */ tr_timer * bandwidthTimer; }; @@ -234,33 +234,13 @@ comparePeerAtoms( const void * va, const void * vb ) *** **/ -static int -torrentCompare( const void * va, - const void * vb ) -{ - const Torrent * a = va; - const Torrent * b = vb; - - return memcmp( a->hash, b->hash, SHA_DIGEST_LENGTH ); -} - -static int -torrentCompareToHash( const void * va, - const void * vb ) -{ - const Torrent * a = va; - const uint8_t * b_hash = vb; - - return memcmp( a->hash, b_hash, SHA_DIGEST_LENGTH ); -} - static Torrent* getExistingTorrent( tr_peerMgr * manager, const uint8_t * hash ) { - return (Torrent*) tr_ptrArrayFindSorted( &manager->torrents, - hash, - torrentCompareToHash ); + tr_torrent * tor = tr_torrentFindFromHash( manager->session, hash ); + + return tor == NULL ? NULL : tor->torrentPeers; } static int @@ -453,7 +433,6 @@ tr_peerMgrNew( tr_session * session ) tr_peerMgr * m = tr_new0( tr_peerMgr, 1 ); m->session = session; - m->torrents = TR_PTR_ARRAY_INIT; m->incomingHandshakes = TR_PTR_ARRAY_INIT; m->bandwidthTimer = tr_timerNew( session, bandwidthPulse, m, BANDWIDTH_PERIOD_MSEC ); return m; @@ -473,9 +452,6 @@ tr_peerMgrFree( tr_peerMgr * manager ) tr_ptrArrayDestruct( &manager->incomingHandshakes, NULL ); - /* free the torrents. */ - tr_ptrArrayDestruct( &manager->torrents, torrentDestructor ); - managerUnlock( manager ); tr_free( manager ); } @@ -497,17 +473,13 @@ clientIsUploadingTo( const tr_peer * peer ) ***/ tr_bool -tr_peerMgrPeerIsSeed( const tr_peerMgr * mgr, - const uint8_t * torrentHash, +tr_peerMgrPeerIsSeed( const tr_torrent * tor, const tr_address * addr ) { tr_bool isSeed = FALSE; - const Torrent * t = NULL; - const struct peer_atom * atom = NULL; + const Torrent * t = tor->torrentPeers; + const struct peer_atom * atom = getExistingAtom( t, addr ); - t = getExistingTorrent( (tr_peerMgr*)mgr, torrentHash ); - if( t ) - atom = getExistingAtom( t, addr ); if( atom ) isSeed = ( atom->flags & ADDED_F_SEED_FLAG ) != 0; @@ -1084,7 +1056,7 @@ peerCallbackFunc( void * vpeer, void * vevent, void * vt ) tr_torrentSetHasPiece( tor, p, ok ); tr_torrentSetPieceChecked( tor, p, TRUE ); - tr_peerMgrSetBlame( tor->session->peerMgr, tor->info.hash, p, ok ); + tr_peerMgrSetBlame( tor, p, ok ); if( !ok ) { @@ -1333,21 +1305,19 @@ tr_isPex( const tr_pex * pex ) } void -tr_peerMgrAddPex( tr_peerMgr * manager, - const uint8_t * torrentHash, +tr_peerMgrAddPex( tr_torrent * tor, uint8_t from, const tr_pex * pex ) { if( tr_isPex( pex ) ) /* safeguard against corrupt data */ { - Torrent * t; - managerLock( manager ); + Torrent * t = tor->torrentPeers; + managerLock( t->manager ); - t = getExistingTorrent( manager, torrentHash ); if( !tr_sessionIsAddressBlocked( t->manager->session, &pex->addr ) ) ensureAtomExists( t, &pex->addr, pex->port, pex->flags, from ); - managerUnlock( manager ); + managerUnlock( t->manager ); } } @@ -1429,15 +1399,14 @@ tr_peerMgrArrayToPex( const void * array, **/ void -tr_peerMgrSetBlame( tr_peerMgr * manager, - const uint8_t * torrentHash, +tr_peerMgrSetBlame( tr_torrent * tor, tr_piece_index_t pieceIndex, int success ) { if( !success ) { int peerCount, i; - Torrent * t = getExistingTorrent( manager, torrentHash ); + Torrent * t = tor->torrentPeers; tr_peer ** peers; assert( torrentIsLocked( t ) ); @@ -1489,22 +1458,15 @@ peerPrefersCrypto( const tr_peer * peer ) } int -tr_peerMgrGetPeers( tr_peerMgr * manager, - const uint8_t * torrentHash, +tr_peerMgrGetPeers( tr_torrent * tor, tr_pex ** setme_pex, uint8_t af) { int peersReturning = 0; - const Torrent * t; + const Torrent * t = tor->torrentPeers; - managerLock( manager ); + managerLock( t->manager ); - t = getExistingTorrent( manager, torrentHash ); - if( t == NULL ) - { - *setme_pex = NULL; - } - else { int i; const tr_peer ** peers = (const tr_peer**) tr_ptrArrayBase( &t->peers ); @@ -1539,7 +1501,7 @@ tr_peerMgrGetPeers( tr_peerMgr * manager, *setme_pex = pex; } - managerUnlock( manager ); + managerUnlock( t->manager ); return peersReturning; } @@ -1548,14 +1510,11 @@ static int reconnectPulse( void * vtorrent ); static int rechokePulse( void * vtorrent ); void -tr_peerMgrStartTorrent( tr_peerMgr * manager, - const uint8_t * torrentHash ) +tr_peerMgrStartTorrent( tr_torrent * tor ) { - Torrent * t; + Torrent * t = tor->torrentPeers; - managerLock( manager ); - - t = getExistingTorrent( manager, torrentHash ); + managerLock( t->manager ); assert( t ); assert( ( t->isRunning != 0 ) == ( t->reconnectTimer != NULL ) ); @@ -1581,7 +1540,7 @@ tr_peerMgrStartTorrent( tr_peerMgr * manager, refillSoon( t ); } - managerUnlock( manager ); + managerUnlock( t->manager ); } static void @@ -1604,66 +1563,56 @@ stopTorrent( Torrent * t ) } void -tr_peerMgrStopTorrent( tr_peerMgr * manager, - const uint8_t * torrentHash ) +tr_peerMgrStopTorrent( tr_torrent * tor ) { - managerLock( manager ); + Torrent * t = tor->torrentPeers; - stopTorrent( getExistingTorrent( manager, torrentHash ) ); + managerLock( t->manager ); - managerUnlock( manager ); + stopTorrent( t ); + + managerUnlock( t->manager ); } void tr_peerMgrAddTorrent( tr_peerMgr * manager, tr_torrent * tor ) { - Torrent * t; - managerLock( manager ); assert( tor ); - assert( getExistingTorrent( manager, tor->info.hash ) == NULL ); + assert( tor->torrentPeers == NULL ); - t = torrentConstructor( manager, tor ); - tr_ptrArrayInsertSorted( &manager->torrents, t, torrentCompare ); + tor->torrentPeers = torrentConstructor( manager, tor ); managerUnlock( manager ); } void -tr_peerMgrRemoveTorrent( tr_peerMgr * manager, - const uint8_t * torrentHash ) +tr_peerMgrRemoveTorrent( tr_torrent * tor ) { - Torrent * t; + tr_torrentLock( tor ); - managerLock( manager ); + stopTorrent( tor->torrentPeers ); + torrentDestructor( tor->torrentPeers ); - t = getExistingTorrent( manager, torrentHash ); - assert( t ); - stopTorrent( t ); - tr_ptrArrayRemoveSorted( &manager->torrents, t, torrentCompare ); - torrentDestructor( t ); - - managerUnlock( manager ); + tr_torrentUnlock( tor ); } void -tr_peerMgrTorrentAvailability( const tr_peerMgr * manager, - const uint8_t * torrentHash, - int8_t * tab, +tr_peerMgrTorrentAvailability( const tr_torrent * tor, + int8_t * tab, unsigned int tabCount ) { tr_piece_index_t i; const Torrent * t; - const tr_torrent * tor; float interval; tr_bool isSeed; int peerCount; const tr_peer ** peers; - managerLock( manager ); + tr_torrentLock( tor ); - t = getExistingTorrent( (tr_peerMgr*)manager, torrentHash ); + t = tor->torrentPeers; tor = t->tor; interval = tor->info.pieceCount / (float)tabCount; isSeed = tor && ( tr_cpGetStatus ( &tor->completion ) == TR_SEED ); @@ -1686,29 +1635,27 @@ tr_peerMgrTorrentAvailability( const tr_peerMgr * manager, } } - managerUnlock( manager ); + tr_torrentUnlock( tor ); } /* Returns the pieces that are available from peers */ tr_bitfield* -tr_peerMgrGetAvailable( const tr_peerMgr * manager, - const uint8_t * torrentHash ) +tr_peerMgrGetAvailable( const tr_torrent * tor ) { int i; int peerCount; - Torrent * t; + Torrent * t = tor->torrentPeers; const tr_peer ** peers; tr_bitfield * pieces; - managerLock( manager ); + managerLock( t->manager ); - t = getExistingTorrent( (tr_peerMgr*)manager, torrentHash ); pieces = tr_bitfieldNew( t->tor->info.pieceCount ); peerCount = tr_ptrArraySize( &t->peers ); peers = (const tr_peer**) tr_ptrArrayBase( &t->peers ); for( i=0; ihave ); - managerUnlock( manager ); + managerUnlock( t->manager ); return pieces; } @@ -1728,8 +1675,7 @@ tr_peerMgrHasConnections( const tr_peerMgr * manager, } void -tr_peerMgrTorrentStats( const tr_peerMgr * manager, - const uint8_t * torrentHash, +tr_peerMgrTorrentStats( tr_torrent * tor, int * setmePeersKnown, int * setmePeersConnected, int * setmeSeedsConnected, @@ -1739,13 +1685,12 @@ tr_peerMgrTorrentStats( const tr_peerMgr * manager, int * setmePeersFrom ) { int i, size; - const Torrent * t; + const Torrent * t = tor->torrentPeers; const tr_peer ** peers; const tr_webseed ** webseeds; - managerLock( manager ); + managerLock( t->manager ); - t = getExistingTorrent( (tr_peerMgr*)manager, torrentHash ); peers = (const tr_peer **) tr_ptrArrayBase( &t->peers ); size = tr_ptrArraySize( &t->peers ); @@ -1787,27 +1732,25 @@ tr_peerMgrTorrentStats( const tr_peerMgr * manager, if( tr_webseedIsActive( webseeds[i] ) ) ++*setmeWebseedsSendingToUs; - managerUnlock( manager ); + managerUnlock( t->manager ); } float* -tr_peerMgrWebSpeeds( const tr_peerMgr * manager, - const uint8_t * torrentHash ) +tr_peerMgrWebSpeeds( const tr_torrent * tor ) { - const Torrent * t; + const Torrent * t = tor->torrentPeers; const tr_webseed ** webseeds; int i; int webseedCount; float * ret; uint64_t now; - assert( manager ); - managerLock( manager ); + assert( t->manager ); + managerLock( t->manager ); - t = getExistingTorrent( (tr_peerMgr*)manager, torrentHash ); webseeds = (const tr_webseed**) tr_ptrArrayBase( &t->webseeds ); webseedCount = tr_ptrArraySize( &t->webseeds ); - assert( webseedCount == t->tor->info.webseedCount ); + assert( webseedCount == tor->info.webseedCount ); ret = tr_new0( float, webseedCount ); now = tr_date( ); @@ -1815,7 +1758,7 @@ tr_peerMgrWebSpeeds( const tr_peerMgr * manager, if( !tr_webseedGetSpeed( webseeds[i], now, &ret[i] ) ) ret[i] = -1.0; - managerUnlock( manager ); + managerUnlock( t->manager ); return ret; } @@ -1827,20 +1770,18 @@ tr_peerGetPieceSpeed( const tr_peer * peer, uint64_t now, tr_direction direction struct tr_peer_stat * -tr_peerMgrPeerStats( const tr_peerMgr * manager, - const uint8_t * torrentHash, +tr_peerMgrPeerStats( const tr_torrent * tor, int * setmeCount ) { int i, size; - const Torrent * t; + const Torrent * t = tor->torrentPeers; const tr_peer ** peers; tr_peer_stat * ret; uint64_t now; - assert( manager ); - managerLock( manager ); + assert( t->manager ); + managerLock( t->manager ); - t = getExistingTorrent( (tr_peerMgr*)manager, torrentHash ); size = tr_ptrArraySize( &t->peers ); peers = (const tr_peer**) tr_ptrArrayBase( &t->peers ); ret = tr_new0( tr_peer_stat, size ); @@ -1890,7 +1831,7 @@ tr_peerMgrPeerStats( const tr_peerMgr * manager, *setmeCount = size; - managerUnlock( manager ); + managerUnlock( t->manager ); return ret; } @@ -2370,12 +2311,13 @@ tordbg( t, "nCandidates is %d, MAX_RECONNECTIONS_PER_PULSE is %d, getPeerCount(t static void pumpAllPeers( tr_peerMgr * mgr ) { - const int torrentCount = tr_ptrArraySize( &mgr->torrents ); - int i, j; + tr_torrent * tor = NULL; - for( i=0; isession, tor ))) { - Torrent * t = tr_ptrArrayNth( &mgr->torrents, i ); + int j; + Torrent * t = tor->torrentPeers; + for( j=0; jpeers ); ++j ) { tr_peer * peer = tr_ptrArrayNth( &t->peers, j ); diff --git a/libtransmission/peer-mgr.h b/libtransmission/peer-mgr.h index bbc4b92a8..cf6d6b9b7 100644 --- a/libtransmission/peer-mgr.h +++ b/libtransmission/peer-mgr.h @@ -105,9 +105,8 @@ tr_peerMgr* tr_peerMgrNew( tr_session * ); void tr_peerMgrFree( tr_peerMgr * manager ); -tr_bool tr_peerMgrPeerIsSeed( const tr_peerMgr * mgr, - const uint8_t * torrentHash, - const tr_address * addr ); +tr_bool tr_peerMgrPeerIsSeed( const tr_torrent * tor, + const tr_address * addr ); void tr_peerMgrAddIncoming( tr_peerMgr * manager, tr_address * addr, @@ -130,46 +129,37 @@ tr_pex * tr_peerMgrArrayToPex( const void * array, size_t arrayLen, size_t * setme_pex_count ); -void tr_peerMgrAddPex( tr_peerMgr * manager, - const uint8_t * torrentHash, +void tr_peerMgrAddPex( tr_torrent * tor, uint8_t from, const tr_pex * pex ); -void tr_peerMgrSetBlame( tr_peerMgr * manager, - const uint8_t * torrentHash, +void tr_peerMgrSetBlame( tr_torrent * tor, tr_piece_index_t pieceIndex, int success ); -int tr_peerMgrGetPeers( tr_peerMgr * manager, - const uint8_t * torrentHash, +int tr_peerMgrGetPeers( tr_torrent * tor, tr_pex ** setme_pex, uint8_t af); -void tr_peerMgrStartTorrent( tr_peerMgr * manager, - const uint8_t * torrentHash ); +void tr_peerMgrStartTorrent( tr_torrent * tor ); -void tr_peerMgrStopTorrent( tr_peerMgr * manager, - const uint8_t * torrentHash ); +void tr_peerMgrStopTorrent( tr_torrent * tor ); void tr_peerMgrAddTorrent( tr_peerMgr * manager, struct tr_torrent * tor ); -void tr_peerMgrRemoveTorrent( tr_peerMgr * manager, - const uint8_t * torrentHash ); +void tr_peerMgrRemoveTorrent( tr_torrent * tor ); -void tr_peerMgrTorrentAvailability( const tr_peerMgr * manager, - const uint8_t * torrentHash, +void tr_peerMgrTorrentAvailability( const tr_torrent * tor, int8_t * tab, unsigned int tabCount ); -struct tr_bitfield* tr_peerMgrGetAvailable( const tr_peerMgr * manager, - const uint8_t * torrentHash ); +struct tr_bitfield* tr_peerMgrGetAvailable( const tr_torrent * tor ); int tr_peerMgrHasConnections( const tr_peerMgr * manager, const uint8_t * torrentHash ); -void tr_peerMgrTorrentStats( const tr_peerMgr * manager, - const uint8_t * torrentHash, +void tr_peerMgrTorrentStats( tr_torrent * tor, int * setmePeersKnown, int * setmePeersConnected, int * setmeSeedsConnected, @@ -178,12 +168,10 @@ void tr_peerMgrTorrentStats( const tr_peerMgr * manager, int * setmePeersGettingFromUs, int * setmePeersFrom ); /* TR_PEER_FROM__MAX */ -struct tr_peer_stat* tr_peerMgrPeerStats( const tr_peerMgr * manager, - const uint8_t * torrentHash, - int * setmeCount ); +struct tr_peer_stat* tr_peerMgrPeerStats( const tr_torrent * tor, + int * setmeCount ); -float* tr_peerMgrWebSpeeds( const tr_peerMgr * manager, - const uint8_t * torrentHash ); +float* tr_peerMgrWebSpeeds( const tr_torrent * tor ); double tr_peerGetPieceSpeed( const tr_peer * peer, diff --git a/libtransmission/peer-msgs.c b/libtransmission/peer-msgs.c index 81ca8c418..e41bd18bc 100644 --- a/libtransmission/peer-msgs.c +++ b/libtransmission/peer-msgs.c @@ -1046,7 +1046,7 @@ parseUtPex( tr_peermsgs * msgs, int msglen, struct evbuffer * inbuf ) int loaded = 0; uint8_t * tmp = tr_new( uint8_t, msglen ); tr_benc val; - const tr_torrent * tor = msgs->torrent; + tr_torrent * tor = msgs->torrent; const uint8_t * added; size_t added_len; @@ -1066,8 +1066,7 @@ parseUtPex( tr_peermsgs * msgs, int msglen, struct evbuffer * inbuf ) tr_peerMgrCompactToPex( added, added_len, added_f, added_f_len, &n ); for( i = 0; i < n; ++i ) - tr_peerMgrAddPex( msgs->session->peerMgr, tor->info.hash, - TR_PEER_FROM_PEX, pex + i ); + tr_peerMgrAddPex( tor, TR_PEER_FROM_PEX, pex + i ); tr_free( pex ); } @@ -1082,8 +1081,7 @@ parseUtPex( tr_peermsgs * msgs, int msglen, struct evbuffer * inbuf ) tr_peerMgrCompact6ToPex( added, added_len, added_f, added_f_len, &n ); for( i = 0; i < n; ++i ) - tr_peerMgrAddPex( msgs->session->peerMgr, tor->info.hash, - TR_PEER_FROM_PEX, pex + i ); + tr_peerMgrAddPex( tor, TR_PEER_FROM_PEX, pex + i ); tr_free( pex ); } @@ -1913,12 +1911,8 @@ sendPex( tr_peermsgs * msgs ) PexDiffs diffs6; tr_pex * newPex = NULL; tr_pex * newPex6 = NULL; - const int newCount = tr_peerMgrGetPeers( msgs->session->peerMgr, - msgs->torrent->info.hash, - &newPex, TR_AF_INET ); - const int newCount6 = tr_peerMgrGetPeers( msgs->session->peerMgr, - msgs->torrent->info.hash, - &newPex6, TR_AF_INET6 ); + const int newCount = tr_peerMgrGetPeers( msgs->torrent, &newPex, TR_AF_INET ); + const int newCount6 = tr_peerMgrGetPeers( msgs->torrent, &newPex6, TR_AF_INET6 ); /* build the diffs */ diffs.added = tr_new( tr_pex, newCount ); diff --git a/libtransmission/resume.c b/libtransmission/resume.c index d70992a6c..6e5886348 100644 --- a/libtransmission/resume.c +++ b/libtransmission/resume.c @@ -68,8 +68,7 @@ savePeers( tr_benc * dict, const tr_torrent * tor ) { tr_pex * pex = NULL; - int count = tr_peerMgrGetPeers( tor->session->peerMgr, - tor->info.hash, &pex, TR_AF_INET ); + int count = tr_peerMgrGetPeers( (tr_torrent*) tor, &pex, TR_AF_INET ); if( count > 0 ) tr_bencDictAddRaw( dict, KEY_PEERS, pex, sizeof( tr_pex ) * count ); @@ -77,8 +76,7 @@ savePeers( tr_benc * dict, tr_free( pex ); pex = NULL; - count = tr_peerMgrGetPeers( tor->session->peerMgr, tor->info.hash, &pex, - TR_AF_INET6 ); + count = tr_peerMgrGetPeers( (tr_torrent*) tor, &pex, TR_AF_INET6 ); if( count > 0 ) tr_bencDictAddRaw( dict, KEY_PEERS6, pex, sizeof( tr_pex ) * count ); @@ -101,8 +99,7 @@ loadPeers( tr_benc * dict, { tr_pex pex; memcpy( &pex, str + ( i * sizeof( tr_pex ) ), sizeof( tr_pex ) ); - tr_peerMgrAddPex( tor->session->peerMgr, - tor->info.hash, TR_PEER_FROM_CACHE, &pex ); + tr_peerMgrAddPex( tor, TR_PEER_FROM_CACHE, &pex ); } tr_tordbg( tor, "Loaded %d IPv4 peers from resume file", count ); ret = TR_FR_PEERS; @@ -116,8 +113,7 @@ loadPeers( tr_benc * dict, { tr_pex pex; memcpy( &pex, str + ( i * sizeof( tr_pex ) ), sizeof( tr_pex ) ); - tr_peerMgrAddPex( tor->session->peerMgr, - tor->info.hash, TR_PEER_FROM_CACHE, &pex ); + tr_peerMgrAddPex( tor, TR_PEER_FROM_CACHE, &pex ); } tr_tordbg( tor, "Loaded %d IPv6 peers from resume file", count ); ret = TR_FR_PEERS; diff --git a/libtransmission/torrent.c b/libtransmission/torrent.c index 3e09dc31a..a19d10381 100644 --- a/libtransmission/torrent.c +++ b/libtransmission/torrent.c @@ -205,8 +205,7 @@ onTrackerResponse( void * tracker UNUSED, { if( event->allAreSeeds ) pex[i].flags |= ADDED_F_SEED_FLAG; - tr_peerMgrAddPex( tor->session->peerMgr, tor->info.hash, - TR_PEER_FROM_TRACKER, pex + i ); + tr_peerMgrAddPex( tor, TR_PEER_FROM_TRACKER, pex + i ); } tr_free( pex ); @@ -744,8 +743,7 @@ tr_torrentStat( tr_torrent * tor ) &s->seeders, &s->downloaders ); - tr_peerMgrTorrentStats( tor->session->peerMgr, - tor->info.hash, + tr_peerMgrTorrentStats( tor, &s->peersKnown, &s->peersConnected, &usableSeeds, @@ -799,10 +797,7 @@ tr_torrentStat( tr_torrent * tor ) else { tr_piece_index_t i; - tr_bitfield * peerPieces = tr_peerMgrGetAvailable( - tor->session->peerMgr, - tor->info. - hash ); + tr_bitfield * peerPieces = tr_peerMgrGetAvailable( tor ); s->desiredAvailable = 0; for( i = 0; i < tor->info.pieceCount; ++i ) if( !tor->info.pieces[i].dnd && tr_bitfieldHas( peerPieces, i ) ) @@ -919,8 +914,7 @@ tr_torrentFilesFree( tr_file_stat * files, float* tr_torrentWebSpeeds( const tr_torrent * tor ) { - return tor ? tr_peerMgrWebSpeeds( tor->session->peerMgr, tor->info.hash ) - : NULL; + return tor ? tr_peerMgrWebSpeeds( tor ) : NULL; } tr_peer_stat * @@ -930,8 +924,7 @@ tr_torrentPeers( const tr_torrent * tor, tr_peer_stat * ret = NULL; if( tor ) - ret = tr_peerMgrPeerStats( tor->session->peerMgr, - tor->info.hash, peerCount ); + ret = tr_peerMgrPeerStats( tor, peerCount ); return ret; } @@ -948,9 +941,7 @@ tr_torrentAvailability( const tr_torrent * tor, int8_t * tab, int size ) { - tr_peerMgrTorrentAvailability( tor->session->peerMgr, - tor->info.hash, - tab, size ); + tr_peerMgrTorrentAvailability( tor, tab, size ); } void @@ -1012,7 +1003,7 @@ freeTorrent( tr_torrent * tor ) tr_globalLock( session ); - tr_peerMgrRemoveTorrent( session->peerMgr, tor->info.hash ); + tr_peerMgrRemoveTorrent( tor ); tr_cpDestruct( &tor->completion ); @@ -1065,7 +1056,7 @@ checkAndStartImpl( void * vtor ) tr_torrentSaveResume( tor ); tor->startDate = time( NULL ); tr_trackerStart( tor->tracker ); - tr_peerMgrStartTorrent( tor->session->peerMgr, tor->info.hash ); + tr_peerMgrStartTorrent( tor ); tr_globalUnlock( tor->session ); } @@ -1154,7 +1145,7 @@ stopTorrent( void * vtor ) tr_torrent * tor = vtor; tr_verifyRemove( tor ); - tr_peerMgrStopTorrent( tor->session->peerMgr, tor->info.hash ); + tr_peerMgrStopTorrent( tor ); tr_trackerStop( tor->tracker ); tr_torrentCloseLocalFiles( tor ); diff --git a/libtransmission/torrent.h b/libtransmission/torrent.h index a03c3eeb4..f4b5e2da1 100644 --- a/libtransmission/torrent.h +++ b/libtransmission/torrent.h @@ -24,6 +24,7 @@ struct tr_bandwidth; struct tr_ratecontrol; +struct tr_torrent_peers; /** *** Package-visible ctor API @@ -197,6 +198,8 @@ struct tr_torrent int uniqueId; struct tr_bandwidth * bandwidth; + + struct tr_torrent_peers * torrentPeers; }; /* get the index of this piece's first block */