Skip to content

discv4/discv4_ping.cpp

Namespaces

Name
discv4

Source code

// discv4_ping.cpp

#include "discv4/discv4_ping.hpp"
#include "discv4/discv4_constants.hpp"

namespace discv4 {

std::vector<uint8_t> discv4_ping::RlpPayload()
{
    rlp::RlpEncoder encoder;
    if (auto res = encoder.BeginList(); !res) {
        return std::vector<uint8_t>(); // Return empty on error
    }
    if (auto res = encoder.add( Version() ); !res) {
        return std::vector<uint8_t>();
    }
    auto from_encoded = fromEp.encode();
    if (!from_encoded) {
        return std::vector<uint8_t>();
    }
    if (auto res = encoder.AddRaw( from_encoded.value() ); !res) {
        return std::vector<uint8_t>();
    }
    auto to_encoded = toEp.encode();
    if (!to_encoded) {
        return std::vector<uint8_t>();
    }
    if (auto res = encoder.AddRaw( to_encoded.value() ); !res) {
        return std::vector<uint8_t>();
    }
    uint32_t now              = static_cast<std::uint32_t>( std::time( nullptr ) );
    uint32_t expire_in_1_minute = now + kPacketExpirySeconds;
    if (auto res = encoder.add( expire_in_1_minute ); !res) {
        return std::vector<uint8_t>();
    }
    if (auto res = encoder.EndList(); !res) {
        return std::vector<uint8_t>();
    }

    auto bytes_result = encoder.MoveBytes();
    if (!bytes_result) {
        return std::vector<uint8_t>(); // Return empty on error
    }
    rlp::Bytes bytes = std::move(bytes_result.value());
    bytes.insert( bytes.begin(), PacketType() );
    return std::vector<uint8_t>( bytes.begin(), bytes.end() );
}

} // namespace discv4

Updated on 2026-04-13 at 23:22:46 -0700