Changeset View
Changeset View
Standalone View
Standalone View
src/seeder/bitcoin.cpp
#include "bitcoin.h" | #include "bitcoin.h" | ||||
#include "db.h" | #include "db.h" | ||||
#include "netbase.h" | #include "netbase.h" | ||||
#include "serialize.h" | #include "serialize.h" | ||||
#include "streams.h" | |||||
#include "uint256.h" | #include "uint256.h" | ||||
#include <algorithm> | #include <algorithm> | ||||
#define BITCOIN_SEED_NONCE 0x0539a019ca550825ULL | #define BITCOIN_SEED_NONCE 0x0539a019ca550825ULL | ||||
class CNode { | class CNode { | ||||
SOCKET sock; | SOCKET sock; | ||||
▲ Show 20 Lines • Show All 147 Lines • ▼ Show 20 Lines | class CNode { | ||||
} | } | ||||
bool ProcessMessages() { | bool ProcessMessages() { | ||||
if (vRecv.empty()) return false; | if (vRecv.empty()) return false; | ||||
do { | do { | ||||
CDataStream::iterator pstart = | CDataStream::iterator pstart = | ||||
search(vRecv.begin(), vRecv.end(), BEGIN(pchMessageStart), | search(vRecv.begin(), vRecv.end(), BEGIN(pchMessageStart), | ||||
END(pchMessageStart)); | END(pchMessageStart)); | ||||
int nHeaderSize = vRecv.GetSerializeSize(CMessageHeader()); | int nHeaderSize = GetSerializeSize( | ||||
CMessageHeader(), 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(), | ||||
Show All 21 Lines | bool ProcessMessages() { | ||||
if (vRecv.GetVersion() >= 209) { | if (vRecv.GetVersion() >= 209) { | ||||
uint256 hash = | uint256 hash = | ||||
Hash(vRecv.begin(), vRecv.begin() + nMessageSize); | Hash(vRecv.begin(), vRecv.begin() + nMessageSize); | ||||
unsigned int nChecksum = 0; | unsigned int nChecksum = 0; | ||||
memcpy(&nChecksum, &hash, sizeof(nChecksum)); | memcpy(&nChecksum, &hash, sizeof(nChecksum)); | ||||
if (nChecksum != hdr.nChecksum) continue; | if (nChecksum != hdr.nChecksum) continue; | ||||
} | } | ||||
CDataStream vMsg(vRecv.begin(), vRecv.begin() + nMessageSize, | CDataStream vMsg(vRecv.begin(), vRecv.begin() + nMessageSize, | ||||
vRecv.nType, vRecv.nVersion); | vRecv.GetType(), vRecv.GetVersion()); | ||||
vRecv.ignore(nMessageSize); | vRecv.ignore(nMessageSize); | ||||
if (ProcessMessage(strCommand, vMsg)) return true; | if (ProcessMessage(strCommand, vMsg)) return true; | ||||
// printf("%s: done processing %s\n", ToString(you).c_str(), | // printf("%s: done processing %s\n", ToString(you).c_str(), | ||||
// strCommand.c_str()); | // strCommand.c_str()); | ||||
} while (1); | } while (1); | ||||
return false; | return false; | ||||
} | } | ||||
public: | public: | ||||
CNode(const CService &ip, std::vector<CAddress> *vAddrIn) | CNode(const CService &ip, std::vector<CAddress> *vAddrIn) | ||||
: you(ip), nHeaderStart(-1), nMessageStart(-1), vAddr(vAddrIn), ban(0), | : vSend(SER_NETWORK, 0), vRecv(SER_NETWORK, 0), you(ip), | ||||
nHeaderStart(-1), nMessageStart(-1), vAddr(vAddrIn), ban(0), | |||||
doneAfter(0), nVersion(0) { | doneAfter(0), nVersion(0) { | ||||
vSend.SetType(SER_NETWORK); | |||||
vSend.SetVersion(0); | |||||
vRecv.SetType(SER_NETWORK); | |||||
vRecv.SetVersion(0); | |||||
if (time(nullptr) > 1329696000) { | if (time(nullptr) > 1329696000) { | ||||
vSend.SetVersion(209); | vSend.SetVersion(209); | ||||
vRecv.SetVersion(209); | vRecv.SetVersion(209); | ||||
} | } | ||||
} | } | ||||
bool Run() { | bool Run() { | ||||
bool res = true; | bool res = true; | ||||
if (!ConnectSocket(you, sock)) return false; | if (!ConnectSocket(you, sock)) return false; | ||||
PushVersion(); | PushVersion(); | ||||
Send(); | Send(); | ||||
int64_t now; | int64_t now; | ||||
while (now = time(nullptr), ban == 0 && | while (now = time(nullptr), ban == 0 && | ||||
(doneAfter == 0 || doneAfter > now) && | (doneAfter == 0 || doneAfter > now) && | ||||
▲ Show 20 Lines • Show All 85 Lines • Show Last 20 Lines |