framing/message_stream.hpp¶
Namespaces¶
| Name |
|---|
| rlpx |
| rlpx::framing |
Classes¶
| Name | |
|---|---|
| struct | rlpx::framing::Message |
| struct | rlpx::framing::MessageSendParams |
| class | rlpx::framing::MessageStream Message stream handles framing, encryption, and compression. |
Source code¶
// Copyright 2025 GeniusVentures
// SPDX-License-Identifier: Apache-2.0
#pragma once
#include "../rlpx_types.hpp"
#include "../rlpx_error.hpp"
#include "frame_cipher.hpp"
#include "../socket/socket_transport.hpp"
#include <boost/asio/spawn.hpp>
#include <memory>
namespace rlpx::framing {
// Protocol message structure
struct Message {
uint8_t id;
ByteBuffer payload;
};
// Message send parameters
struct MessageSendParams {
uint8_t message_id;
ByteView payload;
bool compress;
};
class MessageStream {
public:
MessageStream(
std::unique_ptr<FrameCipher> cipher,
socket::SocketTransport transport
) noexcept;
[[nodiscard]] VoidResult
send_message(const MessageSendParams& params, boost::asio::yield_context yield) noexcept;
[[nodiscard]] Result<Message>
receive_message(boost::asio::yield_context yield) noexcept;
void enable_compression() noexcept { compression_enabled_ = true; }
void close() noexcept;
[[nodiscard]] bool is_compression_enabled() const noexcept {
return compression_enabled_;
}
[[nodiscard]] const auth::FrameSecrets& cipher_secrets() const noexcept {
return cipher_->secrets();
}
private:
[[nodiscard]] FramingResult<void>
send_frame(ByteView frame_data, boost::asio::yield_context yield) noexcept;
[[nodiscard]] FramingResult<ByteBuffer>
receive_frame(boost::asio::yield_context yield) noexcept;
std::unique_ptr<FrameCipher> cipher_;
socket::SocketTransport transport_;
bool compression_enabled_{false};
// Reusable buffers to minimize allocations
ByteBuffer send_buffer_;
ByteBuffer recv_buffer_;
};
} // namespace rlpx::framing
Updated on 2026-04-13 at 23:22:46 -0700