Skip to content

Commit fb2c5ed

Browse files
committed
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.
1 parent 0de48fe commit fb2c5ed

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

src/net.cpp

+12-3
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,15 @@ bool CNode::ReceiveMsgBytes(Span<const uint8_t> msg_bytes, bool& complete)
717717
return true;
718718
}
719719

720+
V1Transport::V1Transport(const NodeId node_id, int nTypeIn, int nVersionIn) noexcept :
721+
m_node_id(node_id), hdrbuf(nTypeIn, nVersionIn), vRecv(nTypeIn, nVersionIn)
722+
{
723+
assert(std::size(Params().MessageStart()) == std::size(m_magic_bytes));
724+
std::copy(std::begin(Params().MessageStart()), std::end(Params().MessageStart()), m_magic_bytes);
725+
LOCK(m_recv_mutex);
726+
Reset();
727+
}
728+
720729
int V1Transport::readHeader(Span<const uint8_t> msg_bytes)
721730
{
722731
AssertLockHeld(m_recv_mutex);
@@ -741,7 +750,7 @@ int V1Transport::readHeader(Span<const uint8_t> msg_bytes)
741750
}
742751

743752
// Check start string, network magic
744-
if (memcmp(hdr.pchMessageStart, m_chain_params.MessageStart(), CMessageHeader::MESSAGE_START_SIZE) != 0) {
753+
if (memcmp(hdr.pchMessageStart, m_magic_bytes, CMessageHeader::MESSAGE_START_SIZE) != 0) {
745754
LogPrint(BCLog::NET, "Header error: Wrong MessageStart %s received, peer=%d\n", HexStr(hdr.pchMessageStart), m_node_id);
746755
return -1;
747756
}
@@ -835,7 +844,7 @@ bool V1Transport::SetMessageToSend(CSerializedNetMsg& msg) noexcept
835844
uint256 hash = Hash(msg.data);
836845

837846
// create header
838-
CMessageHeader hdr(Params().MessageStart(), msg.m_type.c_str(), msg.data.size());
847+
CMessageHeader hdr(m_magic_bytes, msg.m_type.c_str(), msg.data.size());
839848
memcpy(hdr.pchChecksum, hash.begin(), CMessageHeader::CHECKSUM_SIZE);
840849

841850
// serialize header
@@ -2874,7 +2883,7 @@ CNode::CNode(NodeId idIn,
28742883
ConnectionType conn_type_in,
28752884
bool inbound_onion,
28762885
CNodeOptions&& node_opts)
2877-
: m_transport{std::make_unique<V1Transport>(Params(), idIn, SER_NETWORK, INIT_PROTO_VERSION)},
2886+
: m_transport{std::make_unique<V1Transport>(idIn, SER_NETWORK, INIT_PROTO_VERSION)},
28782887
m_permission_flags{node_opts.permission_flags},
28792888
m_sock{sock},
28802889
m_connected{GetTime<std::chrono::seconds>()},

src/net.h

+2-10
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ class Transport {
318318
class V1Transport final : public Transport
319319
{
320320
private:
321-
const CChainParams& m_chain_params;
321+
CMessageHeader::MessageStartChars m_magic_bytes;
322322
const NodeId m_node_id; // Only for logging
323323
mutable Mutex m_recv_mutex; //!< Lock for receive state
324324
mutable CHash256 hasher GUARDED_BY(m_recv_mutex);
@@ -365,15 +365,7 @@ class V1Transport final : public Transport
365365
size_t m_bytes_sent GUARDED_BY(m_send_mutex) {0};
366366

367367
public:
368-
V1Transport(const CChainParams& chain_params, const NodeId node_id, int nTypeIn, int nVersionIn)
369-
: m_chain_params(chain_params),
370-
m_node_id(node_id),
371-
hdrbuf(nTypeIn, nVersionIn),
372-
vRecv(nTypeIn, nVersionIn)
373-
{
374-
LOCK(m_recv_mutex);
375-
Reset();
376-
}
368+
V1Transport(const NodeId node_id, int nTypeIn, int nVersionIn) noexcept;
377369

378370
bool ReceivedMessageComplete() const override EXCLUSIVE_LOCKS_REQUIRED(!m_recv_mutex)
379371
{

src/test/fuzz/p2p_transport_serialization.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ void initialize_p2p_transport_serialization()
2525
FUZZ_TARGET(p2p_transport_serialization, .init = initialize_p2p_transport_serialization)
2626
{
2727
// Construct transports for both sides, with dummy NodeIds.
28-
V1Transport recv_transport{Params(), NodeId{0}, SER_NETWORK, INIT_PROTO_VERSION};
29-
V1Transport send_transport{Params(), NodeId{1}, SER_NETWORK, INIT_PROTO_VERSION};
28+
V1Transport recv_transport{NodeId{0}, SER_NETWORK, INIT_PROTO_VERSION};
29+
V1Transport send_transport{NodeId{1}, SER_NETWORK, INIT_PROTO_VERSION};
3030

3131
FuzzedDataProvider fuzzed_data_provider{buffer.data(), buffer.size()};
3232

0 commit comments

Comments
 (0)