TARAXA
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 
11 namespace taraxa::network::tarcap {
12 
17 class PeersState {
18  public:
19  using PeersMap = std::unordered_map<dev::p2p::NodeID, std::shared_ptr<TaraxaPeer>>;
20 
21  PeersState(std::weak_ptr<dev::p2p::Host> host, const FullNodeConfig& conf);
22 
23  std::shared_ptr<TaraxaPeer> getPeer(const dev::p2p::NodeID& node_id) const;
24  std::shared_ptr<TaraxaPeer> getPendingPeer(const dev::p2p::NodeID& node_id) const;
25 
33  std::pair<std::shared_ptr<TaraxaPeer>, std::string> getPacketSenderPeer(const dev::p2p::NodeID& node_id,
34  SubprotocolPacketType packet_type) const;
35 
36  PeersMap getAllPeers() const;
37  std::vector<dev::p2p::NodeID> getAllPendingPeersIDs() const;
38  size_t getPeersCount() const;
39  std::shared_ptr<TaraxaPeer> addPendingPeer(const dev::p2p::NodeID& node_id, const std::string& address);
40  void erasePeer(const dev::p2p::NodeID& node_id);
41  std::shared_ptr<TaraxaPeer> setPeerAsReadyToSendMessages(dev::p2p::NodeID const& node_id,
42  std::shared_ptr<TaraxaPeer> peer);
43 
48  void set_peer_malicious(const dev::p2p::NodeID& peer_id);
49 
54  bool is_peer_malicious(const dev::p2p::NodeID& peer_id);
55 
56  public:
57  const std::weak_ptr<dev::p2p::Host> host_;
58 
59  private:
60  mutable std::shared_mutex peers_mutex_;
63 
66 };
67 
68 } // 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:17
void erasePeer(const dev::p2p::NodeID &node_id)
Definition: peers_state.cpp:91
std::shared_ptr< TaraxaPeer > getPeer(const dev::p2p::NodeID &node_id) const
Definition: peers_state.cpp:8
std::shared_mutex peers_mutex_
Definition: peers_state.hpp:60
void set_peer_malicious(const dev::p2p::NodeID &peer_id)
Marks peer as malicious.
Definition: peers_state.cpp:109
const std::weak_ptr< dev::p2p::Host > host_
Definition: peers_state.hpp:57
PeersMap pending_peers_
Definition: peers_state.hpp:62
std::shared_ptr< TaraxaPeer > addPendingPeer(const dev::p2p::NodeID &node_id, const std::string &address)
Definition: peers_state.cpp:74
ThreadSafeMap< dev::p2p::NodeID, std::chrono::steady_clock::time_point > malicious_peers_
Definition: peers_state.hpp:64
bool is_peer_malicious(const dev::p2p::NodeID &peer_id)
Checks if peer is in malicious peers list.
Definition: peers_state.cpp:113
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:30
const FullNodeConfig kConf
Definition: peers_state.hpp:65
std::shared_ptr< TaraxaPeer > getPendingPeer(const dev::p2p::NodeID &node_id) const
Definition: peers_state.cpp:19
PeersMap getAllPeers() const
Definition: peers_state.cpp:69
PeersMap peers_
Definition: peers_state.hpp:61
std::vector< dev::p2p::NodeID > getAllPendingPeersIDs() const
Definition: peers_state.cpp:58
std::shared_ptr< TaraxaPeer > setPeerAsReadyToSendMessages(dev::p2p::NodeID const &node_id, std::shared_ptr< TaraxaPeer > peer)
Definition: peers_state.cpp:97
std::unordered_map< dev::p2p::NodeID, std::shared_ptr< TaraxaPeer > > PeersMap
Definition: peers_state.hpp:19
size_t getPeersCount() const
Definition: peers_state.cpp:85
PeersState(std::weak_ptr< dev::p2p::Host > host, const FullNodeConfig &conf)
Definition: peers_state.cpp:5
Definition: vote_manager.hpp:23
SubprotocolPacketType
SubprotocolPacketType is used in networking layer to differentiate packet types.
Definition: packet_types.hpp:12
Definition: config.hpp:24