Changeset View
Changeset View
Standalone View
Standalone View
src/seeder/messagewriter.h
- This file was added.
// Copyright (c) 2020 The Bitcoin developers | |||||
// Distributed under the MIT software license, see the accompanying | |||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | |||||
#ifndef BITCOIN_SEEDER_MESSAGEWRITER_H | |||||
#define BITCOIN_SEEDER_MESSAGEWRITER_H | |||||
#include <net.h> | |||||
#include <netmessagemaker.h> | |||||
template <typename... Args> | |||||
static CDataStream WriteMessage(int version, std::string command, | |||||
CMessageHeader::MessageMagic netmagic, | |||||
Args &&... args) { | |||||
CSerializedNetMsg payload = | |||||
CNetMsgMaker(version).Make(command, std::forward<Args>(args)...); | |||||
size_t nMessageSize = payload.data.size(); | |||||
// Create header | |||||
std::vector<uint8_t> serializedHeader; | |||||
serializedHeader.reserve(CMessageHeader::HEADER_SIZE); | |||||
uint256 hash = | |||||
Hash(payload.data.data(), payload.data.data() + nMessageSize); | |||||
CMessageHeader hdr(netmagic, payload.command.c_str(), nMessageSize); | |||||
memcpy(hdr.pchChecksum, hash.begin(), CMessageHeader::CHECKSUM_SIZE); | |||||
CVectorWriter{SER_NETWORK, INIT_PROTO_VERSION, serializedHeader, 0, hdr}; | |||||
// Combine header and payload | |||||
std::vector<uint8_t> sendMsg; | |||||
sendMsg.insert(sendMsg.end(), serializedHeader.begin(), | |||||
serializedHeader.end()); | |||||
if (nMessageSize) { | |||||
sendMsg.insert(sendMsg.end(), payload.data.begin(), payload.data.end()); | |||||
} | |||||
return CDataStream(sendMsg, SER_NETWORK, version); | |||||
} | |||||
#endif // BITCOIN_SEEDER_MESSAGEWRITER_H |