1#include <xrpld/overlay/Message.h>
3#include <xrpld/overlay/Compression.h>
4#include <xrpld/overlay/detail/TrafficCount.h>
6#include <xrpl/beast/utility/instrumentation.h>
7#include <xrpl/protocol/PublicKey.h>
9#include <google/protobuf/message.h>
22 ::google::protobuf::Message
const& message,
23 protocol::MessageType type,
32 XRPL_ASSERT(messageBytes,
"xrpl::Message::Message : non-empty message input");
38 if (messageBytes != 0)
43 "xrpl::Message::Message : message size matches the buffer");
50#if defined(GOOGLE_PROTOBUF_VERSION) && (GOOGLE_PROTOBUF_VERSION >= 3011000)
51 return message.ByteSizeLong();
53 return message.ByteSize();
72 bool const compressible = [&] {
73 if (messageBytes <= 70)
79 case protocol::mtMANIFESTS:
80 case protocol::mtENDPOINTS:
81 case protocol::mtTRANSACTION:
82 case protocol::mtGET_LEDGER:
83 case protocol::mtLEDGER_DATA:
84 case protocol::mtGET_OBJECTS:
85 case protocol::mtVALIDATOR_LIST:
86 case protocol::mtVALIDATOR_LIST_COLLECTION:
87 case protocol::mtREPLAY_DELTA_RESPONSE:
88 case protocol::mtTRANSACTIONS:
90 case protocol::mtPING:
91 case protocol::mtCLUSTER:
92 case protocol::mtPROPOSE_LEDGER:
93 case protocol::mtSTATUS_CHANGE:
94 case protocol::mtHAVE_SET:
95 case protocol::mtVALIDATION:
96 case protocol::mtPROOF_PATH_REQ:
97 case protocol::mtPROOF_PATH_RESPONSE:
98 case protocol::mtREPLAY_DELTA_REQ:
99 case protocol::mtHAVE_TRANSACTIONS:
182 pack(in, payloadBytes);
189 pack(in, uncompressedBytes);
219 int const type = (
static_cast<int>(*(in + 4)) << 8) + *(in + 5);
compression::Compressed Compressed
std::optional< PublicKey > validatorKey_
Message(::google::protobuf::Message const &message, protocol::MessageType type, std::optional< PublicKey > const &validator={})
Constructor.
compression::Algorithm Algorithm
static int getType(std::uint8_t const *in)
Get the message type from the payload header.
static std::size_t totalSize(::google::protobuf::Message const &message)
std::vector< uint8_t > const & getBuffer(Compressed tryCompressed)
Retrieve the packed message data.
std::vector< uint8_t > buffer_
static void setHeader(std::uint8_t *in, std::uint32_t payloadBytes, int type, Algorithm compression, std::uint32_t uncompressedBytes)
Set the payload header.
void compress()
Try to compress the payload.
static std::size_t messageSize(::google::protobuf::Message const &message)
std::size_t getBufferSize()
Retrieve the size of the packed but uncompressed message data.
std::vector< uint8_t > bufferCompressed_
TrafficCount is used to count ingress and egress wire bytes and number of messages.
std::size_t compress(void const *in, std::size_t inSize, BufferFactory &&bf, Algorithm algorithm=Algorithm::LZ4)
Compress input data.
constexpr std::size_t kHeaderBytesCompressed
constexpr std::size_t kHeaderBytes
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.