Add proper support for ListExtensions

This commit is contained in:
Oskari Alaranta 2026-02-09 03:45:03 +02:00
parent 09e442ff43
commit 7376cd17ac
1 changed files with 23 additions and 2 deletions

View File

@ -2850,14 +2850,35 @@ BAN::ErrorOr<void> handle_packet(Client& client_info, BAN::ConstByteSpan packet)
{
dprintln("ListExtensions");
CARD8 extension_count = 0;
CARD32 extension_length = 0;
for (const auto& extension : g_extensions)
{
if (extension.handler == nullptr)
continue;
extension_count++;
extension_length += extension.name.size() + 1;
}
xListExtensionsReply reply {
.type = X_Reply,
.nExtensions = 0,
.nExtensions = extension_count,
.sequenceNumber = client_info.sequence,
.length = 0,
.length = (extension_length + 3) / 4,
};
TRY(encode(client_info.output_buffer, reply));
for (const auto& extension : g_extensions)
{
if (extension.handler == nullptr)
continue;
TRY(encode(client_info.output_buffer, extension.name));
TRY(encode(client_info.output_buffer, '\0'));
}
for (size_t i = 0; (extension_length + i) % 4; i++)
TRY(encode(client_info.output_buffer, '\0'));
break;
}
case X_GetKeyboardMapping: