TARAXA
Loading...
Searching...
No Matches
peers_state.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "common/util.hpp"
4#include "config/config.hpp"
5#include "libp2p/Common.h"
6#include "libp2p/Host.h"
10
11namespace taraxa {
12class PbftManager;
13}
14
16
22 public:
23 using PeersMap = std::unordered_map<dev::p2p::NodeID, std::shared_ptr<TaraxaPeer>>;
24
25 PeersState(std::weak_ptr<dev::p2p::Host> host, const FullNodeConfig& conf);
26
27 std::shared_ptr<TaraxaPeer> getPeer(const dev::p2p::NodeID& node_id) const;
28 std::shared_ptr<TaraxaPeer> getPendingPeer(const dev::p2p::NodeID& node_id) const;
29
37 std::pair<std::shared_ptr<TaraxaPeer>, std::string> getPacketSenderPeer(const dev::p2p::NodeID& node_id,
38 SubprotocolPacketType packet_type) const;
39
40 PeersMap getAllPeers() const;
41 std::vector<dev::p2p::NodeID> getAllPendingPeersIDs() const;
42 size_t getPeersCount() const;
43 std::shared_ptr<TaraxaPeer> addPendingPeer(const dev::p2p::NodeID& node_id, const std::string& address);
44 void erasePeer(const dev::p2p::NodeID& node_id);
45 std::shared_ptr<TaraxaPeer> setPeerAsReadyToSendMessages(dev::p2p::NodeID const& node_id,
46 std::shared_ptr<TaraxaPeer> peer);
47
52 void set_peer_malicious(const dev::p2p::NodeID& peer_id);
53
58 bool is_peer_malicious(const dev::p2p::NodeID& peer_id);
59
65
70 std::shared_ptr<TaraxaPeer> getMaxChainPeer(
71 const std::shared_ptr<PbftManager> pbft_mgr, std::function<bool(const std::shared_ptr<TaraxaPeer>&)> filter_func =
72 [](const std::shared_ptr<TaraxaPeer>&) { return true; });
73
74 private:
79 void disconnectPeer(const dev::p2p::NodeID& id);
80
81 public:
82 const std::weak_ptr<dev::p2p::Host> host_;
83
84 private:
85 mutable std::shared_mutex peers_mutex_;
88
91};
92
93} // namespace taraxa::network::tarcap
Definition util.hpp:486
PeersState contains common members and functions related to peers, host, etc... that are shared among...
Definition peers_state.hpp:21
void erasePeer(const dev::p2p::NodeID &node_id)
Definition peers_state.cpp:93
std::shared_ptr< TaraxaPeer > getMaxChainPeer(const std::shared_ptr< PbftManager > pbft_mgr, std::function< bool(const std::shared_ptr< TaraxaPeer > &)> filter_func=[](const std::shared_ptr< TaraxaPeer > &) { return true;})
Definition peers_state.cpp:153
std::shared_ptr< TaraxaPeer > getPeer(const dev::p2p::NodeID &node_id) const
Definition peers_state.cpp:10
std::shared_mutex peers_mutex_
Definition peers_state.hpp:85
void set_peer_malicious(const dev::p2p::NodeID &peer_id)
Marks peer as malicious.
Definition peers_state.cpp:111
const std::weak_ptr< dev::p2p::Host > host_
Definition peers_state.hpp:82
PeersMap pending_peers_
Definition peers_state.hpp:87
std::shared_ptr< TaraxaPeer > addPendingPeer(const dev::p2p::NodeID &node_id, const std::string &address)
Definition peers_state.cpp:76
ThreadSafeMap< dev::p2p::NodeID, std::chrono::steady_clock::time_point > malicious_peers_
Definition peers_state.hpp:89
bool is_peer_malicious(const dev::p2p::NodeID &peer_id)
Checks if peer is in malicious peers list.
Definition peers_state.cpp:115
std::pair< std::shared_ptr< TaraxaPeer >, std::string > getPacketSenderPeer(const dev::p2p::NodeID &node_id, SubprotocolPacketType packet_type) const
Get known peer based on packet sender and packet type. For StatusPacket peer can be obtained from pen...
Definition peers_state.cpp:32
const FullNodeConfig kConf
Definition peers_state.hpp:90
void handleMaliciousSyncPeer(const dev::p2p::NodeID &id)
Handle malicious peer.
Definition peers_state.cpp:142
std::shared_ptr< TaraxaPeer > getPendingPeer(const dev::p2p::NodeID &node_id) const
Definition peers_state.cpp:21
void disconnectPeer(const dev::p2p::NodeID &id)
Disconnect peer.
Definition peers_state.cpp:147
PeersMap getAllPeers() const
Definition peers_state.cpp:71
PeersMap peers_
Definition peers_state.hpp:86
std::vector< dev::p2p::NodeID > getAllPendingPeersIDs() const
Definition peers_state.cpp:60
std::shared_ptr< TaraxaPeer > setPeerAsReadyToSendMessages(dev::p2p::NodeID const &node_id, std::shared_ptr< TaraxaPeer > peer)
Definition peers_state.cpp:99
std::unordered_map< dev::p2p::NodeID, std::shared_ptr< TaraxaPeer > > PeersMap
Definition peers_state.hpp:23
size_t getPeersCount() const
Definition peers_state.cpp:87
Definition vote_manager.hpp:23
SubprotocolPacketType
SubprotocolPacketType is used in networking layer to differentiate packet types.
Definition packet_types.hpp:12
Definition app.hpp:16
Definition config.hpp:40