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 <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> | ||||
// 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(); | ||||
// tfm::format(std::cout, "%s: SEND %s\n", ToString(you), | // tfm::format(std::cout, "%s: SEND %s\n", ToString(you), | ||||
// pszCommand); | // 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 | PeerMessagingState CSeederNode::ProcessMessage(std::string strCommand, | ||||
return PeerMessagingState::AwaitingMessages; | return PeerMessagingState::AwaitingMessages; | ||||
} | } | ||||
bool CSeederNode::ProcessMessages() { | bool CSeederNode::ProcessMessages() { | ||||
if (vRecv.empty()) { | if (vRecv.empty()) { | ||||
return false; | return false; | ||||
} | } | ||||
const CMessageHeader::MessageMagic netMagic = Params().NetMagic(); | |||||
do { | do { | ||||
CDataStream::iterator pstart = std::search( | CDataStream::iterator pstart = std::search( | ||||
vRecv.begin(), vRecv.end(), BEGIN(netMagic), END(netMagic)); | vRecv.begin(), vRecv.end(), BEGIN(netMagic), END(netMagic)); | ||||
uint32_t nHeaderSize = | uint32_t nHeaderSize = | ||||
GetSerializeSize(CMessageHeader(netMagic), vRecv.GetVersion()); | GetSerializeSize(CMessageHeader(netMagic), 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); | ||||
▲ Show 20 Lines • Show All 149 Lines • Show Last 20 Lines |