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/logger.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 addr_t& node_addr,
37 const std::string& log_channel_name);
38
39 virtual ~PacketHandler() = default;
40 PacketHandler(const PacketHandler&) = default;
44
50 // TODO: use unique_ptr for packet data for easier & quicker copying
51 void processPacket(const threadpool::PacketData& packet_data) override;
52
53 private:
54 void handle_caught_exception(std::string_view exception_msg, const threadpool::PacketData& packet_data,
55 const dev::p2p::NodeID& peer,
57 bool set_peer_as_malicious = false);
58
62 virtual void process(const threadpool::PacketData& packet_data, const std::shared_ptr<TaraxaPeer>& peer) = 0;
63
64 protected:
65 bool sealAndSend(const dev::p2p::NodeID& node_id, SubprotocolPacketType packet_type, dev::bytes&& rlp_bytes);
66 void disconnect(const dev::p2p::NodeID& node_id, dev::p2p::DisconnectReason reason);
67
68 protected:
69 // Node config
71
72 std::shared_ptr<PeersState> peers_state_{nullptr};
73
74 // Shared packet stats
75 std::shared_ptr<TimePeriodPacketsStats> packets_stats_;
76
77 // Declare logger instances
79};
80
81} // namespace taraxa::network::tarcap
Definition FixedHash.h:35
Definition RLP.h:56
Base Packet handler base class that consists processPacket function.
Definition base_packet_handler.hpp:13
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:70
std::shared_ptr< TimePeriodPacketsStats > packets_stats_
Definition packet_handler.hpp:75
void disconnect(const dev::p2p::NodeID &node_id, dev::p2p::DisconnectReason reason)
Definition packet_handler.cpp:115
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
bool sealAndSend(const dev::p2p::NodeID &node_id, SubprotocolPacketType packet_type, dev::bytes &&rlp_bytes)
Definition packet_handler.cpp:81
std::shared_ptr< PeersState > peers_state_
Definition packet_handler.hpp:72
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
#define LOG_OBJECTS_DEFINE
Definition logger.hpp:60
DisconnectReason
Definition Common.h:85
@ UserReason
Definition Common.h:98
std::vector<::byte > bytes
Definition Common.h:46
Definition vote_manager.hpp:23
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:40