TARAXA
Loading...
Searching...
No Matches
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/logging.hpp"
17
19
20template <class PacketType>
21PacketType decodePacketRlp(const dev::RLP& packet_rlp) {
22 return util::rlp_dec<PacketType>(packet_rlp);
23}
24
25template <class PacketType>
26dev::bytes encodePacketRlp(PacketType packet) {
27 return util::rlp_enc(packet);
28}
29
34 public:
35 PacketHandler(const FullNodeConfig& conf, std::shared_ptr<PeersState> peers_state,
36 std::shared_ptr<TimePeriodPacketsStats> packets_stats, const std::string& log_channel_name);
37
38 virtual ~PacketHandler() = default;
39 PacketHandler(const PacketHandler&) = default;
43
49 // TODO: use unique_ptr for packet data for easier & quicker copying
50 void processPacket(const threadpool::PacketData& packet_data) override;
51
52 private:
53 void handle_caught_exception(std::string_view exception_msg, const threadpool::PacketData& packet_data,
54 const dev::p2p::NodeID& peer,
56 bool set_peer_as_malicious = false);
57
61 virtual void process(const threadpool::PacketData& packet_data, const std::shared_ptr<TaraxaPeer>& peer) = 0;
62
63 protected:
64 bool sealAndSend(const dev::p2p::NodeID& node_id, SubprotocolPacketType packet_type, dev::bytes&& rlp_bytes);
65 void disconnect(const dev::p2p::NodeID& node_id, dev::p2p::DisconnectReason reason);
66
67 protected:
68 // Node config
70
71 std::shared_ptr<PeersState> peers_state_{nullptr};
72
73 // Shared packet stats
74 std::shared_ptr<TimePeriodPacketsStats> packets_stats_;
75
77};
78
79} // namespace taraxa::network::tarcap
Definition RLP.h:56
Base Packet handler base class that consists processPacket function.
Definition base_packet_handler.hpp:14
Packet handler base class that consists of shared state and some commonly used functions.
Definition packet_handler.hpp:33
PacketHandler(PacketHandler &&)=default
const FullNodeConfig & kConf
Definition packet_handler.hpp:69
std::shared_ptr< TimePeriodPacketsStats > packets_stats_
Definition packet_handler.hpp:74
void disconnect(const dev::p2p::NodeID &node_id, dev::p2p::DisconnectReason reason)
Definition packet_handler.cpp:114
PacketHandler(const PacketHandler &)=default
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:67
logger::Logger logger_
Definition packet_handler.hpp:76
bool sealAndSend(const dev::p2p::NodeID &node_id, SubprotocolPacketType packet_type, dev::bytes &&rlp_bytes)
Definition packet_handler.cpp:80
std::shared_ptr< PeersState > peers_state_
Definition packet_handler.hpp:71
void processPacket(const threadpool::PacketData &packet_data) override
Packet processing function wrapper that logs packet stats and calls process function.
Definition packet_handler.cpp:14
virtual void process(const threadpool::PacketData &packet_data, const std::shared_ptr< TaraxaPeer > &peer)=0
Main packet processing function.
PacketHandler & operator=(const PacketHandler &)=delete
PacketHandler & operator=(PacketHandler &&)=delete
Definition packet_data.hpp:12
DisconnectReason
Definition Common.h:73
@ UserReason
Definition Common.h:86
std::vector<::byte > bytes
Definition Common.h:46
std::shared_ptr< spdlog::logger > Logger
Definition logging.hpp:12
Definition vote_manager.hpp:24
dev::bytes encodePacketRlp(PacketType packet)
Definition packet_handler.hpp:26
PacketType decodePacketRlp(const dev::RLP &packet_rlp)
Definition packet_handler.hpp:21
SubprotocolPacketType
SubprotocolPacketType is used in networking layer to differentiate packet types.
Definition packet_types.hpp:12
dev::bytes const & rlp_enc(RLPEncoderRef encoder_to_reuse, T const &obj)
Definition encoding_rlp.hpp:193
Definition config.hpp:41