@ -496,21 +496,25 @@ bool AddAddress(CAddress addr, int64 nTimePenalty, CAddrDB *pAddrDB)
void AddressCurrentlyConnected ( const CAddress & addr )
void AddressCurrentlyConnected ( const CAddress & addr )
{
{
CAddress * paddrFound = NULL ;
CRITICAL_BLOCK ( cs_mapAddresses )
CRITICAL_BLOCK ( cs_mapAddresses )
{
{
// Only if it's been published already
// Only if it's been published already
map < vector < unsigned char > , CAddress > : : iterator it = mapAddresses . find ( addr . GetKey ( ) ) ;
map < vector < unsigned char > , CAddress > : : iterator it = mapAddresses . find ( addr . GetKey ( ) ) ;
if ( it ! = mapAddresses . end ( ) )
if ( it ! = mapAddresses . end ( ) )
paddrFound = & ( * it ) . second ;
}
if ( paddrFound )
{
int64 nUpdateInterval = 20 * 60 ;
if ( paddrFound - > nTime < GetAdjustedTime ( ) - nUpdateInterval )
{
{
CAddress & addrFound = ( * it ) . second ;
// Periodically update most recently seen time
int64 nUpdateInterval = 20 * 60 ;
paddrFound - > nTime = GetAdjustedTime ( ) ;
if ( addrFound . nTime < GetAdjustedTime ( ) - nUpdateInterval )
CAddrDB addrdb ;
{
addrdb . WriteAddress ( * paddrFound ) ;
// Periodically update most recently seen time
addrFound . nTime = GetAdjustedTime ( ) ;
CAddrDB addrdb ;
addrdb . WriteAddress ( addrFound ) ;
}
}
}
}
}
}
}
@ -1271,13 +1275,13 @@ void ThreadDNSAddressSeed2(void* parg)
if ( ! fTestNet )
if ( ! fTestNet )
{
{
printf ( " Loading addresses from DNS seeds (could take a while) \n " ) ;
printf ( " Loading addresses from DNS seeds (could take a while) \n " ) ;
CAddrDB addrDB ;
addrDB . TxnBegin ( ) ;
for ( int seed_idx = 0 ; seed_idx < ARRAYLEN ( strDNSSeed ) ; seed_idx + + ) {
for ( int seed_idx = 0 ; seed_idx < ARRAYLEN ( strDNSSeed ) ; seed_idx + + ) {
vector < CAddress > vaddr ;
vector < CAddress > vaddr ;
if ( Lookup ( strDNSSeed [ seed_idx ] , vaddr , NODE_NETWORK , - 1 , true ) )
if ( Lookup ( strDNSSeed [ seed_idx ] , vaddr , NODE_NETWORK , - 1 , true ) )
{
{
CAddrDB addrDB ;
addrDB . TxnBegin ( ) ;
BOOST_FOREACH ( CAddress & addr , vaddr )
BOOST_FOREACH ( CAddress & addr , vaddr )
{
{
if ( addr . GetByte ( 3 ) ! = 127 )
if ( addr . GetByte ( 3 ) ! = 127 )
@ -1287,10 +1291,9 @@ void ThreadDNSAddressSeed2(void* parg)
found + + ;
found + + ;
}
}
}
}
addrDB . TxnCommit ( ) ; // Save addresses (it's ok if this fails)
}
}
}
}
addrDB . TxnCommit ( ) ; // Save addresses (it's ok if this fails)
}
}
printf ( " %d addresses found from DNS seeds \n " , found ) ;
printf ( " %d addresses found from DNS seeds \n " , found ) ;
@ -1462,28 +1465,32 @@ void ThreadOpenConnections2(void* parg)
if ( fShutdown )
if ( fShutdown )
return ;
return ;
bool fAddSeeds = false ;
CRITICAL_BLOCK ( cs_mapAddresses )
CRITICAL_BLOCK ( cs_mapAddresses )
{
{
// Add seed nodes if IRC isn't working
// Add seed nodes if IRC isn't working
bool fTOR = ( fUseProxy & & addrProxy . port = = htons ( 9050 ) ) ;
bool fTOR = ( fUseProxy & & addrProxy . port = = htons ( 9050 ) ) ;
if ( mapAddresses . empty ( ) & & ( GetTime ( ) - nStart > 60 | | fTOR ) & & ! fTestNet )
if ( mapAddresses . empty ( ) & & ( GetTime ( ) - nStart > 60 | | fTOR ) & & ! fTestNet )
fAddSeeds = true ;
}
if ( fAddSeeds )
{
for ( int i = 0 ; i < ARRAYLEN ( pnSeed ) ; i + + )
{
{
for ( int i = 0 ; i < ARRAYLEN ( pnSeed ) ; i + + )
// It'll only connect to one or two seed nodes because once it connects,
{
// it'll get a pile of addresses with newer timestamps.
// It'll only connect to one or two seed nodes because once it connects,
// Seed nodes are given a random 'last seen time' of between one and two
// it'll get a pile of addresses with newer timestamps.
// weeks ago.
// Seed nodes are given a random 'last seen time' of between one and two
const int64 nOneWeek = 7 * 24 * 60 * 60 ;
// weeks ago.
CAddress addr ;
const int64 nOneWeek = 7 * 24 * 60 * 60 ;
addr . ip = pnSeed [ i ] ;
CAddress addr ;
addr . nTime = GetTime ( ) - GetRand ( nOneWeek ) - nOneWeek ;
addr . ip = pnSeed [ i ] ;
AddAddress ( addr ) ;
addr . nTime = GetTime ( ) - GetRand ( nOneWeek ) - nOneWeek ;
AddAddress ( addr ) ;
}
}
}
}
}
//
//
// Choose an address to connect to based on most recently seen
// Choose an address to connect to based on most recently seen
//
//