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:
parent
3b6d63f723
commit
50a8db3922
3 changed files with 69 additions and 24 deletions
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue