What changed, and why it matters
This commit is a small internal cleanup: it reads the '-capturemessages' debug/logging setting once at startup and stores it in a class member, instead of looking it up from global command-line arguments every time a message is sent. It also adds a test helper to set the flag directly. There is no security fix here and no behavior change visible to users.
No security action needed. Treat as a normal code-quality/refactor commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The change caches the boolean value of the ‘-capturemessages’ argument in CConnman::Options and copies it into CConnman::m_capture_messages during Init(). PushMessage() now checks the cached member rather than calling gArgs.GetBoolArg() on the hot path. A setter SetCaptureMessages() is exposed for unit tests, and net_tests.cpp is updated to use it. This is a performance/maintainability refactor with no functional or security impact.
Changed components
src/init.cppsrc/net.cppsrc/net.hsrc/test/net_tests.cppInspect captured patch +14 / −3
diff --git a/src/init.cpp b/src/init.cpp
index bfb9483a..4acd729b 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -2043,6 +2043,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
connOptions.m_peer_connect_timeout = peer_connect_timeout;
connOptions.whitelist_forcerelay = args.GetBoolArg("-whitelistforcerelay", DEFAULT_WHITELISTFORCERELAY);
connOptions.whitelist_relay = args.GetBoolArg("-whitelistrelay", DEFAULT_WHITELISTRELAY);
+ connOptions.m_capture_messages = args.GetBoolArg("-capturemessages", false);
// Port to bind to if `-bind=addr` is provided without a `:port` suffix.
const uint16_t default_bind_port =
diff --git a/src/net.cpp b/src/net.cpp
index a6e115b2..faa6710d 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -3901,7 +3901,7 @@ void CConnman::PushMessage(CNode* pnode, CSerializedNetMsg&& msg)
AssertLockNotHeld(m_total_bytes_sent_mutex);
size_t nMessageSize = msg.data.size();
LogDebug(BCLog::NET, "sending %s (%d bytes) peer=%d\n", msg.m_type, nMessageSize, pnode->GetId());
- if (gArgs.GetBoolArg("-capturemessages", false)) {
+ if (m_capture_messages) {
CaptureMessage(pnode->addr, msg.m_type, msg.data, /*is_incoming=*/false);
}
diff --git a/src/net.h b/src/net.h
index 387a8c06..eedfdfaf 100644
--- a/src/net.h
+++ b/src/net.h
@@ -1086,6 +1086,7 @@ public:
bool m_i2p_accept_incoming;
bool whitelist_forcerelay = DEFAULT_WHITELISTFORCERELAY;
bool whitelist_relay = DEFAULT_WHITELISTRELAY;
+ bool m_capture_messages = false;
};
void Init(const Options& connOptions) EXCLUSIVE_LOCKS_REQUIRED(!m_added_nodes_mutex, !m_total_bytes_sent_mutex)
@@ -1123,8 +1124,12 @@ public:
m_onion_binds = connOptions.onion_binds;
whitelist_forcerelay = connOptions.whitelist_forcerelay;
whitelist_relay = connOptions.whitelist_relay;
+ m_capture_messages = connOptions.m_capture_messages;
}
+ // test only
+ void SetCaptureMessages(bool cap) { m_capture_messages = cap; }
+
CConnman(uint64_t seed0,
uint64_t seed1,
AddrMan& addrman,
@@ -1666,6 +1671,11 @@ private:
*/
bool whitelist_relay;
+ /**
+ * flag for whether messages are captured
+ */
+ bool m_capture_messages{false};
+
/**
* Mutex protecting m_i2p_sam_sessions.
*/
diff --git a/src/test/net_tests.cpp b/src/test/net_tests.cpp
index a2ff9a10..aea29169 100644
--- a/src/test/net_tests.cpp
+++ b/src/test/net_tests.cpp
@@ -814,7 +814,7 @@ BOOST_AUTO_TEST_CASE(initial_advertise_from_version_message)
// Pretend that we bound to this port.
const uint16_t bind_port = 20001;
m_node.args->ForceSetArg("-bind", strprintf("3.4.5.6:%u", bind_port));
- m_node.args->ForceSetArg("-capturemessages", "1");
+ m_node.connman->SetCaptureMessages(true);
// Our address:port as seen from the peer - 2.3.4.5:20002 (different from the above).
in_addr peer_us_addr;
@@ -892,7 +892,7 @@ BOOST_AUTO_TEST_CASE(initial_advertise_from_version_message)
CaptureMessage = CaptureMessageOrig;
chainman.ResetIbd();
- m_node.args->ForceSetArg("-capturemessages", "0");
+ m_node.connman->SetCaptureMessages(false);
m_node.args->ForceSetArg("-bind", "");
}
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.