]> granicus.if.org Git - transmission/commitdiff
#3595 Allow promotion of the "from" value in peer_atom (and still show where it was...
authorMitchell Livingston <livings124@transmissionbt.com>
Thu, 23 Dec 2010 02:35:21 +0000 (02:35 +0000)
committerMitchell Livingston <livings124@transmissionbt.com>
Thu, 23 Dec 2010 02:35:21 +0000 (02:35 +0000)
libtransmission/peer-mgr.c
macosx/InfoPeersViewController.m

index 95853d65ad9340f39ee4d94143763996a28d5250..5a8bca248a8d88f5673e36212536cc65da0f37ae 100644 (file)
@@ -121,7 +121,8 @@ enum
  */
 struct peer_atom
 {
-    uint8_t     from;
+    uint8_t     fromFirst;          /* where the peer was first found */
+    uint8_t     fromBest;           /* the "best" value of where the peer has been found */
     uint8_t     flags;              /* these match the added_f flags */
     uint8_t     flags2;             /* flags that aren't defined in added_f */
     uint8_t     uploadOnly;         /* UPLOAD_ONLY_ */
@@ -150,7 +151,8 @@ static tr_bool
 tr_isAtom( const struct peer_atom * atom )
 {
     return ( atom != NULL )
-        && ( atom->from < TR_PEER_FROM__MAX )
+        && ( atom->fromFirst < TR_PEER_FROM__MAX )
+        && ( atom->fromBest < TR_PEER_FROM__MAX )
         && ( tr_isAddress( &atom->addr ) );
 }
 #endif
@@ -1571,7 +1573,8 @@ ensureAtomExists( Torrent           * t,
         a->addr = *addr;
         a->port = port;
         a->flags = flags;
-        a->from = from;
+        a->fromFirst = from;
+        a->fromBest = from;
         a->shelf_date = tr_time( ) + getDefaultShelfLife( from ) + jitter;
         a->blocklisted = -1;
         atomSetSeedProbability( a, seedProbability );
@@ -1579,9 +1582,13 @@ ensureAtomExists( Torrent           * t,
 
         tordbg( t, "got a new atom: %s", tr_atomAddrStr( a ) );
     }
-    else if( a->seedProbability == -1 )
+    else
     {
-        atomSetSeedProbability( a, seedProbability );
+        if (from < a->fromBest)
+            a->fromBest = from;
+        
+        if( a->seedProbability == -1 )
+            atomSetSeedProbability( a, seedProbability );
     }
 }
 
@@ -1944,8 +1951,8 @@ compareAtomsByUsefulness( const void * va, const void *vb )
 
     if( a->piece_data_time != b->piece_data_time )
         return a->piece_data_time > b->piece_data_time ? -1 : 1;
-    if( a->from != b->from )
-        return a->from < b->from ? -1 : 1;
+    if( a->fromBest != b->fromBest )
+        return a->fromBest < b->fromBest ? -1 : 1;
     if( a->numFails != b->numFails )
         return a->numFails < b->numFails ? -1 : 1;
 
@@ -2232,7 +2239,7 @@ tr_peerMgrTorrentStats( tr_torrent       * tor,
 
         ++*setmePeersConnected;
 
-        ++setmePeersFrom[atom->from];
+        ++setmePeersFrom[atom->fromFirst];
 
         if( clientIsDownloadingFrom( tor, peer ) )
             ++*setmePeersSendingToUs;
@@ -2341,7 +2348,7 @@ tr_peerMgrPeerStats( const tr_torrent    * tor,
         tr_strlcpy( stat->client, ( peer->client ? peer->client : "" ),
                    sizeof( stat->client ) );
         stat->port                = ntohs( peer->atom->port );
-        stat->from                = atom->from;
+        stat->from                = atom->fromFirst;
         stat->progress            = peer->progress;
         stat->isEncrypted         = tr_peerIoIsEncrypted( peer->io ) ? 1 : 0;
         stat->rateToPeer_KBps     = toSpeedKBps( tr_peerGetPieceSpeed_Bps( peer, now_msec, TR_CLIENT_TO_PEER ) );
@@ -2373,7 +2380,7 @@ tr_peerMgrPeerStats( const tr_torrent    * tor,
         if( !stat->peerIsChoked && !stat->peerIsInterested ) *pch++ = '?';
         if( stat->isEncrypted ) *pch++ = 'E';
         if( stat->from == TR_PEER_FROM_DHT ) *pch++ = 'H';
-        if( stat->from == TR_PEER_FROM_PEX ) *pch++ = 'X';
+        else if( stat->from == TR_PEER_FROM_PEX ) *pch++ = 'X';
         if( stat->isIncoming ) *pch++ = 'I';
         *pch = '\0';
     }
@@ -3453,8 +3460,8 @@ getPeerCandidateScore( const tr_torrent * tor, const struct peer_atom * atom, ui
     score = addValToKey( score, 8, i );
 
     /* Prefer peers that we got from more trusted sources.
-     * lower `from' values indicate more trusted sources */
-    score = addValToKey( score, 4, atom->from );
+     * lower `fromBest' values indicate more trusted sources */
+    score = addValToKey( score, 4, atom->fromBest );
 
     /* salt */
     score = addValToKey( score, 8, salt );
index 9399b55ebcbbf40c382cdeb8f7668e3777ddb7af..536c95f667be31ec5085b0c6ef0782a86b630c0d 100644 (file)
         
         if (connected > 0)
         {
-            NSMutableArray * fromComponents = [NSMutableArray arrayWithCapacity: 6];
+            NSMutableArray * fromComponents = [NSMutableArray arrayWithCapacity: 7];
             if (tracker > 0)
                 [fromComponents addObject: [NSString stringWithFormat:
                                         NSLocalizedString(@"%d tracker", "Inspector -> Peers tab -> peers"), tracker]];