@ -4210,6 +4210,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
return error ( " message inv size() = % u " , vInv.size()) ;
}
bool fBlocksOnly = GetBoolArg ( " -blocksonly " , DEFAULT_BLOCKSONLY ) ;
// Allow whitelisted peers to send data other than blocks in blocks only mode if whitelistalwaysrelay is true
if ( pfrom - > fWhitelisted & & GetBoolArg ( " -whitelistalwaysrelay " , DEFAULT_WHITELISTALWAYSRELAY ) )
fBlocksOnly = false ;
LOCK ( cs_main ) ;
std : : vector < CInv > vToFetch ;
@ -4224,9 +4230,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
bool fAlreadyHave = AlreadyHave ( inv ) ;
LogPrint ( " net " , " got inv: %s %s peer=%d \n " , inv . ToString ( ) , fAlreadyHave ? " have " : " new " , pfrom - > id ) ;
if ( ! fAlreadyHave & & ! fImporting & & ! fReindex & & inv . type ! = MSG_BLOCK & & ! GetBoolArg ( " -blocksonly " , DEFAULT_BLOCKSONLY ) )
pfrom - > AskFor ( inv ) ;
if ( inv . type = = MSG_BLOCK ) {
UpdateBlockAvailability ( pfrom - > GetId ( ) , inv . hash ) ;
if ( ! fAlreadyHave & & ! fImporting & & ! fReindex & & ! mapBlocksInFlight . count ( inv . hash ) ) {
@ -4250,6 +4253,13 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
LogPrint ( " net " , " getheaders (%d) %s to peer=%d \n " , pindexBestHeader - > nHeight , inv . hash . ToString ( ) , pfrom - > id ) ;
}
}
else
{
if ( fBlocksOnly )
LogPrint ( " net " , " peer sent inv %s in violation of protocol peer=%d \n " , inv . ToString ( ) , pfrom - > id ) ;
else if ( ! fAlreadyHave & & ! fImporting & & ! fReindex )
pfrom - > AskFor ( inv ) ;
}
// Track requests for our stuff
GetMainSignals ( ) . Inventory ( inv . hash ) ;