From a5d7aff867a3df9ac77664deed03e930e2636db0 Mon Sep 17 00:00:00 2001 From: Jadi Date: Thu, 23 May 2024 17:41:45 +0330 Subject: [PATCH] net: Providing an interface for mapLocalHost Contributes to #564 by providing an interface for mapLocalHost through net -> node interface -> clientModel. Later this value can be read by GUI to show the local addresses. --- src/interfaces/node.h | 3 +++ src/net.cpp | 7 +++++++ src/net.h | 1 + src/node/interfaces.cpp | 7 +++++++ src/qt/clientmodel.cpp | 7 +++++++ src/qt/clientmodel.h | 4 ++++ 6 files changed, 29 insertions(+) diff --git a/src/interfaces/node.h b/src/interfaces/node.h index aeb2612c078..747ff033e40 100644 --- a/src/interfaces/node.h +++ b/src/interfaces/node.h @@ -168,6 +168,9 @@ public: //! Get num blocks. virtual int getNumBlocks() = 0; + //! Get network local addresses. + virtual std::map getNetLocalAddresses() = 0; + //! Get best block hash. virtual uint256 getBestBlockHash() = 0; diff --git a/src/net.cpp b/src/net.cpp index f05b517dd23..24095adcf43 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -3533,6 +3533,13 @@ size_t CConnman::GetNodeCount(ConnectionDirection flags) const return nNum; } + +std::map CConnman::getNetLocalAddresses() const +{ + LOCK(g_maplocalhost_mutex); + return mapLocalHost; +} + uint32_t CConnman::GetMappedAS(const CNetAddr& addr) const { return m_netgroupman.GetMappedAS(addr); diff --git a/src/net.h b/src/net.h index 8075975d620..6f92eda2d82 100644 --- a/src/net.h +++ b/src/net.h @@ -1205,6 +1205,7 @@ public: bool AddConnection(const std::string& address, ConnectionType conn_type, bool use_v2transport) EXCLUSIVE_LOCKS_REQUIRED(!m_unused_i2p_sessions_mutex); size_t GetNodeCount(ConnectionDirection) const; + std::map getNetLocalAddresses() const; uint32_t GetMappedAS(const CNetAddr& addr) const; void GetNodeStats(std::vector& vstats) const; bool DisconnectNode(const std::string& node); diff --git a/src/node/interfaces.cpp b/src/node/interfaces.cpp index 216f44ab9e4..1610d7c3d0b 100644 --- a/src/node/interfaces.cpp +++ b/src/node/interfaces.cpp @@ -281,6 +281,13 @@ public: } return false; } + std::map getNetLocalAddresses() override + { + if (m_context->connman) + return m_context->connman->getNetLocalAddresses(); + else + return {}; + } int getNumBlocks() override { LOCK(::cs_main); diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 2f3bad37e6a..036a66c16eb 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -123,6 +123,13 @@ int64_t ClientModel::getHeaderTipTime() const return cachedBestHeaderTime; } + +std::map ClientModel::getNetLocalAddresses() const +{ + return m_node.getNetLocalAddresses(); +} + + int ClientModel::getNumBlocks() const { if (m_cached_num_blocks == -1) { diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index 624056b5df9..3252f4af768 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -13,12 +13,15 @@ #include #include +#include + class BanTableModel; class CBlockIndex; class OptionsModel; class PeerTableModel; class PeerTableSortProxy; enum class SynchronizationState; +struct LocalServiceInfo; namespace interfaces { class Handler; @@ -68,6 +71,7 @@ public: //! Return number of connections, default is in- and outbound (total) int getNumConnections(unsigned int flags = CONNECTIONS_ALL) const; + std::map getNetLocalAddresses() const; int getNumBlocks() const; uint256 getBestBlockHash() EXCLUSIVE_LOCKS_REQUIRED(!m_cached_tip_mutex); int getHeaderTipHeight() const;