Changeset View
Changeset View
Standalone View
Standalone View
src/seeder/bitcoin.cpp
// Copyright (c) 2017-2019 The Bitcoin developers | // Copyright (c) 2017-2019 The Bitcoin developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <seeder/bitcoin.h> | #include <seeder/bitcoin.h> | ||||
#include <chainparams.h> | |||||
#include <hash.h> | #include <hash.h> | ||||
#include <netbase.h> | #include <netbase.h> | ||||
#include <seeder/db.h> | #include <seeder/db.h> | ||||
#include <serialize.h> | #include <serialize.h> | ||||
#include <uint256.h> | #include <uint256.h> | ||||
#include <algorithm> | #include <algorithm> | ||||
// Weither we are on testnet or mainnet. | |||||
bool fTestNet; | |||||
// The network magic to use. | |||||
CMessageHeader::MessageMagic netMagic = {{0xe3, 0xe1, 0xf3, 0xe8}}; | |||||
#define BITCOIN_SEED_NONCE 0x0539a019ca550825ULL | #define BITCOIN_SEED_NONCE 0x0539a019ca550825ULL | ||||
static const uint32_t allones(-1); | static const uint32_t allones(-1); | ||||
void CSeederNode::BeginMessage(const char *pszCommand) { | void CSeederNode::BeginMessage(const char *pszCommand) { | ||||
if (nHeaderStart != allones) { | if (nHeaderStart != allones) { | ||||
AbortMessage(); | AbortMessage(); | ||||
} | } | ||||
nHeaderStart = vSend.size(); | nHeaderStart = vSend.size(); | ||||
vSend << CMessageHeader(netMagic, pszCommand, 0); | vSend << CMessageHeader(Params().NetMagic(), pszCommand, 0); | ||||
nMessageStart = vSend.size(); | nMessageStart = vSend.size(); | ||||
// fprintf(stdout, "%s: SEND %s\n", ToString(you).c_str(), pszCommand); | // fprintf(stdout, "%s: SEND %s\n", ToString(you).c_str(), pszCommand); | ||||
} | } | ||||
void CSeederNode::AbortMessage() { | void CSeederNode::AbortMessage() { | ||||
if (nHeaderStart == allones) { | if (nHeaderStart == allones) { | ||||
return; | return; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 130 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
bool CSeederNode::ProcessMessages() { | bool CSeederNode::ProcessMessages() { | ||||
if (vRecv.empty()) { | if (vRecv.empty()) { | ||||
return false; | return false; | ||||
} | } | ||||
do { | do { | ||||
CDataStream::iterator pstart = std::search( | CDataStream::iterator pstart = | ||||
vRecv.begin(), vRecv.end(), BEGIN(netMagic), END(netMagic)); | std::search(vRecv.begin(), vRecv.end(), BEGIN(Params().NetMagic()), | ||||
uint32_t nHeaderSize = GetSerializeSize( | END(Params().NetMagic())); | ||||
CMessageHeader(netMagic), vRecv.GetType(), vRecv.GetVersion()); | uint32_t nHeaderSize = | ||||
GetSerializeSize(CMessageHeader(Params().NetMagic()), | |||||
vRecv.GetType(), vRecv.GetVersion()); | |||||
if (vRecv.end() - pstart < nHeaderSize) { | if (vRecv.end() - pstart < nHeaderSize) { | ||||
if (vRecv.size() > nHeaderSize) { | if (vRecv.size() > nHeaderSize) { | ||||
vRecv.erase(vRecv.begin(), vRecv.end() - nHeaderSize); | vRecv.erase(vRecv.begin(), vRecv.end() - nHeaderSize); | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
vRecv.erase(vRecv.begin(), pstart); | vRecv.erase(vRecv.begin(), pstart); | ||||
std::vector<char> vHeaderSave(vRecv.begin(), | std::vector<char> vHeaderSave(vRecv.begin(), | ||||
vRecv.begin() + nHeaderSize); | vRecv.begin() + nHeaderSize); | ||||
CMessageHeader hdr(netMagic); | CMessageHeader hdr(Params().NetMagic()); | ||||
vRecv >> hdr; | vRecv >> hdr; | ||||
if (!hdr.IsValidWithoutConfig(netMagic)) { | if (!hdr.IsValidWithoutConfig(Params().NetMagic())) { | ||||
// fprintf(stdout, "%s: BAD (invalid header)\n", | // fprintf(stdout, "%s: BAD (invalid header)\n", | ||||
// ToString(you).c_str()); | // ToString(you).c_str()); | ||||
ban = 100000; | ban = 100000; | ||||
return true; | return true; | ||||
} | } | ||||
std::string strCommand = hdr.GetCommand(); | std::string strCommand = hdr.GetCommand(); | ||||
unsigned int nMessageSize = hdr.nMessageSize; | unsigned int nMessageSize = hdr.nMessageSize; | ||||
if (nMessageSize > MAX_SIZE) { | if (nMessageSize > MAX_SIZE) { | ||||
▲ Show 20 Lines • Show All 145 Lines • Show Last 20 Lines |