diff options
author | MarcoFalke <falke.marco@gmail.com> | 2021-01-08 15:14:33 +0100 |
---|---|---|
committer | MarcoFalke <falke.marco@gmail.com> | 2021-01-08 15:14:53 +0100 |
commit | 9158d6f34153dc937e109d0e7486e956a26f20aa (patch) | |
tree | afa58ad48fe854ac6d9fb5947e9cd5b702b432c6 | |
parent | 1e078f17b5dc94fae329b38057512994532a32de (diff) | |
parent | faecb74562d012a336837d3b39572c235ad2eb9d (diff) |
Merge #20786: net: [refactor] Prefer integral types in CNodeStats
faecb74562d012a336837d3b39572c235ad2eb9d Expose integral m_conn_type in CNodeStats, remove m_conn_type_string (Jon Atack)
Pull request description:
Currently, strings are stored for what are actually integral (strong) enum types. This is fine, because the strings are only used as-is for the debug log and RPC. However, it complicates using them in the GUI. User facing strings in the GUI should be translated and only string literals can be picked up for translation, not runtime `std::string`s.
Fix that by removing the `std::string` members and replace them by strong enum integral types.
ACKs for top commit:
jonatack:
Code review ACK faecb74562d012a336837d3b39572c235ad2eb9d
theStack:
Code review ACK faecb74562d012a336837d3b39572c235ad2eb9d 🌲
Tree-SHA512: 24df2bd0645432060e393eb44b8abaf20fe296457d07a867b0e735c3e2e75af7b03fc6bfeca734ec33ab816a7c8e1f8591a5ec342f3afe3098a4e41f5c2cfebb
-rw-r--r-- | src/net.cpp | 6 | ||||
-rw-r--r-- | src/net.h | 7 | ||||
-rw-r--r-- | src/rpc/net.cpp | 2 |
3 files changed, 8 insertions, 7 deletions
diff --git a/src/net.cpp b/src/net.cpp index 6e5a271945..31960664e3 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -498,9 +498,9 @@ void CConnman::AddWhitelistPermissionFlags(NetPermissionFlags& flags, const CNet } } -std::string CNode::ConnectionTypeAsString() const +std::string ConnectionTypeAsString(ConnectionType conn_type) { - switch (m_conn_type) { + switch (conn_type) { case ConnectionType::INBOUND: return "inbound"; case ConnectionType::MANUAL: @@ -618,7 +618,7 @@ void CNode::copyStats(CNodeStats &stats, const std::vector<bool> &m_asmap) CService addrLocalUnlocked = GetAddrLocal(); stats.addrLocal = addrLocalUnlocked.IsValid() ? addrLocalUnlocked.ToString() : ""; - stats.m_conn_type_string = ConnectionTypeAsString(); + X(m_conn_type); } #undef X @@ -174,6 +174,8 @@ enum class ConnectionType { ADDR_FETCH, }; +/** Convert ConnectionType enum to a string value */ +std::string ConnectionTypeAsString(ConnectionType conn_type); void Discover(); uint16_t GetListenPort(); @@ -264,11 +266,10 @@ public: // Network the peer connected through Network m_network; uint32_t m_mapped_as; - std::string m_conn_type_string; + ConnectionType m_conn_type; }; - /** Transport protocol agnostic message container. * Ideally it should only contain receive time, payload, * command and size. @@ -756,7 +757,7 @@ public: //! Sets the addrName only if it was not previously set void MaybeSetAddrName(const std::string& addrNameIn); - std::string ConnectionTypeAsString() const; + std::string ConnectionTypeAsString() const { return ::ConnectionTypeAsString(m_conn_type); } /** Whether this peer is an inbound onion, e.g. connected via our Tor onion service. */ bool IsInboundOnion() const { return m_inbound_onion; } diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index 89ddfb35cb..ddbd7e9142 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -249,7 +249,7 @@ static RPCHelpMan getpeerinfo() recvPerMsgCmd.pushKV(i.first, i.second); } obj.pushKV("bytesrecv_per_msg", recvPerMsgCmd); - obj.pushKV("connection_type", stats.m_conn_type_string); + obj.pushKV("connection_type", ConnectionTypeAsString(stats.m_conn_type)); ret.push_back(obj); } |