@ -15,6 +15,7 @@
# endif
# include "mruset.h"
# include "limitedmap.h"
# include "netbase.h"
# include "protocol.h"
# include "addrman.h"
@ -100,7 +101,7 @@ extern CCriticalSection cs_vNodes;
extern std : : map < CInv , CDataStream > mapRelay ;
extern std : : deque < std : : pair < int64 , CInv > > vRelayExpiration ;
extern CCriticalSection cs_mapRelay ;
extern std: : map< CInv , int64 > mapAlreadyAskedFor ;
extern limited map< CInv , int64 > mapAlreadyAskedFor ;
extern std : : vector < std : : string > vAddedNodes ;
extern CCriticalSection cs_vAddedNodes ;
@ -367,7 +368,12 @@ public:
{
// We're using mapAskFor as a priority queue,
// the key is the earliest time the request can be sent
int64 & nRequestTime = mapAlreadyAskedFor [ inv ] ;
int64 nRequestTime ;
limitedmap < CInv , int64 > : : const_iterator it = mapAlreadyAskedFor . find ( inv ) ;
if ( it ! = mapAlreadyAskedFor . end ( ) )
nRequestTime = it - > second ;
else
nRequestTime = 0 ;
if ( fDebugNet )
printf ( " askfor %s % " PRI64d " (%s) \n " , inv . ToString ( ) . c_str ( ) , nRequestTime , DateTimeStrFormat ( " %H:%M:%S " , nRequestTime / 1000000 ) . c_str ( ) ) ;
@ -380,6 +386,10 @@ public:
// Each retry is 2 minutes after the last
nRequestTime = std : : max ( nRequestTime + 2 * 60 * 1000000 , nNow ) ;
if ( it ! = mapAlreadyAskedFor . end ( ) )
mapAlreadyAskedFor . update ( it , nRequestTime ) ;
else
mapAlreadyAskedFor . insert ( std : : make_pair ( inv , nRequestTime ) ) ;
mapAskFor . insert ( std : : make_pair ( nRequestTime , inv ) ) ;
}