TARAXA
packet_handler.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <libdevcore/RLP.h>
4 
5 #include <memory>
6 #include <string_view>
7 
8 #include "exceptions.hpp"
9 #include "logger/logger.hpp"
14 
15 namespace taraxa::network::tarcap {
16 
17 // Taraxa capability name
18 constexpr char TARAXA_CAPABILITY_NAME[] = "taraxa";
19 
21 
26  public:
27  PacketHandler(const FullNodeConfig& conf, std::shared_ptr<PeersState> peers_state,
28  std::shared_ptr<TimePeriodPacketsStats> packets_stats, const addr_t& node_addr,
29  const std::string& log_channel_name);
30  virtual ~PacketHandler() = default;
31  PacketHandler(const PacketHandler&) = default;
35 
41  void processPacket(const threadpool::PacketData& packet_data);
42 
43  void requestPbftNextVotesAtPeriodRound(const dev::p2p::NodeID& peerID, PbftPeriod pbft_period, PbftRound pbft_round);
44 
45  private:
46  void handle_caught_exception(std::string_view exception_msg, const threadpool::PacketData& packet_data,
47  const dev::p2p::NodeID& peer,
49  bool set_peer_as_malicious = false);
50 
54  virtual void process(const threadpool::PacketData& packet_data, const std::shared_ptr<TaraxaPeer>& peer) = 0;
55 
61  virtual void validatePacketRlpFormat(const threadpool::PacketData& packet_data) const = 0;
62 
63  protected:
70  void checkPacketRlpIsList(const threadpool::PacketData& packet_data) const;
71 
72  bool sealAndSend(const dev::p2p::NodeID& nodeID, SubprotocolPacketType packet_type, dev::RLPStream&& rlp);
73  void disconnect(const dev::p2p::NodeID& node_id, dev::p2p::DisconnectReason reason);
74 
75  protected:
76  // Node config
78 
79  std::shared_ptr<PeersState> peers_state_{nullptr};
80 
81  // Shared packet stats
82  std::shared_ptr<TimePeriodPacketsStats> packets_stats_;
83 
84  // Declare logger instances
86 };
87 
88 } // namespace taraxa::network::tarcap
Definition: FixedHash.h:35
Class for writing to an RLP bytestream.
Definition: RLP.h:484
Packet handler base class that consists of shared state and some commonly used functions.
Definition: packet_handler.hpp:25
PacketHandler(PacketHandler &&)=default
const FullNodeConfig & kConf
Definition: packet_handler.hpp:77
PacketHandler & operator=(PacketHandler &&)=delete
void processPacket(const threadpool::PacketData &packet_data)
Packet processing function wrapper that logs packet stats and calls process function.
Definition: packet_handler.cpp:21
std::shared_ptr< TimePeriodPacketsStats > packets_stats_
Definition: packet_handler.hpp:82
void disconnect(const dev::p2p::NodeID &node_id, dev::p2p::DisconnectReason reason)
Definition: packet_handler.cpp:128
PacketHandler(const PacketHandler &)=default
void checkPacketRlpIsList(const threadpool::PacketData &packet_data) const
Checks if packet rlp is a list, if not it throws InvalidRlpItemsCountException.
Definition: packet_handler.cpp:15
void handle_caught_exception(std::string_view exception_msg, const threadpool::PacketData &packet_data, const dev::p2p::NodeID &peer, dev::p2p::DisconnectReason disconnect_reason=dev::p2p::DisconnectReason::UserReason, bool set_peer_as_malicious=false)
Definition: packet_handler.cpp:80
virtual void validatePacketRlpFormat(const threadpool::PacketData &packet_data) const =0
Validates packet rlp format - items count.
std::shared_ptr< PeersState > peers_state_
Definition: packet_handler.hpp:79
PacketHandler & operator=(const PacketHandler &)=delete
bool sealAndSend(const dev::p2p::NodeID &nodeID, SubprotocolPacketType packet_type, dev::RLPStream &&rlp)
Definition: packet_handler.cpp:94
virtual void process(const threadpool::PacketData &packet_data, const std::shared_ptr< TaraxaPeer > &peer)=0
Main packet processing function.
PacketHandler(const FullNodeConfig &conf, std::shared_ptr< PeersState > peers_state, std::shared_ptr< TimePeriodPacketsStats > packets_stats, const addr_t &node_addr, const std::string &log_channel_name)
Definition: packet_handler.cpp:8
void requestPbftNextVotesAtPeriodRound(const dev::p2p::NodeID &peerID, PbftPeriod pbft_period, PbftRound pbft_round)
Definition: packet_handler.cpp:137
Stats for all received and sent packets of all types.
Definition: time_period_packets_stats.hpp:16
Definition: packet_data.hpp:12
#define LOG_OBJECTS_DEFINE
Definition: logger.hpp:60
DisconnectReason
Definition: Common.h:85
@ UserReason
Definition: Common.h:98
bytes rlp(_T _t)
Export a single item in RLP format, returning a byte array.
Definition: RLP.h:665
Definition: vote_manager.hpp:23
constexpr char TARAXA_CAPABILITY_NAME[]
Definition: packet_handler.hpp:18
SubprotocolPacketType
SubprotocolPacketType is used in networking layer to differentiate packet types.
Definition: packet_types.hpp:12
uint32_t PbftRound
Definition: types.hpp:25
EthBlockNumber PbftPeriod
Definition: types.hpp:24
Definition: config.hpp:24