@ -4211,6 +4211,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -4211,6 +4211,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 ;
@ -4225,9 +4231,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -4225,9 +4231,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 ) ) {
@ -4251,6 +4254,13 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -4251,6 +4254,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 " , " transaction (%s) inv sent in violation of protocol peer=%d \n " , inv . hash . ToString ( ) , pfrom - > id ) ;
else if ( ! fAlreadyHave & & ! fImporting & & ! fReindex )
pfrom - > AskFor ( inv ) ;
}
// Track requests for our stuff
GetMainSignals ( ) . Inventory ( inv . hash ) ;
@ -4375,6 +4385,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -4375,6 +4385,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
else if ( strCommand = = " tx " )
{
// Stop processing the transaction early if
// We are in blocks only mode and peer is either not whitelisted or whitelistalwaysrelay is off
if ( GetBoolArg ( " -blocksonly " , DEFAULT_BLOCKSONLY ) & & ( ! pfrom - > fWhitelisted | | ! GetBoolArg ( " -whitelistalwaysrelay " , DEFAULT_WHITELISTALWAYSRELAY ) ) )
{
LogPrint ( " net " , " transaction sent in violation of protocol peer=%d \n " , pfrom - > id ) ;
return true ;
}
vector < uint256 > vWorkQueue ;
vector < uint256 > vEraseQueue ;
CTransaction tx ;