diff --git a/modules/ripple_app/ripple_app.cpp b/modules/ripple_app/ripple_app.cpp index 65f2e3327f..e8c622c5cb 100644 --- a/modules/ripple_app/ripple_app.cpp +++ b/modules/ripple_app/ripple_app.cpp @@ -119,6 +119,7 @@ namespace ripple #include "src/cpp/ripple/ripple_Peer.h" // VFALCO TODO Rename to IPeer #include "src/cpp/ripple/ripple_IPeers.h" #include "src/cpp/ripple/ripple_IProofOfWorkFactory.h" +#include "src/cpp/ripple/ripple_ClusterNodeStatus.h" #include "src/cpp/ripple/ripple_UniqueNodeList.h" #include "src/cpp/ripple/ripple_IValidations.h" #include "src/cpp/ripple/ripple_PeerSet.h" @@ -174,7 +175,6 @@ namespace ripple #include "src/cpp/ripple/ripple_RippleState.h" #include "src/cpp/ripple/SerializedValidation.h" #include "src/cpp/ripple/AccountSetTransactor.h" -#include "src/cpp/ripple/ripple_ClusterNodeStatus.h" #include "src/cpp/ripple/TrustSetTransactor.h" #include "src/cpp/ripple/WSConnection.h" #include "src/cpp/ripple/ripple_WSHandler.h" diff --git a/src/cpp/ripple/ripple_ClusterNodeStatus.h b/src/cpp/ripple/ripple_ClusterNodeStatus.h index 87fb2b4e00..da2465650c 100644 --- a/src/cpp/ripple/ripple_ClusterNodeStatus.h +++ b/src/cpp/ripple/ripple_ClusterNodeStatus.h @@ -8,6 +8,9 @@ class ClusterNodeStatus { public: + ClusterNodeStatus() : mSeq(0), mLoadFee(0), mReportTime(0) + { ; } + ClusterNodeStatus(std::string const& name) : mNodeName(name), mSeq(0), mLoadFee(0), mReportTime(0) { ; } @@ -30,8 +33,8 @@ public: uint32 getLoadFee() { - return mLoadFee; - } + return mLoadFee; + } uint32 getReportTime() { diff --git a/src/cpp/ripple/ripple_Peer.cpp b/src/cpp/ripple/ripple_Peer.cpp index d346dbb9ae..8e464ab4ab 100644 --- a/src/cpp/ripple/ripple_Peer.cpp +++ b/src/cpp/ripple/ripple_Peer.cpp @@ -1420,7 +1420,18 @@ void PeerImp::recvValidation (const boost::shared_ptr& p void PeerImp::recvCluster (protocol::TMCluster& packet) { - // WRITEME + if (!mCluster) + { + applyLoadCharge(LT_UnwantedData); + return; + } + for (int i = 0; i < packet.clusternodes().size(); ++i) + { + protocol::TMClusterNode const& node = packet.clusternodes(i); + + // Extract RippleAddress and build ClusterNodeStatus + // WRITEME + } } void PeerImp::recvGetValidation (protocol::TMGetValidations& packet) diff --git a/src/cpp/ripple/ripple_UniqueNodeList.cpp b/src/cpp/ripple/ripple_UniqueNodeList.cpp index 1d449682a0..68db3b3979 100644 --- a/src/cpp/ripple/ripple_UniqueNodeList.cpp +++ b/src/cpp/ripple/ripple_UniqueNodeList.cpp @@ -322,6 +322,26 @@ public: //-------------------------------------------------------------------------- + void nodeUpdate (const RippleAddress& naNodePublic, ClusterNodeStatus const& cnsStatus) + { + boost::recursive_mutex::scoped_lock sl (mUNLLock); + m_clusterNodes[naNodePublic].update(cnsStatus); + } + + //-------------------------------------------------------------------------- + + std::map getClusterStatus () + { + std::map ret; + { + boost::recursive_mutex::scoped_lock sl (mUNLLock); + ret = m_clusterNodes; + } + return ret; + } + + //-------------------------------------------------------------------------- + void nodeBootstrap () { int iDomains = 0; diff --git a/src/cpp/ripple/ripple_UniqueNodeList.h b/src/cpp/ripple/ripple_UniqueNodeList.h index 5480b27f3a..32b2158d8d 100644 --- a/src/cpp/ripple/ripple_UniqueNodeList.h +++ b/src/cpp/ripple/ripple_UniqueNodeList.h @@ -45,6 +45,8 @@ public: virtual bool nodeInUNL (const RippleAddress& naNodePublic) = 0; virtual bool nodeInCluster (const RippleAddress& naNodePublic) = 0; virtual bool nodeInCluster (const RippleAddress& naNodePublic, std::string& name) = 0; + virtual void nodeUpdate (const RippleAddress& naNodePublic, ClusterNodeStatus const& cnsStatus) = 0; + virtual std::map getClusterStatus () = 0; virtual void nodeBootstrap () = 0; virtual bool nodeLoad (boost::filesystem::path pConfig) = 0;