discv4/packet_factory.hpp
Namespaces
Classes
Types
|
Name |
| enum class |
PacketError |
| using outcome::result< void, PacketError > |
PacketResult |
| using std::function< void(const std::vector< uint8_t > &, const udp::endpoint &)> |
SendCallback |
Types Documentation
enum PacketError
| Enumerator |
Value |
Description |
| kNullPacket |
|
|
| kSignFailure |
|
|
using PacketResult
using discv4::PacketResult = outcome::result<void, PacketError>;
using SendCallback
using discv4::SendCallback = std::function<void(const std::vector<uint8_t>&, const udp::endpoint&)>;
Source code
// packet_factory.h
#ifndef RLP_PEERDISCOVERY_PACKET_FACTORY_HPP
#define RLP_PEERDISCOVERY_PACKET_FACTORY_HPP
#include <memory>
#include <vector>
#include <functional>
#include <boost/outcome/result.hpp>
#include <boost/asio.hpp>
// Boost.Asio
namespace asio = boost::asio;
using udp = asio::ip::udp;
// RLP
#include <rlp/rlp_decoder.hpp>
// nil::crypto3
#include <nil/crypto3/hash/sha2.hpp>
#include <nil/crypto3/hash/keccak.hpp>
namespace discv4 {
// Forward declarations
class discv4_packet;
namespace outcome = BOOST_OUTCOME_V2_NAMESPACE;
enum class PacketError {
kNullPacket,
kSignFailure,
};
using PacketResult = outcome::result<void, PacketError>;
using SendCallback = std::function<void(const std::vector<uint8_t>&, const udp::endpoint&)>;
class PacketFactory
{
public:
// Send Ping and await Pong asynchronously
static PacketResult SendPingAndWait(
asio::io_context& io,
const std::string& fromIp, uint16_t fUdp, uint16_t fTcp,
const std::string& toIp, uint16_t tUdp, uint16_t tTcp,
const std::vector<uint8_t>& privKeyHex,
SendCallback callback,
uint16_t* boundPort = nullptr );
private:
static PacketResult SignAndBuildPacket(
discv4_packet* packet,
const std::vector<uint8_t>& privKeyHex,
std::vector<uint8_t>& out );
static void SendPacket(
asio::ip::udp::socket& socket,
const std::vector<uint8_t>& msg,
const udp::endpoint& target );
};
} // namespace discv4
#endif // RLP_PEERDISCOVERY_PACKET_FACTORY_HPP
Updated on 2026-04-13 at 23:22:46 -0700