1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 08:37:46 +00:00

SpiceAgent: Add support for reading chunks larger than 2048 bytes

This commit is contained in:
Caoimhe 2023-05-13 15:09:51 +01:00 committed by Andreas Kling
parent 3b6d63f723
commit 50a8db3922
3 changed files with 69 additions and 24 deletions

View file

@ -120,15 +120,19 @@ ErrorOr<void> SpiceAgent::did_receive_clipboard_message(ClipboardMessage& messag
ErrorOr<ByteBuffer> SpiceAgent::read_message_buffer()
{
auto port = TRY(m_spice_device->read_value<Port>());
if (port != Port::Client) {
return Error::from_string_literal("Attempted to read message bytes from a port that wasn't meant for the client!");
}
auto size = TRY(m_spice_device->read_value<u32>());
auto buffer = TRY(ByteBuffer::create_uninitialized(size));
auto header = TRY(m_spice_device->read_value<ChunkHeader>());
auto buffer = TRY(ByteBuffer::create_uninitialized(header.size()));
TRY(m_spice_device->read_until_filled(buffer));
// If the header's size is bigger than or equal to 2048, we may have more data incoming.
while (header.size() >= message_buffer_threshold) {
header = TRY(m_spice_device->read_value<ChunkHeader>());
auto new_buffer = TRY(ByteBuffer::create_uninitialized(header.size()));
TRY(m_spice_device->read_until_filled(new_buffer));
TRY(buffer.try_append(new_buffer));
}
return buffer;
}
};