mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-05 14:06:27 -05:00
net: make V1Transport implicitly use current chainparams
The rest of net.cpp already uses Params() to determine chainparams in many places (and even V1Transport itself does so in some places). Since the only chainparams dependency is through the message start characters, just store those directly in the transport.
This commit is contained in:
parent
0de48fe858
commit
fb2c5edb79
3 changed files with 16 additions and 15 deletions
15
src/net.cpp
15
src/net.cpp
|
@ -717,6 +717,15 @@ bool CNode::ReceiveMsgBytes(Span<const uint8_t> msg_bytes, bool& complete)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
V1Transport::V1Transport(const NodeId node_id, int nTypeIn, int nVersionIn) noexcept :
|
||||||
|
m_node_id(node_id), hdrbuf(nTypeIn, nVersionIn), vRecv(nTypeIn, nVersionIn)
|
||||||
|
{
|
||||||
|
assert(std::size(Params().MessageStart()) == std::size(m_magic_bytes));
|
||||||
|
std::copy(std::begin(Params().MessageStart()), std::end(Params().MessageStart()), m_magic_bytes);
|
||||||
|
LOCK(m_recv_mutex);
|
||||||
|
Reset();
|
||||||
|
}
|
||||||
|
|
||||||
int V1Transport::readHeader(Span<const uint8_t> msg_bytes)
|
int V1Transport::readHeader(Span<const uint8_t> msg_bytes)
|
||||||
{
|
{
|
||||||
AssertLockHeld(m_recv_mutex);
|
AssertLockHeld(m_recv_mutex);
|
||||||
|
@ -741,7 +750,7 @@ int V1Transport::readHeader(Span<const uint8_t> msg_bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check start string, network magic
|
// Check start string, network magic
|
||||||
if (memcmp(hdr.pchMessageStart, m_chain_params.MessageStart(), CMessageHeader::MESSAGE_START_SIZE) != 0) {
|
if (memcmp(hdr.pchMessageStart, m_magic_bytes, CMessageHeader::MESSAGE_START_SIZE) != 0) {
|
||||||
LogPrint(BCLog::NET, "Header error: Wrong MessageStart %s received, peer=%d\n", HexStr(hdr.pchMessageStart), m_node_id);
|
LogPrint(BCLog::NET, "Header error: Wrong MessageStart %s received, peer=%d\n", HexStr(hdr.pchMessageStart), m_node_id);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -835,7 +844,7 @@ bool V1Transport::SetMessageToSend(CSerializedNetMsg& msg) noexcept
|
||||||
uint256 hash = Hash(msg.data);
|
uint256 hash = Hash(msg.data);
|
||||||
|
|
||||||
// create header
|
// create header
|
||||||
CMessageHeader hdr(Params().MessageStart(), msg.m_type.c_str(), msg.data.size());
|
CMessageHeader hdr(m_magic_bytes, msg.m_type.c_str(), msg.data.size());
|
||||||
memcpy(hdr.pchChecksum, hash.begin(), CMessageHeader::CHECKSUM_SIZE);
|
memcpy(hdr.pchChecksum, hash.begin(), CMessageHeader::CHECKSUM_SIZE);
|
||||||
|
|
||||||
// serialize header
|
// serialize header
|
||||||
|
@ -2874,7 +2883,7 @@ CNode::CNode(NodeId idIn,
|
||||||
ConnectionType conn_type_in,
|
ConnectionType conn_type_in,
|
||||||
bool inbound_onion,
|
bool inbound_onion,
|
||||||
CNodeOptions&& node_opts)
|
CNodeOptions&& node_opts)
|
||||||
: m_transport{std::make_unique<V1Transport>(Params(), idIn, SER_NETWORK, INIT_PROTO_VERSION)},
|
: m_transport{std::make_unique<V1Transport>(idIn, SER_NETWORK, INIT_PROTO_VERSION)},
|
||||||
m_permission_flags{node_opts.permission_flags},
|
m_permission_flags{node_opts.permission_flags},
|
||||||
m_sock{sock},
|
m_sock{sock},
|
||||||
m_connected{GetTime<std::chrono::seconds>()},
|
m_connected{GetTime<std::chrono::seconds>()},
|
||||||
|
|
12
src/net.h
12
src/net.h
|
@ -318,7 +318,7 @@ public:
|
||||||
class V1Transport final : public Transport
|
class V1Transport final : public Transport
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
const CChainParams& m_chain_params;
|
CMessageHeader::MessageStartChars m_magic_bytes;
|
||||||
const NodeId m_node_id; // Only for logging
|
const NodeId m_node_id; // Only for logging
|
||||||
mutable Mutex m_recv_mutex; //!< Lock for receive state
|
mutable Mutex m_recv_mutex; //!< Lock for receive state
|
||||||
mutable CHash256 hasher GUARDED_BY(m_recv_mutex);
|
mutable CHash256 hasher GUARDED_BY(m_recv_mutex);
|
||||||
|
@ -365,15 +365,7 @@ private:
|
||||||
size_t m_bytes_sent GUARDED_BY(m_send_mutex) {0};
|
size_t m_bytes_sent GUARDED_BY(m_send_mutex) {0};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
V1Transport(const CChainParams& chain_params, const NodeId node_id, int nTypeIn, int nVersionIn)
|
V1Transport(const NodeId node_id, int nTypeIn, int nVersionIn) noexcept;
|
||||||
: m_chain_params(chain_params),
|
|
||||||
m_node_id(node_id),
|
|
||||||
hdrbuf(nTypeIn, nVersionIn),
|
|
||||||
vRecv(nTypeIn, nVersionIn)
|
|
||||||
{
|
|
||||||
LOCK(m_recv_mutex);
|
|
||||||
Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ReceivedMessageComplete() const override EXCLUSIVE_LOCKS_REQUIRED(!m_recv_mutex)
|
bool ReceivedMessageComplete() const override EXCLUSIVE_LOCKS_REQUIRED(!m_recv_mutex)
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,8 +25,8 @@ void initialize_p2p_transport_serialization()
|
||||||
FUZZ_TARGET(p2p_transport_serialization, .init = initialize_p2p_transport_serialization)
|
FUZZ_TARGET(p2p_transport_serialization, .init = initialize_p2p_transport_serialization)
|
||||||
{
|
{
|
||||||
// Construct transports for both sides, with dummy NodeIds.
|
// Construct transports for both sides, with dummy NodeIds.
|
||||||
V1Transport recv_transport{Params(), NodeId{0}, SER_NETWORK, INIT_PROTO_VERSION};
|
V1Transport recv_transport{NodeId{0}, SER_NETWORK, INIT_PROTO_VERSION};
|
||||||
V1Transport send_transport{Params(), NodeId{1}, SER_NETWORK, INIT_PROTO_VERSION};
|
V1Transport send_transport{NodeId{1}, SER_NETWORK, INIT_PROTO_VERSION};
|
||||||
|
|
||||||
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue